常用DOS命令
-
回退一级目录:cd..
-
回退到顶级目录:cd\
-
清屏:cls
-
退出:exit
java在DOS中编译和运行
-
带包编译:
文件根目录 javac 文件名.java- 例子:javac HelloWorld.java
-
带包运行:
包根目录 java 包名.类名 参数1 参数2- 例子:java com.sean.test.HelloWorld arg1 arg2
-
jar包运行:
java -jar jar包目录\jar包名称.jar 参数1 参数2- 例子:java -jar E:\jar\util.jar arg1 arg2
关键字
-
访问控制
private protected public
-
类,方法和变量
abstract class extends final implements interface native new static strictfp synchronized transient volatile
-
程序控制
break continue return do while if else for
instanceof switch case default -
异常处理
try catch throw throws
-
包相关
import package
-
基本类型
boolean byte char double float int long short null
true false -
变量引用
super this void
-
保留字
goto const
-
不常用字段解释
- strictfp:在接口和类上加上该标识,会对float和double进行严格计算
- transient:在对象成员变量中加上该标识,在对象序列化时,被标识变量不会被序列化
- volatile:在变量前加入该标示,解决多线程情况下变量的可见性和有序性,但无法解决原子性问题,应用场景为,变量的值不参与修改的情况。参见:Java并发编程:volatile关键字解析
数据类型
-
基本数据类型
1 A:整数 占用字节数 2 byte 1 3 short 2 4 int 4 5 long 8 6 B:浮点数 7 float 4 8 double 8 9 C:字符 10 char 2 11 D:布尔 12 boolean 1 13 14 注意:!!!!! 15 整数默认是int类型,浮点数默认是double。 16 17 长整数要加L或者l。 18 单精度的浮点数要加F或者f。
思考题和面试题
-
下面两种方式有区别吗?
1 float f1 = 12.345f; // 本身是一个float类型 2 float f2 = (float)12.345; // 开始是一个double类型,强转为float类型 -
下面的程序有问题吗,如果有,在哪里呢?
1 byte b1 = 3; 2 byte b2 = 4; 3 byte b3 = b1 + b2; // 有问题,byte参与运算就转换为int类型,编译会报错 4 byte b4 = 3 + 4; // 常量,先把结果计算出来,然后看是否在byte的范围内,如果在,就不报错 -
下面的操作结果是什么呢?
1 byte b = 130; // 编译报错,130不在范围内 2 byte b = (byte)130; // -126 源码反码补码!??? -
字符参与运算
1 是查找ASCII里面的值 2 'a' 97 3 'A' 65 4 '0' 48 5 6 System.out.println('a'); // a 7 System.out.println('a' + 1); // 98 -
字符串参与运算
1 这里其实是字符串的连接 2 3 System.out.println("hello"+'a'+1); // helloa1 4 System.out.println('a'+1+"hello"); // 98hello 5 System.out.println("5+5="+5+5); // 5+5=55 6 System.out.println(5+5+"=5+5"); // 10=5+5
赋值运算符
扩展的赋值运算符的特点 隐含了自动强制转换。
面试题:
short s = 1; s = s + 1;(编译错误)
1short s = 1; 2s += 1;(<==>s=(short)(s+1)) 3请问上面的代码哪个有问题?
##位运算 后续补充…..
##方法
- 方法重载:方法名称相同,参数列表不同,与返回值无关。
- 方法覆盖:方法名称相同,参数列表相同,返回值相同。
##java内存分配
-
栈:存储局部变量(在方法定义中或者方法申明上定义的变量)以及常量值
数据使用完毕就消失 -
堆:存储所有new出来的对象
每一个new出来的东西都有地址 每一个变量都有默认值 byte,short,int,long 0 float,double 0.0 char '\u0000' boolean false 引用类型 null 数据使用完毕后,在垃圾回收器空闲的时候回收。 -
方法区:
class内容区域:文件中的内容,包含成员变量和成员方法,每个class的方法会有一个地址,为堆中的调用提供连接 静态区:静态变量和静态方法
-
本地方法去:与本地系统相关
-
寄存器:CPU相关
创建对象,内存的流程图: (1)把Student.class文件加载到内存 (2)在栈内存为s开辟空间 (3)在堆内存为学生对象申请空间 (4)给学生的成员变量进行默认初始化。null,0 (5)给学生的成员变量进行显示初始化。林青霞,27 (6)通过构造方法给成员变量进行初始化。刘意,30 (7)对象构造完毕,把地址赋值给s变量 
##成员变量和局部变量区别
- 在类中的位置 成员变量:类中,方法外 局部变量:在方法中或方法声明上
- 在内存中的位置 成员变量:堆 局部变量:栈
- 初始化的值 成员变量:有默认值 局部变量:没有默认值,只有定义,赋值,才能使用
- 生命周期 成员变量:随着对象的创建而创建,随着对象的消失而消失 局部变量:随着方法的调用而存在,随着方法的结束而消失
this
作用:
- 解决了局部变量隐藏成员变量的问题
##构造方法
- 格式:
-
方法名和类名相同
-
没有返回值类型,void也没有
-
没有返回值
1思考题:构造方法中可不可以有return语句呢? ***** 2可以。而是我们写成这个样子就OK了:return; 3其实,在任何的void类型的方法的最后你都可以写上:return;
-
##static关键字
-
特点: 1.1 随着类的加载而加载 1.2 优先于对象存在 1.3 被类的所有对象共享 1.4 既可以通过类名调用,也可以通过对象名调用
-
内存图 静态的内容在方法去的静态区
-
注意事项 3.1 静态方法中没有this对象 3.2 静态只能访问静态