2021/7/16

这篇博客主要介绍了Java中的初始化块(包括静态和普通)、==与equals的区别、final修饰符的使用以及抽象类和接口的概念和应用。通过实例展示了静态初始化块的执行顺序,解释了==与equals在字符串比较中的行为,并探讨了final变量的初始化规则。此外,还讲解了抽象类不能实例化以及抽象方法的特点,最后阐述了接口作为多继承的实现方式及其特性。
摘要由CSDN通过智能技术生成

##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();
	}

}
结果:猫跳高

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值