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 };
View Code

static的相关应用:

  1. 可以使用static属性统计一个类到底产生了多少个实例化对象:
     1 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 };
    View Code

     

  2. 可以使用static为对象进行自动的编名操作:
     1 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 };
    View Code

     

  3. Java的内存分区

    1. 栈内存:可以保存对象的名称(保存访问的堆内存的地址)
    2. 堆内存:保存每个对象的具体属性
    3. 全局数据区:保存static类型的属性
    4. 全局代码区:保存所有方法的定义

       

      1.  

posted @ 2015-02-26 10:25  闲来垂钓  阅读(110)  评论(0)    收藏  举报