前言:

推荐免费Java基础入门视频:【狂神说Java】Java零基础学习视频通俗易懂_哔哩哔哩_bilibili

注释

  • 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
      42
      43
      44
      45
      46
      47
         //单行注释
      /*
      多行注释
      */
      /**
      文档注释
      */

      /**
      * ii. ;9ABH,
      * SA391, .r9GG35&G
      * &#ii13Gh; i3X31i;:,rB1
      * iMs,:,i5895, .5G91:,:;:s1:8A
      * 33::::,,;5G5, ,58Si,,:::,sHX;iH1
      * Sr.,:;rs13BBX35hh11511h5Shhh5S3GAXS:.,,::,,1AG3i,GG
      * .G51S511sr;;iiiishS8G89Shsrrsh59S;.,,,,,..5A85Si,h8
      * :SB9s:,............................,,,.,,,SASh53h,1G.
      * .r18S;..,,,,,,,,,,,,,,,,,,,,,,,,,,,,,....,,.1H315199,rX,
      * ;S89s,..,,,,,,,,,,,,,,,,,,,,,,,....,,.......,,,;r1ShS8,;Xi
      * i55s:.........,,,,,,,,,,,,,,,,.,,,......,.....,,....r9&5.:X1
      * 59;.....,. .,,,,,,,,,,,... .............,..:1;.:&s
      * s8,..;53S5S3s. .,,,,,,,.,.. i15S5h1:.........,,,..,,:99
      * 93.:39s:rSGB@A; ..,,,,..... .SG3hhh9G&BGi..,,,,,,,,,,,,.,83
      * G5.G8 9#@@@@@X. .,,,,,,..... iA9,.S&B###@@Mr...,,,,,,,,..,.;Xh
      * Gs.X8 S@@@@@@@B:..,,,,,,,,,,. rA1 ,A@@@@@@@@@H:........,,,,,,.iX:
      * ;9. ,8A#@@@@@@#5,.,,,,,,,,,... 9A. 8@@@@@@@@@@M; ....,,,,,,,,S8
      * X3 iS8XAHH8s.,,,,,,,,,,...,..58hH@@@@@@@@@Hs ...,,,,,,,:Gs
      * r8, ,,,...,,,,,,,,,,..... ,h8XABMMHX3r. .,,,,,,,.rX:
      * :9, . .:,..,:;;;::,.,,,,,.. .,,. ..,,,,,,.59
      * .Si ,:.i8HBMMMMMB&5,.... . .,,,,,.sMr
      * SS :: h@@@@@@@@@@#; . ... . ..,,,,iM5
      * 91 . ;:.,1&@@@@@@MXs. . .,,:,:&S
      * hS .... .:;,,,i3MMS1;..,..... . . ... ..,:,.99
      * ,8; ..... .,:,..,8Ms:;,,,... .,::.83
      * s&: .... .sS553B@@HX3s;,. .,;13h. .:::&1
      * SXr . ...;s3G99XA&X88Shss11155hi. ,;:h&,
      * iH8: . .. ,;iiii;,::,,,,,. .;irHA
      * ,8X5; . ....... ,;iihS8Gi
      * 1831, .,;irrrrrs&@
      * ;5A8r. .:;iiiiirrss1H
      * :X@H3s....... .,:;iii;iiiiirsrh
      * r#h:;,...,,.. .,,:;;;;;:::,... .:;;;;;;iiiirrss1
      * ,M8 ..,....,.....,,::::::,,... . .,;;;iiiiiirss11h
      * 8B;.,,,,,,,.,..... . .. .:;;;;iirrsss111h
      * i@5,:::,,,,,,,,.... . . .:::;;;;;irrrss111111
      * 9Bi,:,,,,...... ..r91;;;;;iirrsss1ss1111
      */

标识符和关键字

常见关键字:

abstract assert boolean break byte
case catch char class const
continue default do double else
enum extends final finally float
for goto if implements import
instanceof int interfact long native
new package private protected public
return strictfp short static super
switch synchronized this throw throws
transient try void volatile while

标识符注意点

  • 所有标识服都应该是以字母,$,_ 开始。
  • 首字母之后可以是字母,$,_,或数字的任何字符组合。
  • 不能使用关键字作为变量名和方法名。
  • 严格区分大小写

数据类型讲解

  • 强类型语言

    • 要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用。
  • 弱类型语言

  • Java的数据类型分为两大类

    • 基本类型(primitive type)

      fYSCkt.png引用类型(reference type):类,接口,数组

什么是字节

  • 位(bit):是计算机内部数据储存的最小单位,11001100是一个八位二进制数。

  • 字节(byte):是计算机中数据处理的基本单位,习惯上用大写B来表示。

  • 1B(byte,字节) = 8bit(位)。

  • 字符:是指计算机中使用的字母、数字、字和符号。

  • 1bit表示1位,

  • 1Byte表示1字节1B=8b,

  • 1024B=1KB

  • 1024M=1G

