javaSE基础学习day8

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37129433/article/details/87908014

代码块de概述和分类(面试的时候问,开发的时候用的少)

什么是代码块呢?在java中,用{}括起来的代码叫做代码块。代码块根据位置和声明的不同,可以分为局部代码块,构造代码块,静态代码块,同步代码块。(多线程中的类容)

  • 局部代码块:在方法中出现。限定变量生命周期,及早释放,提高内存利用率。
  • 构造代码块(初始化块),在类中方法外出现。将多个构造方法相同的代码放在一起,每次构造都执行,并且在构造方法之前执行。
  • 静态代码块。在类中方法外出现,并加上static修饰,用于给类做初始化,在加载类的时候执行,并且只执行一次。

面试题:

class Student {
	static {
		System.out.println("Student 静态代码块");
	}
	
	{
		System.out.println("Student 构造代码块");
	}
	
	public Student() {
		System.out.println("Student 构造方法");
	}
}

class Demo2_Student {
	static {
		System.out.println("Demo2_Student静态代码块");
	}
	
	public static void main(String[] args) {
		System.out.println("我是main方法");
		
		Student s1 = new Student();
		Student s2 = new Student();
	}
}

程序输出什么呢?
程序会输出:
Demo2_Student静态代码块
我是main方法
Student 静态代码块 这个只在内加载进内存的时候加载一次。
Student 构造代码块
Student 构造方法
Student 构造代码块
Student 构造方法

继承

继承的意义是什么呢?让类与类之间产生关系,子父类关系。
继承的好处:

  • 提高了代码的复用性

  • 提高了代码的维护性

  • 让类与类之间产生了关系,是多态的前提
    继承的弊端:

  • 类的耦合变强了

  • 开发的原则:低耦合,高类聚

java中继承的特点

java只支持单继承,不支持多继承。简单点的讲。就是一个儿子只能有一个父亲。但是Java支持多级继承父,子,孙。如果想用这个继承体系所有的功能用最低层创建类。如果想看这个体现的共性功能看最顶层的类。

继承的注意事项

  • 子类能继承父类的所有非私有成员(成员方法,成员变量)
  • 子类不能继承父类的构造方法。但是可以通过super调用父类的构造方法以及父类的方法。
  • 不要为了部分功能而去继承
    那么什么时候我们使用继承呢?继承体现的是一种包含关系。a is b。b要包含a。例如学生是人,老师也是人。那么Student类和Teacher类就可以继承Person类。

继承中成员变量的关系

this代表当前对象的引用,谁来调用我,我就代表谁。super代表当前对象父类的引用。
this和super有什么区别呢?

  • this.成员变量(成员方法) 可以用来调用本类的成员变量,也可以用来调用父类的成员变量
  • super.成员变量 (成员方法)只可以用来调用父类的成员变量。
    this(…) 可以用来调用本类的构造方法。super(…)用来调用父类的构造方法。

继承中构造方法的关系

子类中所有的构造方法默认都会访问父类中空参数的构造方法。为什么呢?因为子类继承父类的数据,可能还会使用父类的数据。所以子类初始化完成之前必须初始化父类。其实每个构造方法的第一条语句默认都是super()。Object类是顶层父类。

继承中构造方法的注意事项

父类没有无参构造方法,子类怎么办?可以用super()解决,也可以用this解决。

this解决方法:

class Father {
	private String name;			//姓名
	private int age;				//年龄

	public Father() {				//空参构造
		System.out.println("Father 空参构造");
	}

	public Father(String name,int age) {	//有参构造
		this.name = name;
		this.age = age;
		System.out.println("Father 有参构造");
	}

	public void setName(String name) {	//设置姓名
		this.name = name;
	}

	public String getName() {			//获取姓名
		return name;
	}

	public void setAge(int age) {		//设置年龄
		this.age = age;
	}

	public int getAge() {				//获取年龄
		return age;
	}
}

class Son extends Father {
	public Son() {						//空参构造
		this("王五",25);				//本类中的构造方法
		//super("李四",24);				//调用父类中的构造方法
		
		System.out.println("Son 空参构造");
	}

	public Son(String name,int age) {	//有参构造
		super(name,age);
		System.out.println("Son 有参构造");
	}
}

面试题:

看程序写结果1
class Fu{
	public int num = 10;
	public Fu(){
		System.out.println("fu");
	}
}
class Zi extends Fu{
	public int num = 20;
	public Zi(){
		System.out.println("zi");
	}
	public void show(){
		int num = 30;
		System.out.println(num);
		System.out.println(this.num);
		System.out.println(super.num);
	}
}
class Test1_Extends {
	public static void main(String[] args) {
		Zi z = new Zi();
		z.show();
	}
}

输出:Fu Zi 30 20 10

看程序写结果2
class Fu {
	static {
		System.out.println("静态代码块Fu");
	}

	{
		System.out.println("构造代码块Fu");
	}

	public Fu() {
		System.out.println("构造方法Fu");
	}
}

class Zi extends Fu {
	static {
		System.out.println("静态代码块Zi");
	}

	{
		System.out.println("构造代码块Zi");
	}

	public Zi() {
		System.out.println("构造方法Zi");
	}
}

Zi z = new Zi(); 请执行结果。

输出结果:
静态代码块Fu
静态代码块Zi
构造代码块Fu
构造方法Fu
构造代码块Zi
构造方法Zi

方法重写概述及其应用

什么是方法重写,重写指父子类出现一模一样的方法(返回值类型可以是子父类)。
那么什么时候应该进行方法重写呢?当子类需要父类的功能时,而功能主体类有自己的特有内容时,可以重写父类中的方法。这样,即沿袭了父类中的方法,又定义了子类特有的内容。

方法重写注意事项

  • 父类中私有方法不能被重写。因为父类私有方法根本就不能被继承。
  • 子类重写父类的时候访问权限不能更低,最好一致。
  • 父类的静态方法,子类也必须通过静态方法重写。其实这个不算重写。静态只能覆盖静态。
  • 子类重写父类的时候,最好声明一模一样。
    面试题:
    Override和Overload的区别?Overload能改变返回值类型吗?Overload能改变返回值。Overload只看参数列表。
    方法重写:子类中出现了和父类中方法声明一模一样的方法。与返回值类型有关,返回值是一致(或者是子父类)的
    方法重载: 本类中出现的方法名一样,参数列表不同的方法。与返回值类型无关。

子类对象调用发放的流程。先找子类有的,没有就找父类的。就近原则。

final关键字修饰类以及变量的特点

  • 修饰类 类不能被继承
  • 修饰变量 变量的值不能变,只能被修饰一次
  • 修饰方法 方法不能被重写

final关键字修饰局部变量

final修饰基本类型是值不能改变。final修饰引用类型是地址值不能被改变,而里面的value可以被改变。

final修饰变量初始化的时机

可以直接赋值,也可以放在构造方法中初始化。两个只能取其中一个。且放在构造方法中赋值,系统不会给其默认值。

猜你喜欢

转载自blog.csdn.net/qq_37129433/article/details/87908014