java 基础知识2
return 单独使用跳出当前方法结束方法的运行。
在 Java 中,必须先有类才能有对象,先要类加载。
对象的成员变量有默认值。0 0.0 false null
构造器用于初始化一个类的对象,并返回对象的地址。任何类定义出来就有一个默认的无参构造器(语法糖),定义了有参构造器后就没有了默认无参构造器。
this 代表当前对象的地址
封装:面向对象三大特征之一,合理隐藏,合理暴露。隐藏实现的细节,暴露访问的接口。
标准 JavaBean ,成员变量都用 private 修饰且提供对应的 getter ,setter 方法,要有一个无参构造器。
"" 出来的字符串在堆中的字符串常量池中 (StringTable HashTable 结构,不能扩容,初始为空),new 出来的字符串在堆中。
字符串拼接(+)底层时new了一个StringBuilder对象调用append()方法进行拼接,最后调用toString()方法,等于是new了一个新对象放入堆中。
String.intern()方法:将字符串对象尝试放入串池,没有则放入,有则不放,并将串池中的对象返回。(jdk1.7以后)
String 类型推荐用 equlas 方法比较,更推荐用 Objects 工具类的 equlas 方法。equlasIgnoreCase 方法忽略大小写比较。
String 常用 API:
charAt(int indext) 获取索引处的字符
toCharArray() 将字符串转为数组返回
subString() 截取得到新字符串
replace() 使用新值替换字符串中的旧值
split() 根据规则切割字符串返回字符串数组
ArrayList 常用 API:
add() 将元素插入集合末尾返回是否成功,或者指定索引位置,并将其他元素后移无返回值
remove() 删除指定索引处的元素并返回,或者指定的元素并返回是否删除成功,并将其他元素前移
set() 修改指定索引的元素并返回修改前的元素
static
不推荐用对象访问静态变量,底层栈中入操作数栈后马上就出栈了,影响性能
静态方法只能访问静态成员,静态方法不能出现 this 关键字
代码块
静态代码块,随着类的加载而加载,自动执行一次,静态数据的初始化;
构造代码块,创建对象时在构造器执行前执行,初始化实例资源
面向对象三大特征之二,继承(extends 关键字):
子类继承父类后,就可以使用父类的公共方法与属性,提高代码的复用
在堆内存中子类对象的空间中含有父类的空间,父类的私有属性方法也在,只不过子类不能访问
子类不能继承父类的构造器,单继承,java 中的类都是 Object 的子类
子类可以直接使用父类的静态资源(共享)
在子类方法中访问成员(方法或变量)先在局部找,再在子类找,最后父类找,满足就近原则
子父类中出现重名的成员,优先使用子类的,使用父类可使用 super 关键字
方法重写
重写的方法的名称,形参列表与被重写的相同
私有方法不能被重写,重写方法的访问修饰符必须大于等于父类被重写的方法
不能重写静态方法
子类中所有构造器执行前默认执行父类的无参构造器,若父类无有参构造器,则用 super 关键字指定要使用的父类构造器,否则报错
因为子类初始化时可能会使用到父类的数据
子类构造器中也可以调用当前子类的其他构造器,但是这时就不能写父类构造器了,且其他构造器要放在第一行,会调用这个构造器中第一行默认的父类构造器
this 与 super 都必须在第一行
单例模式
只能有一个对象的类,分为饿汉与懒汉,有多种实现方式,但是一般反射和序列化可以破坏单例,一般用双重检查锁实现最佳。
建包语句
公司域名反写加技术名称,全部小写,放在类中第一行
相同包下的类可以直接使用,不同的包下需 import 包名.类名导包后再访问
一个类中使用相同名称的不同包下的类,只可以导一个包,另一个类要带包名访问
也可以导入静态方法,import static 包名.类名.静态方法名
权限修饰符
控制一个成员能够被访问的范围
可修饰成员变量,方法,构造器,内部类
private 同一个类中(同一个类文件也不行)
缺省(默认) 同一个包
protected 不同包的子类
public 不同包下的无关类
final
可修饰方法,变量,类,分别不能被重写,不能被再次赋值(对象地址不可变),不能被继承
常量
static final 修饰,单词全部大写,多个单词下划线连起来,必须有初始化值,执行过程中其值不变(对象地址不变)
编译阶段会进行字面量替换,将所有常量替换为字面量,提高性能
枚举
做信息的标志与分类
是一种语法糖
都是最终类,都继承了 java.lang.Enum
构造器私有,第一行默认罗列枚举对象的名称,是一种多例模式
抽象类
abstract 修饰类是抽象类,修饰方法是抽象方法,没有方法体,其子类必须实现抽象方法或者也是抽象类
不能创建对象,但是有构造器
模板方法模式
将功能定义为模板方法,放在抽象类中,模板方法中只定义能确定的方法(建议用 final 修饰),不能确定具体功能的定义为抽象方法让子类去实现,极大提高了代码的复用性
接口
interface 关键字修饰
不能实例化,成员都是 public 修饰的
类可以用 implements 实现接口,可以多实现,要重写所有抽象方法,或者定义为抽象类
接口可以多继承
jdk 8 后允许方法有方法体,默认方法 default 修饰用接口实现类调用,静态方法 static 修饰用本身接口名调用
jdk 9 后又 private 修饰的方法,只能再本类中被默认方法和其他私有方法调用
都默认用 public 修饰
一个类实现多个接口中有同样静态方法不冲突,有同名的默认方法不冲突子类重写方法即可(重写哪个接口的方法调用哪个), 继承了父类和实现接口中有同名的方法默认用父类的。
一个接口继承的多个接口如果有规范冲突则不能多继承,如方法同名同参但是返回值不同。
面向对象三大特征之三:多态
同类型的对象,执行同一个行为(方法),表现出不同的行为特征
方法调用时:编译看左边,运行看右边
变量调用时:编译和运行都看左边 侧重行为多态
多态前提:有继承/实现的关系,有父类引用指向子类对象,有方法的重写
优势:右边的对象可以实现解耦,只需要更改右边的对象,方法即可改变
但是多态下不能使用子类的独有功能
多态的原理,根据分析对象头找到对象实际的 Class
多态后要使用子类独有的成员,可以进行类型强转,但是类型不对会出现 ClassCastException ,所有应该在转换前进行类型的判断,用 instanceof 关键子,类型相同返回 true

浙公网安备 33010602011771号