常用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关键字解析
数据类型
基本数据类型
A:整数 占用字节数 byte 1 short 2 int 4 long 8 B:浮点数 float 4 double 8 C:字符 char 2 D:布尔 boolean 1 注意:!!!!! 整数默认是int类型,浮点数默认是double。 长整数要加L或者l。 单精度的浮点数要加F或者f。
思考题和面试题
下面两种方式有区别吗?
float f1 = 12.345f; // 本身是一个float类型 float f2 = (float)12.345; // 开始是一个double类型,强转为float类型
下面的程序有问题吗,如果有,在哪里呢?
byte b1 = 3; byte b2 = 4; byte b3 = b1 + b2; // 有问题,byte参与运算就转换为int类型,编译会报错 byte b4 = 3 + 4; // 常量,先把结果计算出来,然后看是否在byte的范围内,如果在,就不报错
下面的操作结果是什么呢?
byte b = 130; // 编译报错,130不在范围内 byte b = (byte)130; // -126 源码反码补码!???
字符参与运算
是查找ASCII里面的值 'a' 97 'A' 65 '0' 48 System.out.println('a'); // a System.out.println('a' + 1); // 98
字符串参与运算
这里其实是字符串的连接 System.out.println("hello"+'a'+1); // helloa1 System.out.println('a'+1+"hello"); // 98hello System.out.println("5+5="+5+5); // 5+5=55 System.out.println(5+5+"=5+5"); // 10=5+5
赋值运算符
扩展的赋值运算符的特点 隐含了自动强制转换。
面试题:
short s = 1; s = s + 1;(编译错误)
short s = 1;
s += 1;(<==>s=(short)(s+1))
请问上面的代码哪个有问题?
##位运算 后续补充…..
##方法
- 方法重载:方法名称相同,参数列表不同,与返回值无关。
- 方法覆盖:方法名称相同,参数列表相同,返回值相同。
##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也没有
没有返回值
思考题:构造方法中可不可以有return语句呢? ***** 可以。而是我们写成这个样子就OK了:return; 其实,在任何的void类型的方法的最后你都可以写上:return;
##static关键字
特点: 1.1 随着类的加载而加载 1.2 优先于对象存在 1.3 被类的所有对象共享 1.4 既可以通过类名调用,也可以通过对象名调用
内存图 静态的内容在方法去的静态区
注意事项 3.1 静态方法中没有this对象 3.2 静态只能访问静态