Java基础

注释、标识符、关键字

注释

平时我们编写代码,在代码量比较少的时候,我们可以看懂自己写的,但是当项目结构一旦复杂起来,我们就需要用的注释了,一是为了自己看的清楚,同时也是为了和别人更好的协作。

注释并不会被执行,如它的名字一样,只起到注释的作用,即给别人看,让别人一目了然你这代码写的是什么。所以说注释是一个非常好的习惯。

Java注释有三种类型:

  • 单行注释
1
// 这是单行注释
  • 多行注释
1
2
3
4
/*
1.这是多行注释的第一行
2.这是多行注释的第二行
*/
  • 文档注释
1
2
3
4
/**
*@Author:这是文档注释中作者名
*其他的可自行探索哦~
*/

关于注释的样式,可以在IDEA的settings里更改成自己喜欢的样式,包括颜色等。

idea中注释设置

标识符

Java所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识符。

Java里一些常见的关键字名如图所示:

java常见关键字

关于标识符的注意点

  1. 所有的标识符都应该以字母(A-Z或者a-z),美元符($)、或者下划线(_)开始;
  2. 首字符之后可以是字母(A-Z或者a-z),美元符($)、下划线(_)或数字的任何字符组合;
  3. 不能使用关键字作为变量名方法名
  4. 标识符是大小写敏感
  5. 合法标识符举例:age、 $salary、_value、__1_value
  6. 非法标识符举例:123abc、- salary、#abc;
  7. 可以使用中文命名,但是一般不建议这样去使用,也不建议使用拼音,很Low;
1
2
3
4
public static void main(String[] args){
String 球球大作战 = "最强王者";
System.out.println(球球大作战);
}

数据类型

强类型语言

要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用,优点是效率高。(C、Java、JS等)

弱类型语言

变量使用不需要先定义,由程序自行判断变量类型,效率低。(Python等)

Java中的数据类型

基本类型(primitive type)

数值类型

整数类型
  • byte:占1个字节范围:-128-127(剩下1位用于判断正负符号)
  • short:占2个字节范围:-32768-32767
  • int:占4个字节范围:-2147483648-2147483647
  • long:占8个字节:-9223372036854775808-9223372036854775807
浮点类型
  • float:占4个字节
  • double:占8个字节
字符类型
  • char:占2个字节
boolean类型

占1位,其值只有true和false两个

引用类型(reference type)

可以理解,除了基本数据类型外,都是引用数据类型。

  • 接口
  • 数组

基本数据类型面试题

整数拓展

进制
  • 二进制

    • 以0b开头
  • 十进制

    • 正常使用
  • 八进制

    • 以0开头
  • 十六进制
    • 以0x开头
1
2
3
4
5
6
7
8
9
10
11
12
public class IntTest{
public static void public static void main(String[] args) {
int i = 10;
int i2 = 010; //八进制
int i3 = 0x10; //十六进制

System.out.println(i); //10
System.out.println(i2); //8
System.out.println(i3); //16 0~9 A~F 16

}
}

浮点数拓展

银行业务怎么表示?

一般银行业务中的钱的数据类型会使用java的数学工具类—BigDecimal来表示,因为java中的float和double都存在一定的问题。

1
2
3
4
5
6
7
8
9
10
11
// float 有限 离散 舍入误差 接近但不等于
// double
// 最好完全彼用浮点数进行比较!!!
float f = 0.1f; // 0.1
double d = 1.0/10; // 0.1

System.out.println(f==d); // false

float d1 = 23132312312313212;
float d2 = d1 + 1;
System.out.println(d1==d2); // true

字符拓展

字符类型数据是由数值类型数据根据unicode编码转换而来,即字符类型数据实质上就是值不同的数值类型数据。

1
2
3
4
5
6
7
char c1 = 'A';
char c2 = '中';

System.out.println(c1); // A
System.out.println((int)c1); // 65 强制类型转换
System.out.println(c2); // 中
System.out.println((int)c2); // 20013 强制类型转换

小写字母的数值加上32转换成char类型即可变成大写字符。

U0000UFFFF之类的都是unicode编码。

1
2
# (\)是转义字符
char c3 = '\u0061' ; // a

常见的一些转义字符:

  • \t:制表符
  • \n:换行符
  • ……
关于字符串类型

布尔值拓展

1
2
3
boolean flag = true; // boolean类型变量如果没赋值,默认位false(一般是在类中)
if (flag == true) // 不提倡
if (flag){} // less is more

遗留问题:进制转换练习

字节科普

什么是字节

  • 位(bit):是计算机内部数据储存的最小单位,11001100是一个八位二进制数。
  • 字节(byte):是计算机中数据处理的基本单位,习惯上用大写B来表示。
  • 1B(byte,字节)=8bit(位)
  • 字符:是指计算机中使用的字母、数字、字和符号

转换关系

1bit表示1位
1Byte表示ー个字节 1B=8b
1024B=1KB
1024KB=1M
1024M=1G

电脑的32位和64位区别在于64位支持内存最大寻址空间位128g。

类型转換

由于Java是强类型语言,所以在进行有些运算的时候,需要用到类型转换。

1
2
低 -----------------------------------------------> 高
byte, short, char -> int -> long -> float -> double

在运算中,不同的类型数据会先转换为同一类型数据,然后进行运算,一般是转换成运算中最高的那类型数据的类型。

