Java笔记
Java SE
基本数据类型
整形:
浮点类型:
字符类型:
自动类型转换
强转丢失精度
运算符:
算术运算符:
逻辑运算符:
进制:
二、八、十六转十进制:
十进制转二、八、十六:
二、八、十六互转
二进制转换成八进制
规则:从低位开始,将二进制数每三位一组,转成对应的八进制数即可。 案例:请将 ob11010101 转成八进制
ob11(3)010(2)101(5) => 0325
二进制转换成十六进制
规则:从低位开始,将二进制数每四位一组,转成对应的十六进制数即可。 案例:请将 ob11010101 转成十六进制
ob1101(D)0101(5) = 0xD5
课堂练习:请将
0b11100101 转成 八进制 0b1110010110 转成 十六进制
八进制转换成二进制
规则:将八进制数每 1 位,转成对应的一个 3 位的二进制数即可。 案例:请将 0237 转成二进制
02(010)3(011)7(111) = 0b10011111
十六进制转换成二进制
规则:将十六进制数每 1 位,转成对应的 4 位的一个二进制数即可。 案例:请将 0x23B 转成二进制
0x2(0010)3(0011)B(1011) = 0b001000111011
二进制位运算:
面向对象:
类是抽象的,概念的,代表一类事物;
对象是具体的,代表一个具体事物;
类是对象的模版,对象是类的实体
简单类new对象过程:
方法区加载类信息,只加载一次 --> 在堆空间中开辟对象空间,属性先赋默认值,在构造器初始化值 --> 最后将该对象的地址传给堆中的变量引用
方法调用机制原理:
调用方法开辟新栈,先进后出,后进先出。
传参机制
Java中只有值传递,理解:对于基本数据类型,是将该值进行拷贝,然后传给目标方法,方法在栈中本身是一块独立空间,拷贝的值也不会影响原始参数;对于引用类型来说,理解为变量存放的是对象的地址,若要传递该值,其实也是将该变量进行拷贝再传递给目标方法,但拷贝的是一个对象的地址,在其他方法中操作该对象会影响到原对象;
递归:
作用域:
构造器:
访问修饰符:
三大特征:
封装:将抽象的数据和对数据的操作封装在一起,对外不显示细节,被保护在内部,程序的其他部分只有通过被授权的操作,才能对数据进行操作。
继承:
子类继承了所有的属性和方法,非私有的属性和方法可以在子类直接访问, 但是私有属性和方法不能在子类直接访 问,要通过父类提供公共的方法去访问
子类必须调用父类的构造器, 完成父类的初始化
当创建子类对象时,不管使用子类的哪个构造器,默认情况下总会去调用父类的无参构造器,如果父类没有提供无
参构造器,则必须在子类的构造器中用 super 去指定使用父类的哪个构造器完成对父类的初始化工作,否则,编译不会通过
如果希望指定去调用父类的某个构造器,则显式的调用一下 : super(参数列表)
super 在使用时,必须放在构造器第一行(super 只能在构造器中使用)
super() 和 this() 都只能放在构造器第一行,因此这两个方法不能共存在一个构造器
java 所有类都是 Object 类的子类, Object 是所有类的基类.
父类构造器的调用不限于直接父类!将一直往上追溯直到 Object 类(顶级父类)
子类最多只能继承一个父类(指直接继承),即 java 中是单继承机制。
不能滥用继承,子类和父类之间必须满足 is-a 的逻辑关系多态:
先再方法区中加载父类的类信息,再加载子类类信息
加载父类对象属性:先赋默认值在构造器初始值
加载子类对象属性:先赋默认值在构造器初始值
super和this的比较:
重载和重写:
多态:简单理解为不同的表现状态,例如重载、重写,一种表示可以实现多形式,多态是建立在封装和集成基础之上的。
多态的前提:两个类存在继承关系
多态的向上转型
多态的向下转型:
动态绑定机制
Object类理解:
equals方法
==理解:比较的是变量中存放的值,基本类型存放值,引用存放地址,所以↓
Object的equals方法只判断是否为同一个对象地址,一般需要重写:
hashCode方法:
返回该对象的哈希码值,为了提高哈希表的性能;由Object类定义的hashCode方法确实会针对不同的对象返回不同的整数,一般是通过将该对象的内部地址转换成一个整数来实现的
toString方法:
Object类中的输出为全类型@哈希值的十六进制,输出一个对象时会自动调用该方法,一般重写。
finalize方法:
当对象没有被引用,要被回收时,系统自动调用该对象的finalize方法,子类可以重写该方法
垃圾回收机制的调用,是有系统来决定的,也可以System.gc()主动触发,但不一定成功