数据类型扩展及面试题讲解

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
63
64
65
66
67
68
69
70
71
public class Demo02 {
public static void main(String[] args) {
//整数拓展: 进制 二进制0b 十进制 八进制0 十六进制0x
int i = 10;
int i2 = 010; //八进制0
int i3 = 0x10; //十六进制0x 0~9 A~F 16

System.out.println(i);
System.out.println(i2);
System.out.println(i3);
System.out.println("====================================");
//====================================
//浮点数拓展? 银行业务怎么表示?$/¥
// BigDecimal 数学工具类
//====================================

//float 有限 离散 舍入误差 大约 接近但不等于
//double
//最好完全用浮点数比较

float f = 0.1f; //0.1
double d = 1.0/10; //0.1
System.out.println(f==d); //false
System.out.println(f);
System.out.println(d);

float d1 = 2321312312321f;
float d2 = d1+1;
System.out.println(d1==d2); //ture

//====================================
//字符拓展?
//====================================
System.out.println("====================================");
char c1 = 'A';
char c2 = '人';
System.out.println(c1);
System.out.println((int)c1); //强制转换
System.out.println(c2);
System.out.println((int)c2); //强制转换

//所有的字符本质还是数字
// 编码 Unicode 表:(97=a 65=A) 2字节 0 - 65536 Excel 2^16 = 65536

// U0000 UFFFF
char c3 = '\u0062';
System.out.println(c3); //b

//转义字符
// \t 制表符
// \n 换行
// ...
System.out.println("Hello\nWorld");

System.out.println("====================================");
String sa = new String("hello world");
String sb = new String("hello world");
System.out.println(sa==sb);

String sc = "hello world";
String sd = "hello world";
System.out.println(sc==sd);
//对象 从内存分析

//布尔值扩展
boolean flag = true;
if(flag==true){} //新手
if(flag){} //老手
//less is More 代码简介易读
}
}

类型转换

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

低 ---------------------------------------------高

byte,short,char -> int -> long -> float -> double

  • 运算中,不同类型的数组先转换为同一类型,然后进行运算。
  • 强制类型转换
  • 自动类型转换
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
public class Demo03 {
public static void main(String[] args) {
int i = 128;
byte b = (byte)i; //造成内存溢出
double c = i;
//强制转换 (类型)变量名 高->低
//自动转换 低->高
System.out.println(i);
System.out.println(b);
System.out.println(c);
/*
注意点:
1. 不能对布尔值进行转换
2. 不能把对象类型转换为不相干的类型
3. 再把高容量转换到低容量的时候,需要强制转换
4. 转换的时候可能存在内存溢出或精度问题
*/

System.out.println("=================");
System.out.println((int)23.6);
System.out.println((int)-45.99f);

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

//操作比较大的数字,注意溢出问题
//jdk7特性 数字之间可以用下划线分割
int money = 10_0000_0000;
// System.out.println(money);
int years = 20;
int total = money*years; //-1474836480 溢出
System.out.println(total);
long total2 = money*years;//默认是int 在转换前就已经溢出了
System.out.println(total2);
long total3 = money*(long)years;//单独对可能溢出的内容进行转换
System.out.println(total3);
// L多用大写
}
}

变量、常量、作用域

变量:

  • 变量是什么:就是可以变化的量。

  • Java是一种强类型语言,每个变量都必须声明其类型。

  • Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域

    1
    2
    type varName [=value] [{,varName[=value]}];
    //数据类型 变量名 = 值; 可以使用逗号隔开来声明多个同类型变量
  • 注意事项

    • 每个变量都有类型,类型可以是基本类型,也可以是引用类型。
    • 变量名必须是合法的标识符。
    • 变量声明是一条完整的语句,因此每一个声明都必须以分号结束。
    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
    package com.jokerdig.operator;
    /**
    * @author Joker大雄
    * @data 2021/8/10 - 16:53
    **/
    public class Demo04 {

    //属性:变量
    //实例变量:从属于对象 不初始化为默认值
    String name;
    int age;

    //main方法
    public static void main(String[] args) {
    // int a b c
    int a=1,b=2,c=3;//不推荐这种写法
    String name = "game";
    char x = 'x';
    double pi = 3.14;
    //局部变量 必须声明和初始胡
    int i =10;
    System.out.println(i);

    //new 对象
    Demo04 demo4 = new Demo04();
    System.out.println(demo4.age);
    }

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

    }
    }

常量:

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

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

    final 常量名 = 值

    final double PI=3.14;

  • 常量名一般使用大写字符。

1
2
3
4
5
6
7
8
9
10
11
12
/**
* @author Joker大雄
* @data 2021/8/10 - 17:13
**/
public class Demo05 {
//修饰符 不存在先后顺序
static final double PI = 3.14;

public static void main(String[] args) {
System.out.println(PI);
}
}