强制类型转换

1
2
3
4
5
6
7
8
9
public classs Test{
public static void main(String[] args){
int i =128;
byte b = (byte)i; // 内存溢出

System.out.println(i); // 128
System.out.println(b); // -128 (因为byte类型最大为127,超过会产生一些奇怪的不可知的结果)
}
}

强制转换(由高到低转换)时避免内存转换成小的类型,导致溢出。

自动类型转换

自动类型转换是由低类型向高类型的数据类型转换。

1
2
3
4
5
6
7
8
9
public classs Test{
public static void main(String[] args){
int i =128;
double b = i; // 不需要加上强制类型转换也不会报错,因为由低到高是自动类型转换

System.out.println(i); // 128
System.out.println(b); // 128.0
}
}

注意

  1. 不能对布尔值进行转换;
  2. 不能把对象类型转换为不相干的类型;(比如人🧑不能转换为猪🐖,而男人👨可以转换为女人👧)
  3. 在把高容量转换到低容量的时候,强制转换;
  4. 转换的时候可能存在内存溢出或者精度问题;
1
2
3
4
5
6
7
System.out.println((int)23.7); // 23
System.out.println((int)-45.89f); // -45

char c = 'a';
int d = c+1;
System.out.println(d); //98
System.out.println((char)d); //b

数字如果过大,数字之间可以用下划线分割,这时JDK7引入的特性。

1
2
3
4
5
6
int money = 10_0000_0000; // 操作比较大的数时,注意溢出问题
int years = 20;
int total = money*years; //-1474836480,计算的时候已经溢出
long total2 = money*years; //-1474836480,计算结果默认是int,计算完后才转换成long,也就是说转换之前就已经出问题了

long total3 = money*((long)years); 200_0000_0000//先把一个数转换为Long,之后计算会默认往高的数据类型long转换

变量、常量

变量

  • 变量是什么:就是可以变化的量!
  • Java是一种强类型语言,每个变量都必须声明其类型。
  • Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。

变量代表一块空间,位置是确定的,但是存储什么东西是不知道的。

变量类型

  • 实例变量:从属于对象;如果不自行初始化,则变量默认为这个类型的默认值

    • int默认是0
    • double默认是0.0
    • 布尔值默认是false
    • 除了基本类型外,其余类型的变量默认值都是null
  • 局部变量:在方法体内部的变量称之为局部变量,必须声明和初始化值

    • 变量类型 变量名字 = new Class1()
  • 类变量 static:在类体内,方法体外申明的。类变量从属于类,随着类出现而出现,消失而消失,不需要初始化

    • ```java
      public class Class1{
      // 类变量
      static double salary = 2500;
      public static void main(String[] args){
          System.out.println(salary)
      }
      
      }
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12



      ### 常量

      * 常量(constant):初始化( initialize)后不能再改变值!不会变动的值。

      * 所谓常量可以理解成一种特殊的变量,它的值被设定后,在程序运行过程中不允许被改变。

      * ```java
      final 常量名 = 值;
      final double PI = 3.14;
  • 常量名一般使用大写字符。

命名规范

  • 所有变量、方法、类名:见名知意;
  • 类成员变量:首字母小写和驼峰原则: monthSalary
  • 局部变量:首字母小写和驼峰原则
  • 常量:大写字母和下划线: MAX_VALUE
  • 类名:首字母大写和驼峰原则:Man, GoodMan
  • 方法名:首字母小写和驼峰原则:run(), runRun()

运算符

Java语言支持如下运算符:

  • 算术运算符:+, -, *, /, %, ++,—
  • 赋值运算符:=
  • 关系运算符:>,<,>=,<=,==,!=,instanceof
  • 逻辑运算符:&&,||,!
  • 位运算符:&,|,^,~,>>,<<,>>>(了解)
  • 条件运算符:?:
  • 扩展赋值运算符:+=,-=,*=,/=

运算中,会向数据中类型最大的转化。

自增自减

逻辑运算符和位运算符和条件运算符案例

短路运算

位运算

扩展赋值运算符

字符串连接

三元运算符及小结

包机制、 JavaDoc

包机制

  • 为了更好地组织类,Java提供了包机制,用于区別类名的命名空间。
  • 包语句的语法格式为:
  • 一般利用公司域名倒置作为包名
    • com.baidu.www
  • 为了能够使用某一个包的成员,我们需要在Java程序中明确导入该包。使用” Import”语句可完成此功能

包的本质就是个文件夹。

JavaDoc

javacdoc命令是用来生成自己的API文档。

参数信息:

  • @author:作者名
  • @version:版本号
  • @since:指明需要最早使用的jdk版本
  • @param:参数名
  • @return:返回值情况
  • @throws:异常抛出情况

代码文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package MultiplyState;

public class TTest {
static boolean dd;
public static void main(String[] args){
String sa = new String("Hello World");
String sb = new String("Hello World");

String sc = "Hello World";
String sd = "Hello World";

char c2 = '中';

System.out.println(dd);
// System.out.println(sc == sd);

}

/**
*
* @param name
* @return
* @throws Exception
*/
public String test(String name) throws Exception {
return name;
}
}

命令行生成JavaDoc文档

生成文档

通过IDEA生成javadoc文档

参考链接