注释

1
2
3
行内注释    //
多行注释 /* */
文档注释 /** */

标识符

  • 关键字
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 interface long native
new package private protected public
return strictfp short static super
switch synchronized this throw throws
transient try void volatile while

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

标识符注意点

  • 所有的标识符都应该以字母(A-Z或者a-z),美元符($)、或者下划线(_)开始
  • 首字母之后可以是字母(A-Z或者a-z),美元符($)、下划线(_)或数字的任何字符组合
  • 不能使用关键字作为变量名或方法名
  • 标识符是大小写敏感
  • 可以使用中文命名,但是一般不建议这样去使用,也不建议使用拼音,很low

数据类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//八大基本数据类型

//整数
int num1 = 10; //最常用
byte num2 = 20;
short num3 = 30;
long num4 = 40L; //Long类型要在数字后面加个L

//小数:浮点数
float num5 =50.1F; //float类型要在数字后面加个F
double num6 = 3.141592653;

//字符
char name ='A';
//字符串,String不是关键字,是一个类
String namea = "阿龙";

//布尔值:是非
boolean flag = true;
//boolean flag =flase;

数据类型扩展

1
2
3
4
5
//整数拓展 :  进制   二进制0b  十进制  八进制0  十六进制0x
int i = 10;
int i2 = 010; //八进制0
int i3 = 0x10; //十六进制0x 0~9 A~F

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

//浮点数拓展? 银行业务怎么表示? 钱
//BigDecimal 数学工具类

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

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

float d1 = 23232323233232323f;
float d2 = d1 + 1;
System.out.println(d1==d2); //true
1
2
3
4
5
6
7
8
9
//字符拓展?

char c1 = 'a';
char c2 = '中';

System.out.println(c1);
System.out.println((int)c1); //强制转换
System.out.println(c2);
System.out.println((int)c2); //强制转换
1
2
3
4
5
//所有的字符本质还是数字
//编码 Unicode 表: (97=a 65=A) 2字节 0 - 65536 Excel 2^16=65536
//U0000 UFFFF
char c3 = '\u0061';
System.out.println(c3); //a
1
2
3
4
5
//转义字符
// \t 制表符
// \n 换行
//...
System.out.println("Hello\tworld");

下方代码块内容以后会学到,从内存方面解释原因

1
2
3
4
5
6
7
8
String sa = new String("hello world");
String sb = new String("hello world");
System.out.println(sa==sb); //false

String sc = "hello world";
String sd = "hello world";
System.out.println(sc==sd); //true
//对象 从内存分析
1
2
3
4
5
//布尔值扩展
boolean flag = true;
if(flag==true){} //新手
if(flag){} //老手
//Less is More! 代码要精简易读

类型转换

1
2
3
4
5
6
7
8
int i = 128;
byte b = (byte)i; //内存溢出
double b1 = (byte)i;
//上边加了括号的转换是强制转换 (类型)变量名 高--低
// 自动转换 低--高

System.out.println(i); //128
System.out.println(b); //-128

1. 不能对布尔值进行转换

2.不能把对象类型转换为不相干的类型

3.在把大容量转换到低容量时,强制转换

4.转换的时候可能存在内存溢出,或者精度问题!

1
2
System.out.println((int)23.7);      //23
System.out.println((int)-45.89f); //-45
1
2
3
4
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 total3 = money*((long)years); //20000000000 先把一个数转换为long
为避免l L大小写和数字1混淆,尽量都用大写(F L)

变量

变量作用域

局部变量:方法里面

实例变量:方法外面,类的里面。从属于对象;如果不进行初始化,这个类型的默认值。所有的数值类型初始化为0或0.0,字符串类型初始化为u0000,布尔值类型初始化为false,除了基本类型,其余的默认值都是null

类变量:加了static关键词的变量(暂时先这么认为);方法外面,类的里面;从属于类,随着类一起存在、一起消失。

常量

变量类型前边的都是修饰符,修饰符不存在先后顺序

变量的命名规范

运算符

  • IDEA常用快捷键ctrl+D: 复制当前行到下一行
  • 在有Long类型数据参与运算时,结果为Long类型
  • 在无Long类型数据参与运算时,无论参与运算的有无Int类型,结果都为Int类型

算术运算符

二元运算符:+ - * /

一元运算符:++ (自增运算符) – (自减运算符)

1
2
3
4
5
6
7
8
9
10
11
public class Demo03 {
public static void main(String[] args) {
int a = 3;
int b = a++; //执行完这行代码后,先给b赋值,再自增
System.out.println(a); //4
int c = ++a; //执行完这行代码前,先自增,再给c赋值
System.out.println(a); //5
System.out.println(b); //3
System.out.println(c); //5
}
}

很多运算,我们会使用一些工具类来操作!(Math.)

1
2
double pow = Math.pow(2,3);
System.out.println(pow); //8

逻辑运算符

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Demo04 {
public static void main(String[] args) {
//与(and) 或(or) 非(取反)
boolean a = true;
boolean b = false;
System.out.println("a && b:" +(b&&a)); //逻辑与运算:两个变量都为真,结果才为true
System.out.println("a || b:" +(b||a)); //逻辑或运算:两个变量有一个为真,则结果为true
System.out.println("! a && b:" +!(b&&a)); //如果是真,则变为假,如果是假则变为真

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

位运算

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
public class Demo05 {
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 = 16 2*2*2*2
效率极高
<< *2 (左移=乘以2)
>> /2 (右移=除以2)
0000 0000 0
0000 0001 1
0000 0010 2
0000 0011 3
0000 0100 4
0001 1000 8
0001 0000 16
*/
System.out.println(2<<3); //16
}
}

扩展赋值运算符以及字符串连接符

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Demo06 {
public static void main(String[] args) {
int a = 10;
int b = 20;

a+=b; //a = a+b
a-=b; //a = a-b
System.out.println(a); //10
//字符串连接符 +
System.out.println(""+a+b); //1020
System.out.println(a+b+""); //30
}
}

三元运算符

1
2
3
4
5
6
7
8
9
10
public class Demo07 {
public static void main(String[] args) {
//x ? y : z
//如果x==true,则结果为y,否则结果为z

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

包机制

包的本质就是一个文件夹

IDEA取消紧凑型中间包:Project右侧齿轮->Tree Appearance->取消Compact Middle Packages

定义包:package

引入包:import

1
import.com.wang.base.*; //*是通配符,此语句表示导入包下所有的类

观看阿里巴巴开发手册

JavaDoc

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**
* @author wang
* @version 1.0 //在方法外面就是类注释
* @since 1.8
*/

public class Doc {
String name;

/**
* @author wang
* @param name //在方法里面就是方法注释
* @return
* @throws Exception
*/
public String test(String name) throws Exception{
return name;
}
}

在线api帮助文档:https://docs.oracle.com/javase/8/docs/api/


通过命令行生产JavaDoc文档!

  • 选择类,右击–Open in–Explorer–地址栏前cmd+空格
  • 输入javados -encoding -UTF8 -charset -UTF8 Dos.java,回车
  • 目录下生成很多根文件,打开index.html可看到类,构造器等内容

javados—生成文档

-encoding -UTF8 -charset -UTF8 —实现中文,不出现乱码

Dos.java —指向IDEA的文件名,Dos是程序包的名字