参考教程

JDK8帮助文档

狂神说Java视频

JDK、JRE、JVM

QQ截图20201222200026

HelloWorld、注释、标识符

1
2
3
4
5
6
7
8
9
10
11
12
13
public class HelloWorld {//类
public static void main(String[] args) {//方法
//单行注释
System.out.println("Hello");
/*
多行注释
*/

String $hello="World";//变量
String _hello="World";//标识符大小写敏感

}
}

所有的关键字

fiyfyi

数据类型

类型

变量类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class type {
public static void main(String[] args) {
//八大基本数据类型
//整数
int num1=10;//最常用
byte num2=20;
short num3=30;
long num4=30L;//long类型要在数字后面加L
//浮点数
float num5=50.1F;//浮点数默认为double,用float要用F区分一下
double num6=3.1415926;
//字符
char name ='鸟';
//字符串,String不是关键字,是一个类
String str="asuka";//IDEA里Ctrl+Alt+鼠标左键单击String,跳转到定义
//布尔值
boolean flag=true;
}
}

字节

字节

数据类型的扩展(面试题)

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
public class type_extern {
public static void main(String[] args) {
//整数扩展
int i=10;
int i2=010;//八进制用0开头
int i3=0x10;//十进制用0x开头

System.out.println(i);
System.out.println(i2);//八进制的10是十进制的8
System.out.println(i3);//十六进制的10是十进制的16

System.out.println("******************************************************");
//浮点扩展
float f=0.1f;
double d=1.0/10;
System.out.println(f==d);//false
System.out.println(f);
System.out.println(d);

float e1=1231231231133f;
float e2=e1+1;
System.out.println(e1==e2);//true
/*
原因:由于浮点数有限、离散,存在舍入误差,存在大约接近但不等于的情况
*************最好完全避免使用浮点数进行比较*************
要用一个类:BigDecimal 数学工具类
*/


System.out.println("******************************************************");
//字符扩展
char c1='a';
char c2='中';
System.out.println(c1);
System.out.println(c2);
System.out.println((int) c1);//强制转换
System.out.println((int) c2);
//**所有的字符本质还是数字
//char的编码用Unicode表,范围是0-2^16(65536)
char c3='\u0061';
System.out.println(c3);//用\\u转义十六进制编码0061=十进制97,即为字母a

//从内存分析对象
String str_a=new String("hello");
String str_b=new String("hello");
System.out.println(str_a==str_b);//false

String str_c="hello";
String str_d="hello";
System.out.println(str_c==str_d);//true
//面试题基于此问==与equals的区别

System.out.println("******************************************************");
//布尔值扩展
boolean flag=true;
//以下两行代码意义及效果一样
if (flag==true){}//新手
if (flag){}//老手
//Less is More

}
}

类型转换

QQ截图20201226203756

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
public class type_change {
public static void main(String[] args) {
int i=128;
byte b=(byte) i;//byte最大值127,内存溢出,补码为-128
double c=i;

//高→低 需要强制转换 (类型)变量名
//低→高 自动转换 直接=变量名

System.out.println(i);
System.out.println(b);
System.out.println(c);
/*
注:
1.不能对布尔值进行转换
2.不能把对象类型转换为不相干的类型
3.在把高容量转换到低容量的时候,强制转换
4.转换的时候可能存在内存溢出或者精度问题
*/
System.out.println((int)23.7);
System.out.println((int) -45.89f);

char c1='a';
int d=c1+1;
System.out.println(d);
System.out.println((char) d);

System.out.println("*********************************************");
//操作比较大的数的时候注意溢出问题
//JDK7新特性:数字之间可以用下划线分割
int money=10_0000_0000;
System.out.println(money);
int year=20;
int total=money*year;//计算的时候溢出了
System.out.println(total);
long total2=money*year;//默认是int,转换之前计算两个int相乘的结果时已经溢出
System.out.println(total2);

long total3=money*((long)year);//先把一个数转换为long
System.out.println(total3);

}
}

变量、常量、作用域

变量

1
2
type varName [=value] [{,varName[=value]}];
//数据类型 变量名 = 值; 可以使用逗号隔开来声明多个同类型的变量。
  • Java作为一种强类型语言,每个变量都必须声明其类型;
  • Java变量是程序中最基本的存储单元,其要素包括变量名、变量类型和作用域。
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
29
30
31
32
33
34
35
36
37
38
39
40
41
public class var {
//属性:变量,分为类变量、实例变量和局部变量三种

//类变量:需要关键字static,方法里可以直接调用,不用new
static double salary=2500;

/*
实例变量:从属于对象;如果不进行初始化,会赋予这个类型的默认值,
数字类型是0,布尔值默认false,
除了基本类型其余都是null
*/
String name;
int age;

//常量
//修饰符不存在先后顺序
static final double PI = 3.14;
final static double Pi = 3.14;


//main方法
public static void main(String[] args) {
//局部变量;必须声明和初始化值,只在本括号内有用
int a=1,b=2,c=3;

//变量类型 变量名字 = new var();
var var2 = new var();
System.out.println(var2.age);
System.out.println(var2.name);

System.out.println(salary);

System.out.println(PI);
System.out.println(Pi);

}

//其他方法
public void add(){
}
}

