JAVA基础知识复习(下半部分)

JAVA基础知识复习

三大修饰符

static

什么是静态?

引言

在对象创建后,实例属性,是各个对象持有的独立的空间(多份),对象单方面修改不会影响其他对象。
静态属性,是整个类持有的共享空间(一份),任何修改都会影响到其他对象。

概念

static 可以修饰方法和属性。
修饰方法则称为静态方法
修饰变量则称为静态属性
在全类中只有一份,不会因为创建多个对象而产生多份,不必创建对象,可直接通过类名访问。
在类加载时创建,不会重复创建。

静态属性

	public class TestStatic{
		static int b=1;
		public static void main(String[] args){
			System.out.println(b)
		}
	}
访问:类名.静态变量名。
	 例如TestStatic.b;

静态方法

		public class TestStatic{
		static int b=1;
		//main函数就是一个静态方法
		public static void main(String[] args){
			System.out.println(b)
		}
		
		//函数就是一个静态方法
		public static void method(String[] args){
			System.out.println(b)
		}
		
	}
访问:类名.静态方法名称。
	 例如TestStatic.method;

注意事项

静态方法允许直接访问静态变量 
静态方法不能直接访问非静态成员
静态方法中不允许出现this或者super关键字
静态方法可以继承没有多态。

动态代码块

		public class TestStatic{
		//直接标记的代码块,可以直接执行
		{
		
		}
		static int b=1;
		//main函数就是一个静态方法
		public static void main(String[] args){
			System.out.println(b)
		}
		
	}
位置:类内方法外,{}标记使用。
创建对象时,触发动态代码块的执行
执行地位:初始化属性之后,构造方法之前,

作用

可以为实例变量赋值,或者必要的初始化行为。

类加载

当JVM首次使用某个类时,需要通过calsspath查找该类的class文件
将class文件中对类的描述信息加载到内存中进行保存
比如:类名 父类属性 方法 构造方法...

加载时机

创建对象
创建子类对象
访问静态对象
调用静态方法。

静态代码块

		public class TestStatic{
		//直接标记的静态代码块,可以直接执行
		static {
		
		}
		static int b=1;
		//main函数就是一个静态方法
		public static void main(String[] args){
			System.out.println(b)
		}
		
	}
位置:类内,方法外,static{}标记触发,
类加载时,触发静态代码块的执行(仅一此)。

执行地位

静态属性初始化之后

作用

可为静态属性赋值或者必要的初始化行为。

理解静态与实例的关系

静态在类加载时完成创建,而实例则是在类加载完毕后,对象创建后。
在执行顺序上
父类静态属性(有就加载)
父类静态代码块(有就加载)
子类静态属性
子类静态代码块
---------------------(以下是实例时触发的)
父类实例属性(有就加载)
父类动态代码块(有就加载)
父类构造方法(有就加载)
子类实例属性
子类动态代码块
子类构造方法

abstract

什么是抽象?

具有某种对象的特征,但不完整
程序中用来模拟现实世界,解决现实问题的
现实世界中存在的都是“动物”,不应当创建出对象,只应该创建子类对象。

语法

	public abstract class TestAbstract{
	}
	class Test  extends TestAbstract{
	}
应用:abstract 修饰符,说明此类不可以被创建,无法使用new 关键字
被abstract修饰的类,被称为抽象类,表示这个类不是一个具体的类。
抽象类无法独立存在,因为不能new对象,必须要有具体子类,

抽象类的作用

可以被子类集成,提供共性属性和方法
可以声明为引用,强制使用多态
例如:TestAbstract ta=new Test();

抽象方法

abstract 修饰方法 
只有声明,没有方法的实现,意味着这是个不完整的方法,她只能在抽象类中,非抽象子类必须实现。

语法

	public abstract class TestAbstract{
		//这是个抽象方法
		public abstract eat();
	}
	class Test  extends TestAbstract{
		//子类必须实现抽象方法
		public void eat(){
			
		};
	}

注意

抽象类中不一定有抽象方法,但是抽象方法肯定在抽象类中.
抽象类继承另一个抽象类,不需要重写父类的抽象方法.

总结
abstract 修饰符可以修饰方法可以修饰类.
修饰类:此类变为抽象类,无法创建对象,但是可以作为声明.
修饰方法:只有方法声明,但是没有方法实现,

final

什么是最终?

最后的,不可更改的

使用范围

类 方法 变量
修饰类时称为最终类.
fianl 类
		此类无法被继承,例如System。
修饰方法时称为最终方法.
	修饰方法:此方法不能被覆盖,意味最终发那个发,不支持子类以覆盖的形式修改
修饰变量时称为最终变量.
	此变量的值无法被修改,称为常量。
	//此类无法被继承
	public final  class TestFinal{
	
		//常量没有默认值;
		final String name="name";
		
		//静态常量没有默认值,静态常量必须全部大写,如果存在字母拼接,则通过下划线分开(业内规范)
		static final String CLASS_PATH="classpath";
		//此方法可以被继承,但是无法重写
		public final void method(){
			final int a=1;
		}
	}
常量的赋值时机
	显示初始化
	动态代码块
	构造方法
静态常量的赋值时机
	显示初始化
	静态代码块

注意

final修饰基本类型常量时,值不可变,修饰引用类型常量时,地址不可变。

什么修饰符可以连用?

访问权限修饰符(private protected default public)可以与static final 连用。
访问权限修饰符(protected default public)可以与abstract 连用。
static 与final 可以连用,最好加上public 构成公开静态常量。

接口

接口的概念

宏观:是一种标准,接口的实现者和使用者都必须遵守的约定
从语法角度来说,接口相当于一个特殊的抽象类

语法
关键字interface

没有构造方法,不能单独创建对象,但是可以声明引用;
所有属性都是公开的静态常量,被默认为public static final修饰;
所有方法都是公开的抽象方法,被默认 public abstract 修饰;
public interface TestInterface(){
	//所有方法都是公开的抽象方法
	add();
	
	//所有的变量都是公开静态常量
 	int a;
}

抽象类与接口的异同

相同点
	可编译
	不可以创建对象
	都可以声明,但不能创建对象
不同
	接口只能有公开静态常量以及公开抽象方法。没有构造方法

如何实现接口?
关键字implements

public interface TestInterface(){
	//所有方法都是公开的抽象方法
	void add();
	
	//所有的变量都是公开静态常量
 	int a;
}

public class TestImpl implements TestInterface{
	public void add(){
		
	}
}

注意

一个类实现了接口,如果不想称为抽象类,必须实现接口中的所有的抽象方法.
实现类实现接口中的方法时,方法的访问修饰符必须是public   

内部类

概念:在一个类的内部再定义一个完整的类(了解)
例如
public class TestInClass {
    class InClass{
        
    }
}
编译时,出现两个class 字节码文件
特点
编译之后生成独立的字节码文件.
内部类可以直接访问外部类的私有成员,而不破坏封装
可为外部类提供必要的内部功能组件.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值