Core Java第八章知识点总结——三个修饰符

Core Java第八章知识点总结——三个修饰符

知识点预览


static修饰符

final修饰符

abstract修饰符

 

static修饰符

 

1.static修饰符可以修饰什么

属性

方法

静态代码块

2. static修饰属性

a) static可以修饰属性(静态属性),不可以修饰局部变量

TestStatic1

b) static修饰属性的特点

                       i. static修饰的属性全类公有 TestStatic


 



package chp8.ex01;

/**
 * 
 * 说明:本程序演示了static修饰属性的用法 全类共有
 */
class MyValue{
	int a;
	static int b;//静态属性
}
public class TestStatic{
	public static void main(String args[]){
		MyValue mv1 = new MyValue();
		MyValue mv2 = new MyValue();
		mv1.a = 100;
		mv1.b = 200;
		mv2.a = 300;
		mv2.b = 400;
		System.out.println(mv1.a);
		System.out.println(mv1.b);//400
		System.out.println(mv2.a);
		System.out.println(mv2.b);//400 MyValue.b 亦可
}                                                              
}



                     ii.  static修饰的属性可以通过类名访问 MyValue.b

                 iii. static修饰的属性也叫做类变量

                 iv. static修饰的属性什么时候被初始化

类加载的时候初始化static修饰的变量

使用类之前,一个类只加载一次

.class------->内存------->JVM内存------->对象

私有访问修饰符 private

2个方法 获得 设置

3.  static修饰方法

a)static修饰的方法称为静态方法 public static 和static public均可

b)  静态方法可以通过类名调用 TestStaticMethod.test();

c) 非静态方无论属性和方法是否是静态的都可以访问

d)静态方法只能访问静态属性和静态方法 TestStaticMethod3


package chp8.ex04;

/**
 * 
 * 说明:本程序演示了static修饰方法的用法
 */
public class TestStaticMethod3 {
    static int a= 10;
    int b = 20;
    public void test1(){}
    public static void test2(){}
    //静态方法只能访问静态属性和静态方法
    public static void test3(){
    	System.out.println(a);
    	//System.out.println(b); //错误
    	//test1(); //错误
    	test2();
    }
}



e) 静态方法中不能使用this关键字

f)非静态方法只能覆盖非静态方法

g)静态方法只能覆盖静态方法,但是没有多态 TestStaticOverride

 

package chp8.ex05;

/**
 * 
 * 说明:本程序演示了静态方法的覆盖用法
 */
public class TestStaticOverride {
   public static void main(String args[]){
	   Super s = new Sub();
	   //输出this is super
	   s.m();//等效于 Super.m()
   }
}
class Super{
  public static void m(){
	 System.out.println("this is super");
  }
}
class Sub extends Super{
	//静态方法只能覆盖静态方法,但是没有多态
  public static void m(){
	 System.out.println("this is sub");
  }	
}


 

4. 静态代码块

a)  静态代码块的概念

在类加载时执行静态代码块的内容

static{} 一般是对资源操作的内容


final修饰符


1.  final修饰符可以修饰什么

a)  变量

b) 方法

c) 类

 

2.  final修饰变量

a)  final修饰变量(属性、局部变量)

一旦赋值其值不可改变

b)final修饰局部变量----->常量(以大写形式声明)

TestFinalLocalVar1

 

 

package chp8.ex07;
/**
 * 
 * 说明:本程序演示了final修饰属性的用法
 */
public class TestFinalLocalVar1 {
   public static void main(String args[]){
	   final int A = 10;//一旦赋值 其值不可改变
	   //A++ //错误 
   }
}


TestFinalLocalVar2


package chp8.ex08;
/**
 * 
 * 说明:本程序演示了final修饰类变量的用法
 */
public class TestFinalLocalVar2 {
  public static void main(String args[]){
	 final MyClass M1 = new MyClass();//final MyClass 引用存储的地址不可变 但是类的属性值可以改变
	  M1.value = 20;
	  M1.value = 30;
	 //The final local variable M1 cannot be assigned. It must be blank and not using a compound assignment
	 //M1 = new MyClass();//错误
  }
}
class MyClass{
   int value;
}



final MyClass 引用存储的地址不可变

3. final修饰属性

a)  final修饰属性时,必须对属性显示赋值或者提供构造方法对属性赋值

构造得到重载必须对属性赋值

不能同时采用显示赋值或者提供构造方法对属性赋值

b) final static一起修饰属性(如果是final修饰变量,推荐一起使用)

单独的final------->浪费资源,没有意义

static final intI = 10;//减少内存占用

4.  final修饰方法和类(不能被改变)

a) final修饰符修饰的方法不能被子类覆盖

b) final修饰符修饰的类不能被继承

 

abstract修饰符

 

1.  abstract修饰符可以修饰什么

方法

2.  abstract修饰符修饰类

a)   abstract修饰符修饰的类叫做抽象类

abstract class

b)  抽象类的特点

                       i. 抽象类可以用于声明,但不允许创建对象

MyClass m1;//正确

              m1 = new MyClass;//错误

                     ii.抽象类可以被子类继承,从而创建子类对象

3.抽象方法

a) abstract修饰的方法叫做抽象方法

只有声明没有实现

b) 抽象方法的特点

                       i. 拥有抽象方法的类必须是抽象类

                     ii. 抽象类不一定有抽象方法

                   iii. 抽象方法由子类实现

4. 抽象的作用

 

 

 

抽象类是更高层次的抽象

子类共性的方法抽取成抽象方法,形成一种概念性质的类,抽象方法由其子类实现

 

 

package chp8.ex15;
/**
 * 
 * 说明:本程序演示了抽象类的具体抽象
 * 抽象类是更高层次的抽象
 * 子类共性的方法抽取成抽象方法,形成一种概念性质的类,抽象方法由其子类实现
 */
public class TestAbstract {
  public static void main(String args[]){
	    Shape s = new Circle(3);
	    double grith = s.girth();
	    System.out.println("grith is "+grith);
  }
}
//抽象类
abstract class Shape{
	public abstract double girth();
	public abstract double area();
}
//子类 实现其抽象方法
class Circle extends Shape{
	private double r;
    private static final double PI = 3.1415926;
	public Circle(double r){
		this.r = r;
	}
	public double girth(){
		return 2*PI*r;
	}
	public double area(){
		return PI*r*r;
    }
}
//子类 实现其抽象方法
class Rect extends Shape{
	private double a;
	private double b;
	public Rect(double a, double b){
		this.a = a;
		this.b = b;
    }
    public double girth(){
		return 2*(a+b);
	}
	public double area(){
		return a*b;
	}
}


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值