JVM:java virtual machine
JRE:java runtime environment = JVM + java系统类库,运行java程序
JDK:java development kit = JRE + 编译/运行等命令工具
运行java的最小环境:JRE
开发java的最小环境:JDK
环境变量: JAVA_HOME: Path for jdk
CLASS_PATH: Path to search for Class, '.' default
PATH: Path for /jdk/bin
Development Steps:
new Java project
new Java package
new Java class
当且仅当运算数中有long时,运算结果才是long
long dis1 = 1000000000*100000000L; //no overflow, 100000000000000000
long dis2 = 1000000000*100000000; //overflow, 1569325056
运算从前向后进行,所以最好是第一个数字是Long
long dis1 = 100000000*10000000000*10000000L; //overflow,-15304949760000000
long dis2 = 100000000L*100000000000*10000000; //no overflow,1864712049423024128
System.time.currentTimeMillis: Milliseconds from start of 1970
Default type of decimal is double. For float constant a 'f' or 'F' is required.
浮点数会产生舍入误差,因为二进制表示有误差。完全不能接收误差的,使用BigDecimal
数据从小到大自动转换,从大到小强制转换
逻辑运算是短路的
加法运算符是从前向后的,所以
System.out.println(11+22+""); //输出33
System.out.println(""+11+22); //输出1122
变量作用域:到下面一个大括号。
相同作用域中不能有重名变量
switch语句:
优点:简介快速
缺点:只能判断整数相等
while和do-while:是否至少执行一次
返回每月天数的函数
switch(month) {
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
return 31;
case 2:
return 28;
default:
return 30;
}
Math.random(); 0-1之间的随机数
数组arr = {1,2,3};只能用于初始化
数组访问:arr.length
数组的复制:System.arraycopy(src, srcPos, dest, destPos, length);
b = Arrays.copyOf(original, newLength),多出来的length补默认值0
数组扩容:使用Arrays.copyOf方法进行扩容
方法的签名:方法名+参数类型
方法重载的意义:降低用户的使用负担,对于用户而言更加优雅
补充:
同一个文件中能够包含多个类,并列关系
public修饰的类只能有一个,且必须与文件名相同
构造方法特点:
给成员变量赋值
构造方法必须与类名相同
没有返回类型
默认提供,如果自己提供了,则没有默认的无参构造方法
this:只能用在类的非静态方法中,指当前对象
this的用法:
this.variable:访问成员变量
this.function:一般不用
如果构造函数出入的形参名字和成员变量一样,那么必须用this调用成员变量
技巧:可以使用this()调用本类的构造函数,实现不同构造函数
内存管理:JVM进行
堆:对象和成员变量
栈:局部变量
方法区:.class字节码文件(包括方法)
基本类型的等号是直接赋值
对象名的等号是复制引用,指向同一个文件,并非在拷贝对象,只是在拷贝引用
空指针异常:
Student[] s = new Student[5];
System.out.println(s[0]);
定义了一个Student类的数组,每个都指向null
也可以给引用类型的数组按下列语法赋值:
Student[] student = new Student[]{
new Student(name, age, address),
new Student(name, age, address),
new Student(name, age, address),
}
Java中,一个类只具有一个父类,不能继承多个父类。即不支持多继承
继承具有传递性
java规定:构造子类之前,必须先构造父类
如果子类中没有调用父类的构造方法,则默认super调用父类的无参构造方法
否则如果手动调用了super,则不默认调用
super的用法:
super.成员变量名
super.方法名
super()调用父类的构造方法
帮助理解的例子:studnet继承person,则在student中赋值:
this.studentid = 1120172954
super.name = "William"
(但是,其实用this.studentid也可以修改该属性)