11 this,static,final,abstract,interface,implements关键字
this关键字的作用:
1.表示类中的属性
2.可以使用this调用本类的构造方法
注:如果一个类中有多个构造方法,可以利用this关键字相互调用
限制:this调用构造方法的语句只能放在构造方法的首行
限制:在使用this调用其它构造方法时,至少有一个构造方法是不用this调用的
3.this表示当前对象
使用final声明的类不能有子类
使用final声明的方法不能被子类所覆写
使用final声明的变量即成为常量,常量不可以修改(常量必须全部大写)
使用static final关键字联合声明的变量称为全局常量
抽象类:包含一个抽象方法的类就称为抽象类(方法和类都要使用abstract声明)
抽象方法:只声明而未实现的方法称为抽象方法,抽象方法必须使用abstract关键字声明
抽象类不能直接实例化,必须被子类继承,子类(如果不是抽象类)必须覆写抽象类中的全部抽象方法
抽象类中允许有构造方法,而且完全符合子类对象的实例化过程
接口:可以理解为一种特殊的类,里面全部是由全局常量和公共的抽象方法组成
简化-->
实现接口格式:
继承抽象类实现接口格式:
static声明的属性或方法被所有对象共享,可以由类名称直接调用
修改一个对象中的static声明的属性,则其他同类对象的该属性内容全部改变
每一个对象都拥有各自的堆栈空间,堆内存空间中保存每个对象的各自的属性,但是所有的static属性是保存在了全局数据区之中,所有的对象指向全局数据区中的一个内容,所以当一个对象修改之后,所有对象的内容将全部改变。
一般在调用static属性的时候最好是使用类名称直接调用,采用“类名称.属性”的形式调用。
static属性或方法可以在对象没有实例化的时候就直接进行调用了。
使用static方法,不能调用非static的属性或方法(因为static可以在对象没有实例化时就直接调用,而其他的属性或方法必须在对象实例化后才可以调用):
1 class Person{ // 定义Person类 2 private String name ; // 定义name属性,暂时不封装 3 private int age ; // 定义age属性,暂时不封装 4 private static String country = "A城" ; // 定义城市属性,有默认值,static 5 public static void setCountry(String c){ // 此方法可以直接由类名称调用 6 country = c ; 7 } 8 public static String getCountry(){ 9 return country ; 10 } 11 public Person(String name,int age){ 12 this.name = name ; 13 this.age = age; 14 } 15 public void info(){ // 得到信息 16 System.out.println("姓名:" + this.name + ",年龄:" + this.age + ",城市:" + country) ; 17 } 18 }; 19 public class StaticDemo04{ 20 public static void main(String args[]){ 21 Person p1 = new Person("张三",30) ; // 实例化对象 22 Person p2 = new Person("李四",31) ; // 实例化对象 23 Person p3 = new Person("王五",32) ; // 实例化对象 24 System.out.println("--------------- 修改之前 -------------") ; 25 p1.info() ; 26 p2.info() ; 27 p3.info() ; 28 Person.setCountry("B城") ; // 调用静态方法修改static属性的内容 29 System.out.println("--------------- 修改之后 -------------") ; 30 p1.info() ; 31 p2.info() ; 32 p3.info() ; 33 } 34 };
static的相关应用:
- 可以使用static属性统计一个类到底产生了多少个实例化对象:
View Code1 class Demo{ // 定义Person类 2 private static int count = 0 ; // 所有对象共享此属性 3 public Demo(){ 4 count++ ; // 只要有对象产生就应该自增 5 System.out.println("产生了" + count + "个对象!") ; 6 } 7 }; 8 public class StaticDemo06{ 9 public static void main(String args[]){ 10 new Demo() ; // 增加新对象 11 new Demo() ; // 增加新对象 12 new Demo() ; // 增加新对象 13 } 14 };
- 可以使用static为对象进行自动的编名操作:
View Code1 class Demo{ // 定义Person类 2 private String name ; // 保存名字 3 private static int count = 0 ; // 所有对象共享此属性 4 public Demo(){ 5 count++ ; // 有对象产生就自增 6 this.name = "DEMO-" + count ; // 自动进行编名操作 7 } 8 public Demo(String name){ 9 this.name = name; // 可以通过构造赋值 10 } 11 public String getName(){ // 取得姓名 12 return this.name ; 13 } 14 }; 15 public class StaticDemo07{ 16 public static void main(String args[]){ 17 System.out.println(new Demo().getName()) ; 18 System.out.println(new Demo("LXH").getName()) ; 19 System.out.println(new Demo().getName()) ; 20 System.out.println(new Demo("MLDN").getName()) ; 21 System.out.println(new Demo().getName()) ; 22 } 23 };
-
Java的内存分区
- 栈内存:可以保存对象的名称(保存访问的堆内存的地址)
- 堆内存:保存每个对象的具体属性
- 全局数据区:保存static类型的属性
- 全局代码区:保存所有方法的定义
-

浙公网安备 33010602011771号