常量

1
final 常量名 = 值;
  • 值设定之后在程序运行过程中不允许被改变
  • 常量名一般用大写字符

变量的命名规范

  • 所有变量、方法、类名:见名知意
  • 类成员变量:首字母小写和驼峰原则: monthSalary,即除了第一个单词以外,后面的单词首字母大写
  • 局部变量:首字母小写和驼峰原则
  • 常量:大写字母和下划线: MAX_ VALUE
  • 类名:首字母大写和驼峰原则: Man, GoodMan
  • 方法名:首字母小写和驼峰原则: run(), runRun()

运算符

QQ截图20201227142547

算术、关系运算、自增自减

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
29
30
31
32
public class base {
public static void main(String[] args) {
//算术运算符
long a=1234131121L;
int b=123;
short c=10;
byte d=8;
System.out.println(a+b+c+d);//运算中若有一个为long类型变量参与,结果为long类型
System.out.println(b+c+d);
System.out.println(c+d);//若没有long类型变量参与,默认结果均为int类型

//关系运算符返回一个布尔值
int e=10;
int f=20;
System.out.println(e==f);

//++ --:自增自减——一元运算符
int i=3;
int j=i++;//执行完这一行代码后,先给j赋值,i再自增
//相当于在这里隐藏了一句i=i+1;
System.out.println(i);
//相当于在这里隐藏了一句i=i+1;
int k=++i;//执行完这一行代码之前,i先自增,再给k赋值
System.out.println(i);
System.out.println(j);
System.out.println(k);

//幂运算 使用Math工具类来操作
System.out.println(Math.pow(2,3));

}
}

逻辑运算

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class logic {
public static void main(String[] args) {
//逻辑运算符
boolean a = true;
boolean b = false;

System.out.println(a&&b);
System.out.println(a||b);
System.out.println(!(a&&b));

//短路运算
int c = 5;
boolean d = (c<4)&&(c++<4);//与运算在遇到第一个为false的情况下不会继续判断后面第二个值
System.out.println(d);
System.out.println(c);//并没有执行后面的c++
}
}

位运算

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
public class bit {
public static void main(String[] args) {
//位运算
/*
A = 0011 1100
B = 0000 1101
------------------------
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001 (异或)
~B = 1111 0010

面试题:用最快的方法计算2*8——计算机是不会乘除法的
效率极高,直接跟底层打交道
<<:按位左移,相当于把数字*2
>>:按位右移,相当于把数字/2

0000 0000 0
0000 0001 1
0000 0010 2
0000 0100 4
0000 1000 8
0001 0000 16

*/
System.out.println(2<<3);
}
}

>>>与>>的区别参考

条件运算及扩展赋值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class extern {
public static void main(String[] args) {
int a = 10;
int b = 20;
a+=b;
a-=b;
System.out.println(a+=b);

//字符串连接符+:只要有一个变量是String类型,都会把其他变量转换成String类型然后进行连接
System.out.println("sum"+a+b);
System.out.println(a+b+"sum");//【面试题】会先进行运算,再检测到有String变量,进行字符串转换

//三元运算符
//x ? y : z
//如果x==true,则结果为y,否则为z
int score = 80;
String type = score < 60 ? "不及格" : "及格";
System.out.println(type);
}
}

包机制

QQ截图20201228190818

JavaDoc(文档注释)

在IDEA中输入/**回车可自动生成文档注释样式,可加在类或者方法上面:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**
* @author Cuper
* @version 1.0
* @since 1.8
*/

public class Doc {
String name;

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

参数信息:

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

用命令行生成JavaDoc文档:

1
javadoc -encoding UTF-8 -charset UTF-8 xxx.java

然后会生成:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
D:\Java\code\JavaSE_learning\grammar\src\type>javadoc -encoding UTF-8 -charset UTF-8 type_base.java
正在加载源文件type_base.java...
正在构造 Javadoc 信息...
标准 Doclet 版本 1.8.0_181
正在构建所有程序包和类的树...
正在生成.\type\type_base.html...
正在生成.\type\package-frame.html...
正在生成.\type\package-summary.html...
正在生成.\type\package-tree.html...
正在生成.\constant-values.html...
正在构建所有程序包和类的索引...
正在生成.\overview-tree.html...
正在生成.\index-all.html...
正在生成.\deprecated-list.html...
正在构建所有类的索引...
正在生成.\allclasses-frame.html...
正在生成.\allclasses-noframe.html...
正在生成.\index.html...
正在生成.\help-doc.html...

点击index.html可以看到官方界面的JavaDoc文档。

用IDEA生成JavaDoc参考