JDK/JRE/JVM的三者联系
1.jdk:(Java Development ToolKit)Java语言开发工具包,jdk包含了jre和开发工具包。
2.jre:(Java runtime environment) Java运行环境。jre包含了jvm和核心类库
3.jvm:(Java Virtual Mathine)Java虚拟机,原来帮助我们运行java文件的。
面向对象的总结
1.封装
这是java面向对象语言的三大特性,其实就是将一个对象的属性私有化,外界无法直接通过类来访问,只有靠类自己提供一个方法返回属性对象。
2 .继承
继承需要注意三点:
1.子类会继承父类的非私有属性和方法。
2.子类可以拥有自己的属性和方法。
3.子类可以对父类的方法进行重写。但重写的返回值类型要一样,方法访问修饰符访问范围要比父类方法大或者相等。
3 .多态
多态就是父类声明指向子类引用。声明一个父类对象Parent p让其等于new 一个子类对象。关于多态,就记住一句话:编译看左边,运行看右边。
具体解释上面这句话:在代码书写阶段,也就是编译器编译期间,当你使用父类的声明变量时,只能调用父类中声明过的方法和属性,不然会报错,当程序真的运行时,当子类重写了该方法,就执行子类的方法,而不会是父类的方法,如果子类没有重写父类该方法,调用的就是父类方法了。
重载和重写的区别
1.重载是发生在同一个类中的,方法名相同,但参数列表不同,方法返回值也不一样,和访问修饰符无关
2.重写是子父类继承时出现的,此时方法名和参数列表要相同,返回值类型都要相同,访问修饰符子类的要比父类的访问修饰符权限大或者相同。
Java八大基本数据类型和对应的包装类
1.八大基本类型
名称 | 字节 | 比特位 |
---|---|---|
byte | 1 | 8 |
short | 2 | 16 |
int | 4 | 32 |
float | 4 | 32 |
double | 8 | 64 |
long | 8 | 64 |
char | 4 | 32 |
boolean | 1 | 8 |
2 .包装类:
基本数据类型 | 对应的包装类 |
---|---|
byte | Byte |
short | Short |
int | Integer |
float | Float |
double | Double |
long | Long |
char | Character |
boolean | Booolean |
static关键字
1.当类中static修饰的非私有成员属性时,可以直接通过类名.属性来获取。
2.static修饰的成员属性,所有类方法都可以直接使用,但static修饰的静态方法中无法使用非静态修饰的成员属性。
3.静态代码块:静态代码块会在类加载时首先加载然后执行一次。
有关子父类中加载顺序
当我们new一个类时,代码的执行加载顺序是怎么样的?
super和this关键字
1.super是原来调用父类的构造方法的,当被调用时,必须放在首位。
2.this是表示当前类,可以用来调用本类的 其他构造方法,但也必须放在首位。
3.this和super不能一起使用出现。
4.this和super不能在static修饰的方法中使用。
equals和==,hashCode
1.equals是Object超类中的方法,仅仅是比较两者引用对象地址是否相同。使用当我们需要比较两个对象相同的定义是内容相同时,就需要重写equals方法和hashCode方法。
2.我们可以通过重写hashCode方法,通过对象属性返回哈希值来实现判断两个对象是真正的内容相同。
3.两个对象如果有相同的hashCode也不一定相同,因为 hashCode() 所使用的杂凑算法也许刚好会让多个对象传回相同的杂凑值。越糟糕的杂凑算法越容易碰撞,但这也与数据值域分布的特性有关(所谓碰撞也就是指的是不同的对象得到相同的 hashCode)。
4.==对于基本数据类型用来进行数值是否相等,对于对象来说就是地址是否相同。对于equals来说,分两种情况,一个是没有重写equals方法,一个是重写了。
有关final关键字的总结:
1.主要用于变量,方法,类。
2.对于一个final变量来说,如果是基本数据类型,一旦初始化后就无法改变。如果是引用数据类型,那么初始化后便不能让其再指向其他对象
3.当使用final修饰类时,这个类无法被继承。
4.当final修饰方法时,目的有两个:其一锁定方法,防止继承类中对其进行重写。其次就是效率原因
接口和抽象类
1.接口默认是public修饰的,所有方法在接口中不能有实现(jdk1.8后可以有默认的实现),抽象类可以有非抽象方法。
2.接口中的实例变量默认是final修饰的,而抽象类中不一定。
3.一个类可以实现多个接口,但只能实现一个抽象类。
4.当类实现一个接口时,需要实现这个接口中的所有方法,而抽象类不需要。
5.接口不能new实例,但可以声明一个接口并且赋值一个实现该接口的类的实例对象。
标识符名命规范
1.标识符开头不能是数字
2.标识符可以由字母,数字,$和_组成
3.不能是关键字
Java中常见的关键字:
instanceof 关键字
用来判断当前实例是否是一个类的实例对象。
装箱和拆箱
1.装箱就是将int变成Integer包装类,使用的是Integer的valueOf(int)方法实现的。
2.拆箱就是将Integer变成int类型,使用的是intValue方法。
有关Integer的创建大小
当我们创建有关Integer大小在[-128,127]之间时,会默认使用IntegerCache.cache中存在的数值的,因此此时创建两个Integer对象并且赋值,直接使用 == 比较是true,但超过这个范围时,就是new一个Integer对象,此时就是引用对象了,再进行 = =就是false.
String字符串
String是一个只读字符串对象,使用final修饰。所以其引用的字符串不能被改变,一但定义,就无法删除修改,每次对String的操作都是生成新的String对象。
private final char value[];