JavaSE(八)--abstract、static、final

1.abstract

扩展修饰符,抽象的.

1.1:抽象类

用abstract修饰的类叫抽象类.

1.1.1:抽象类特点:

  • 抽象类不能实例化(不能创建对象),但是抽象类有构造方法,
  • 作用:供子类调用.
  • 抽象类中可以有0到多个抽象方法,也可以有0到多个普通方法.

1.1.2:抽象类适用场景:

  • 当一个类创建对象时没有意义,就可以将这个类定为抽象类;
  • 当一个类中有一个方法为抽象方法时,这个类必须定为抽象类.

1.1.3:抽象类的作用

让子类继承,从而实现代码复用;
规定子类必须拥有的行为.

1.2:抽象方法

用abstract修饰的方法叫抽象方法.

1.2.1:抽象方法的特点:

  • 抽象方法没有方法体(连大括号都没有).
  • 抽象方法必须被子类重写,除非子类也是抽象的,就让后代类去重写.
  • 抽象方法必须写在抽象类中.

1.2.2:抽象方法适用场景

当一个方法无法确定具体实现(具体功能怎么执行),这个方法就可以定为抽象方法.

1.2.3:抽象方法的作用

规定了子类必须拥有的行为.

//eg:/**
 * 宠物类,抽象类
 */
public abstract class Pet{
	/**
	 * 昵称的属性
	 */
	public String nickName;
	/**
	 * 品种的属性
	 */
	public String brand;
	
	public Pet() {
		System.out.println("这是pet类无参构造");
	}

	/**
	 * 吃的方法,抽象方法
	 */
	public abstract void eat();
	
	/**
	 * 实例方法
	 */
	public void show() {
		System.out.println("这是一个实例方法");
	}
}
/**
 * 猫类,继承宠物类
 */
public class Cat extends Pet{
	
	public Cat() {
		System.out.println("这是猫类无参构造");
	}
	
	/**
	 * 重写父类吃的方法
	 */
	@Override
	public void eat() {
		System.out.println("猫在吃鱼");
	}
}

2.static

扩展修饰符,静态的.可以用static修饰成员变量和方法.用static修改的变量比较耗内存

2.1:静态变量

用static修饰的成员变量叫静态变量.

  • 静态变量属于类,类的所有对象共享.
  • 静态变量的生命周期随着类的加载而产生,随着类的销毁而结束.
  • 静态变量的缺点耗内存
  • 静态变量调用语法:类名.静态变量名;(推荐)
    对象名.静态变量名;
  • 静态变量的使用场景:当一个类的所有对象共享一个属性时,这个属性就可以定为 静态变量.

2.2:静态方法

用static修饰的方法叫静态方法.

  • 1.1在静态方法中只能直接调用静态属性和静态方法,不可以直接调用非静态属性和非静态方法.如果一定要在静态的方法中调用非静态属性和方法,可以用对象调用

  • 1.2在实例方法中既可以直接调用成员变量和成员方法,也可以直接调用静态变量和静 态方法.

  • 2:静态方法可以被继承,不能被重写,没有多态.

  • 3:静态方法调用语法:类名.静态方法(实参列表);(推荐)
    对象名.静态方法(实参列表);

  • 4:静态方法的适用场景:当一个类为工具类时,这个类中方法就声明静态方法,方便调用.

2.3:静态块

静态是在类加载时加载,一生只执行一次.

  • 语法
   static{
   	代码块;
   }
  • 作用:在类加载时完成初始化操作.

  • 静态代码块中只能直接调用静态的属性或方法,不能直接调用非静态东西.

//eg:/**
 * 员工类
 */
public class Employee {
	/**
	 * 姓名属性,成员变量
	 */
	public String empname;
	
	/**
	 * 公司名称属性,静态变量
	 */
	public static String company;

	/**
	 * 静态块
	 */
	static {
		//empname="张三";
		company="xxx公司";
		//show1();
		show3();
	}
	
	/**
	 * 普通(实例)方法
	 */
	public void show1() {
		System.out.println("这是一个实例方法show1");
		//在实例方法中可以直接调用成员变量,也可直接调用静态变量
		System.out.println("姓名:"+this.empname+",公司名称为:"+company);
		//在实例方法中可以直接调用实例方法,也可直接调用静态方法
		show2();
		show3();
	}
	