变量的命名规范

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

基本运算符

  • Java语言支持如下运算符

    • 算数运算符:+,-,*,/,%,++,--
    • 赋值运算符:=
    • 关系运算符:>,<,>=,<=,==,!= instanceof
    • 逻辑运算符:&&,||,!
    • 位运算符:&,|,^,~,>>,<<,>>(仅了解)
    • 条件运算符:?,:
    • 扩展赋值运算符:+=,-=,*=,/=
    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
    package com.jokerdig.operator;

    /**
    * @author Joker大雄
    * @data 2021/8/10 - 20:07
    **/
    public class Demo01 {
    public static void main(String[] args) {
    //二元运算符
    int a = 10;
    int b = 20;
    System.out.println(a + b);
    System.out.println(a - b);
    System.out.println(a * b);
    System.out.println(a / (double) b);


    //拓展
    long c = 23123123213L;
    int d = 123;
    short e = 10;
    byte f = 8;

    System.out.println(c + d + e + f);//Long
    System.out.println(d + e + f);//int
    System.out.println(e + f);//int
    //============================

    //关系运算符返回结果:正确,错误,布尔值
    int a1 = 10;
    int b1 = 20;
    int c1 = 21;
    System.out.println(a1>b1);
    System.out.println(a1<b1);
    System.out.println(a1==b1);
    System.out.println(a1!=b1);
    System.out.println(c1%a1);
    }
    }

自增自减运算符、初始Math类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package com.jokerdig.operator;

/**
* @author Joker大雄
* @data 2021/8/10 - 20:18
**/
public class Demo02 {
public static void main(String[] args) {
// ++ -- 自增 自减 一元运算符
int a = 3;
int b = a++; //执行完代码后,先赋值给b,再自增
int c = ++a;//执行完代码后,先自增,在赋值给c

System.out.println(a);
System.out.println(b);
System.out.println(c);

//拓展 幂运算 2^3 2*2*2=8 (基本数学运算,Java中用Math)
System.out.println(Math.pow(2,3));//pow返回一个double类型
//很多运算使用一些工具类来实现
}
}

逻辑运算符、位运算符

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
package com.jokerdig.operator;

/**
* @author Joker大雄
* @data 2021/8/10 - 20:29
**/
public class Demo03 {
public static void main(String[] args) {
//逻辑运算符
// 与& 或| 非!
boolean a = true;
boolean b = false;

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

//短路运算
int c = 5;
boolean d = (c<4)&&(c++<4);
System.out.println(d);
System.out.println(c);

//位运算符
/*
A = 0011 1100;
B = 0000 1101;

A&B = 0000 1100;
A/B = 0011 1101;
A^B = 0011 0001
~B = 1111 0010

2*8 = 16 2*2*2*2
<<左移 *2
>>右移 /2
0000 0000 0
0000 0001 1
0000 0010 2
0000 0011 3
0000 0100 4
0000 1000 8
0001 0000 16
*/
}
}

三元运算符及小结

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
package com.jokerdig.operator;

/**
* @author Joker大雄
* @data 2021/8/10 - 20:56
**/
public class Demo04 {
public static void main(String[] args) {
int a = 10;
int b = 20;

a+=b; //a=a+b
System.out.println(a);
a-=b; //a=a-b
System.out.println(a);

//字符串连接符 + , String
System.out.println(""+a+b);//先拼接
System.out.println(a+b+"");//先运算

//三元运算符
// x ? y :z
//如果x== true, 则结果为y,否则结果为z

int score = 80;
String type = score<60?"不及格":"及格";
System.out.println(type);
}
}

包机制

  • 为了更好地组织类,Java提供了包机制,用于区别类名的命名空间。

  • 包语法的语法格是为:

    package pkg1[. pkg2[.pkg3...]]

  • 一般利用公司域名倒置作为包名

  • 为了能够使用某一个包的成员,我们需要再Java程序中明确导入该包。使用"import"来导入。

    import package1[.package2...].(classname|*)

JavaDoc生成文档

  • JavaDoc命令使用来生成自己API文档的。

  • 参数信息

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

    dos命令生成doc文档:

    1
    javadoc -encoding UTF-8 -charset UTF-8 类名.java

    IDEA如何生成JavaDoc文档

    • 准备需要生成JavaDoc文档的类

    • tools->GenerateJavaDoc,配置local为``zh_CN,OCLA为:-encoding UTF-8 -charset UTF-8`

    • 点击OK便可以生成JavaDoc文档

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    package com.jokerdig.base;

    /**
    * @author Joker大雄
    * @data 2021/8/10 - 21:25
    * @version 1.0
    * @since 1.8
    **/
    public class Doc {

    String name;

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