##8:30-9:00 学习打卡
##9:30-13:00 java学习
##15:00-18:00 java学习
1.初始化块
格式如下:
[修饰符] {
//可执行代码
}
修饰符只能时static
初始化块虽然时类的成员,但是他没有名字使用无法通过类来调用,初始化块和构造器作用十分相似,都是开始的时候执行,可以将多个构造器相同的放入初始化块里,有助于提高代码的复用性。
使用static放在初始化前面称为静态初始化块,也被称为类初始化块。
普通初始化块队对象进行初始化类初始化块队类进行初始化,静态初始化块是类相关的,因此静态初始化总比普通的初始化要先执行。
public class ss {
static{
System.out.println("静态初始化块");
}
public ss(){
System.out.println("无参构造器");
}
public ss(int a){
System.out.println("有参构造器输出:"+a);
}
{
System.out.println("普通初始化块");
}
public static void main(String[] args) {
new ss();
new ss(8);
}
}
输出结果:
静态初始化块
普通初始化块
无参构造器
普通初始化块
有参构造器输出:8
可以看出静态始终在最前,先执行初始化才开始执行构造器的。
2.==和equals方法
java有两种比较变量是否相等的方法:==和equals;
当使用==来判断两个是否相等是,如果基本类型相同时,且都是数值类型,只要两个变量值相等,就返回true,如果时引用变量时,只有它们指向同一个对象时,才会返回true。
public class ss {
public static void main(String[] args) {
String s1="你好java";
String s2="你好";
String s3="java";
String s4="你好"+"java";
String s5=s2+s3;
System.out.println(s1==s4);
System.out.println(s1==s5);
}
}
结果:
true
false
因为s1和s4是指向同一个常量池,使用相同。s5因为是连接在一起的使用不相同。
3.final修饰符
表示该变量一旦获取将不可改变。final修饰的变量必须由程序员指定初始值。
成员变量
final static 类型 变量:必须在静态初始化块或声明该变量时赋初始值。
final 类型 变量:必须在非静态初始化块或声明该变量时或构造器中赋初始值。
局部变量
形参如果为final的话不能更改他的值。
实例的话赋第一次值才能用,不赋值不要紧,但不能二次赋值。
final方法
final修饰的方法不可被重写,在不希望子类重新父类这个方法时用到。
final类
final修饰的类不能有子类。
4.抽象类
必须有abstract来修饰,抽象类不能用于创造实例,只能当作父类被其他子类继承。
抽象类可以有成员变量,方法(普通方法和抽象方法),构造器,初始化块,内部类。
抽象方法
必须有abstract来修饰,此方法必须要子类重写,有此类的话类也必须时抽象类。
public abstract class Animal {
private String name;
private int age;
public Animal() {
}
public Animal(String name, int age) {//有参构造器
this.name = name;
this.age = age;
}
public String getName() {//获取名字
return name;
}
public int getAge() {//获取年龄
return age;
}
public abstract void eat();
}
public class Cat extends Animal{
String name;
int age;
public Cat() {
}
public Cat(String name, int age) {
super(name,age);
}
@Override
public void eat() {//重写eat方法
// TODO 自动生成的方法存根
System.out.println("猫吃鱼");
}
}
public class Animaldemo {
public static void main(String [] args) {
Animal a=new Cat("大猫",10);
a.eat();
System.out.println(a.getName()+"今年"+a2.getAge()+"岁");
}
}
//结果:
//猫吃鱼
//大猫今年10岁
5.接口
接口用interface修饰,他也是抽象类,修饰符默认是包权限控制符,即只有在相同包结构才可以访问该接口。
一个接口可以有多个直接父类,但接口只能继承接口,不能继承类。
接口与抽象类不同,接口完全支持多继承,和类继承相似,子接口扩展某个接口,会获得所有抽象方法,常量。
接口跟抽象一样,不能用于创造实例。
public interface Jumpping {
public abstract void jump();
}
public class Cat implements Jumpping {
@Override
public void jump() {
System.out.println("猫跳高");
}
public static void main(String [] args){
Jumpping j=new Cat();
j.jump();
}
}
结果:猫跳高