Java 第一节课学习
1.java中==和equals和hashCode的区别
== 是判断相等运算符,用于比较基本数据类型的值是否相等,或者引用类型对象的内存地址是否相等
对象存放在堆中,栈中存放的是对象的地址.
可以看出"=="对栈中进行比较的.
Integer a1 = 127;
Integer b1 = 127;
Integer a = 128;
Integer b = 128;
System.out.println("a1==b1:" + (a1 == b1));
System.out.println("a==b:" + (a == b));
对于-128到127之间的数,会进行缓存,
equals
(1)默认情况(没有覆盖equals方法)下equals方法都是调用Object类的equals方法.主要用于判断对象的内存地址引用是不是同一个地址(是不是同一个对象)
(2)覆盖equals方法 String中equals方法的运行步骤
若A==B 即是同一个String对象 返回true
若对比对象是String类型则继续,否则返回false
判断A、B长度是否一样,不一样的话返回false
逐个字符比较,若有不相等字符,返回false
hashCode
当向集合中插入对象,当集合中有大量数据时.
2.int、char、long各占多少字节数
1字节: byte , boolean
2字节: short , char
4字节: int , float
8字节: long , double
1byte = 8bit
3.int与integer的区别
Integer是int的包装类
(1).int是一个基础类可以直接使用,Integer是给对象需要实例化
(2).int默认是0,Integer默认值时null
尽量不要使用封装类,每次都要拆包 和封包
对应的基础类,也有封装类
4.多态
(1)一个对象有多个特征
(2)条件 :继承,重写,父类引用指向子类对象.
(3)实现:继承父类重写方法,实现接口,方法重载
5.String、StringBuffer、StringBuilder区别
String 不可改变性, 用String对象来改变 ,把原有对象变为垃圾被回收,在创建新的对象.
string改变数据可复用,不会每次新建
stringBuffer 线程安全,大量数据,在多线程下使用.
StringBuulder 线程不安全,单线程下使用
6.内部类的作用
定义:把一个类定义在另外一个类中,这个类就是内部类。
意义: 内部类可以实现更好的封装;内部类的使用可以实现多重继承;
成员内部类:
访问: 外部类所以静态,非静态成员
被访问: 需要有外部类实例和内部类实例.就可访问
静态内部类:
访问: 可访问外部类的静态 成员, 不可非静态成员
被访问: 访问非静态类,需要创建一个外部类实例. 访问静态n类,使用内部类类名访问内部类的静态成员。
局部内部类:内部类对象仅仅为外部类的某个方法使用
在方法声明时不能包含任何修饰符.包括静态.
匿名内部类: 匿名内部类就是没有名字的内部类;
不能定义任何静态成员、方法。
方法不能是抽象的;
必须实现接口或抽象父类的所有抽象方法。
访问的外部类成员变量或成员方法必须用static修饰
7.抽象类:
抽象类是为了把相同的但不确定的东西的提取出来,为了以后的重用。定义成抽象类的目的,就是为了在 子类中实现抽象类
只有被继承,不能被实现.
抽象类中可以有抽象方法,也要用在abstract关键字申明.
继承抽象类子类必须重写抽象类中的抽象方法
有抽象方法, 一定是抽象类.抽象类可以没有抽象方法
8.接口
interface 是支持抽象类定义的两种机制,解耦.一个类可继承多个接口
8.父类的静态方法能否被子类重写
不能 可以通过子类实例调用静态方法
9抽象类与接口的应用场景
抽象类适用于子类之间有一些共同的属性或者方法,不需要子类去单独实现
接口适用于子类可能只是需要实现特定的一组功能,对其他的并没有约束
9.进程和线程的区别
进程是资源分配的最小单位,线程是应用的最小的单位.
一个应用可以有一个或两进程,
同一进程下的线程共享全局变量、静态变量等数据
10.序列化的方式
Serializable 和Parcelable
Parcelable比Serializable性能高
Serializable 使用详情页面 会产生大量临时变量,效率低
Parcelable 不能用于数据存储在磁盘的情况,因为不能保证数据的持续性
11.静态内部类的设计意图