	/**
	 * 普通(实例)方法
	 */
	public void show2() {
		System.out.println("这是一个实例方法show2");
	}
	
	/**
	 * 静态方法
	 */
	public static void show3() {
		System.out.println("这是一个静态方法show3");
		//在静态方法中只能直接调用静态属性和静态方法,不可以直接调用非静态属性和非静态方法.
		System.out.println("公司名称为:"+company);
		//show2();
		show4();
		
		//如果一定要在静态的方法中调用非静态属性和方法,可以用对象调用
		//创建对象
		Employee e1=new Employee();
		System.out.println("姓名:"+e1.empname);
		e1.show2();
	}
	
	/**
	 * 静态方法
	 */
	public static void show4() {
		System.out.println("这是一个静态方法show4");
	}
}
	
		  public static void main(String[] args) {
		//创建对象
		Employee e1=new Employee();
		e1.empname="张三";
		//用对象调用静态变量
		//e1.company="xx公司";
		//用类名调用静态变量
		Employee.company="xx公司";
		
		Employee e2=new Employee();
		e2.empname="田七";
		
//		System.out.println("员工姓名:"+e1.empname+",公司:"+e1.company);
//		System.out.println("员工姓名:"+e2.empname+",公司:"+e2.company);
		//用对象调用静态方法
		e2.show4();
		//用类名调用静态方法
		Employee.show4();
	}

2.4:(了解)动态块

创建对象时执行.动态块在构造方法执行之前执行.

  • 语法
	{
		代码块;
	}
  • 作用:完成对象的初始化操作.
  • 类的加载顺序:先加载静态变量,静态块,成员变量,动态块,构造方法.

2.5:(了解)静态导入

当一个类中方法为静态方法,且调用比较频繁,不想每次写类名调用方法,这时就可以用静态导入.

  • 语法
import static 包名.类名.*;
//eg:/**
 * 静态导入,让Arrays类中所有静态的属性和方法,在当前类直接用,不用类名调用.
 * 如果用类名调用静态属性和方法,那就不能静态导入包用的是普通导入包.
 */
import static java.util.Arrays.*;

/**
 * 静态导入

 */
public class Test2 {

	public static void main(String[] args) {
		//准备一个数组
		int[] nums= {5,8,1,7,6,3};
		
		System.out.println("原数组为:");
		for (int i : nums) {
			System.out.print(i+"\t");
		}
		
		//对数组进行升序排序,因为有静态导入,所以静态方法直接写方法名用
		sort(nums);
		
		System.out.println("\n排序后数组为:");
		for (int i : nums) {
			System.out.print(i+"\t");
		}
		
		//对数组进行二分查询,因为有静态导入,所以静态方法直接写方法名用
	    binarySearch(nums, 8);
		
	}

}

3.final

扩展修饰符,最终的.可以用来修饰类,变量,方法.

3.1:最终类

用final修饰的类叫最终类,最终类不能被继承.

3.2:最终方法

用final修饰的方法叫最终方法,最终方法不能被重写,但是可以被继承.

3.3:常量

用final修饰的变量叫常量.常量一但赋值不可更改.

  • 成员常量:在类中方法外直接声明常量.
    成员常量可以声明的同时赋值,也可以在动态代码块中赋值,还可以在当前类的构造方法中赋值,但是要确保每个构造方法都给常量赋值了.
  • 局部常量:在方法中声明的常量叫局部常量.
    局部常量在声明的同时赋值或先声明,再赋值.
  • 静态常量:在类中方法外直接声明静态常量.
    静态常量可以声明的同时赋值或静态块中赋值.
//eg:
public class Pet {
	public String nickName;

	/**
	 * 成员常量
	 */
	public final int count;
	
	/**
	 * 静态成员常量 
	 */
	public static final int num1;
	
	static{
		num1=2;
	}
	
//	{
//		count=2;
//	}
	
	public Pet() {
		this.count=4;
	}
	
	public Pet(String nickName, int count) {
		super();
		this.nickName = nickName;
		this.count = 3;
	}
	
	public final void eat() {
		System.out.println("吃");
		final int num2=2;
		//num2=1;
	}
}

4.static,final,abstract小结

  • final不可以与abstract一起连用.
  • abstract不可以与static一起连用.

个人笔记,思路,仅供参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值