Java笔记:static、this关键字

1.类是java里面的重要内容,可以把类当成一种自定义数据类型,使用类来定义变量,这种类型的变量统称为引用变量。所以类是引用数据类型。

2.面向对象中两个重要概念:类和对象。类是抽象的,对象是具体存在的。

3.构造器是一个类创建对象的根本途径,如果一个类没有构造器,那么这个类通常无法创建实例创建对象的根本途径是构造器,通过new关键字来调用某个类的构造器即可创建这个类的实例。

4.static关键字

1)static可以用于修饰方法,Field等。static修饰的成员表明它属于这个类本身,而不属于该类的单个实例,通常把static修饰的Field和方法也称为类Field、类方法。
不使用static修饰的普通方法、Field则属于该类的单个实例,不属于该类。通常把不使用static修饰的Field和方法也称为实例Field、实例方法。
static修饰的成员不能访问没有static修饰的成员。(静态成员不能直接访问非静态成员)

2)static类型的变量是所有对象共享的内存空间,也就是说无论最终有多少个对象,也都只有一个static类型的属性。

3)static修饰的方法和Field,既可以通过类来调用,也可以通过实例来调用,没有使用static修饰的普通方法和Field,只可以通过实例来调用。
eg:static修饰的方法或Field的调用:Person.talk();或p.talk();
非static修饰的方法或Field的调用:p.talk();

4)如果在类中声明了一个static类型的属性,则此属性既可以在非static类型的方法中使用,也可以在static类型的方法中使用。但若要用static类型的方法调用非static类型的属性,就会出现错误。

5)static的真正作用是用于就是用于区分Field、方法、内部类、初始化块这四种成员到底属于类本身还是属于实例。
在类中定义的成员,有static修饰的成员属于类本身,没有static修饰的成员属于该类的实例。

5.Person p = new Person();
栈内存里的引用变量并未真正存储对象的Field数据,对象的Field数据实际存放在堆内存里;而引用变量只是指向该堆内存里的对象。

6.this关键字

1)Java提供了一个this关键字,this关键字总是指向调用该方法的对象。
根据this出现位置的不同,有两种情形:
(1)在构造器中引用该构造器正在初始化的对象;
(2)在方法中引用调用该方法的对象。

2)this关键字最大的作用就是让类中一个方法,访问该类里的另一方法或Field。

3)this可以代表任何对象,当this出现在某个方法体中时,它所代表的对象是不确定的,但是它的类型是确定的,它所代表的对象只能是当前类;只有当这个方法被调用时,它所代表的对象才被确定下来:谁调用这个方法,this就代表谁。

4)static修饰的方法可以直接使用类来调用方法。如果在static修饰的方法中使用this关键字,则这个关键字就无法指向合适的对象。所以,static修饰的方法中不能使用this引用。

eg:

package cn.it.lsl;

class Dog{
    public void jump(){
        System.out.println("jump方法.....");
    }
    public void run(){
        //this.jump();    ////java允许对象的一个成员直接调用另一个成员,可以省略this前缀。
        jump();
        System.out.println("run方法....");
    }
    public static void say(){
        System.out.println("say方法....");
    }
}

public class DogTest {
    //如果在类中声明了一个static类型的属性,则此属性既可以在非static类型的方法中使用,也可以在static类型的方法中使用。
    private static String name = "zhangsan";
    //但若要用static类型的方法调用非static类型的属性,就会出现错误。  
    //private String name = "zhangsan";
    public void info(){
        System.out.println(name);
        System.out.println("info方法....");
    }
    public static void main(String args[]){
        Dog dog = new Dog();
        dog.run();
        //static修饰的方法可以直接使用类调用。
        Dog.say();
        //info();    //静态成员不能直接访问非静态成员。
        //info()是对象相关的方法,而不是类相关的方法,因此必须使用对象来调用该方法。
        new DogTest().info();    //如果确实需要在静态方法中访问一个普通方法,则只能重现创建一个对象。
        System.out.println(name);
    }
}

 

 

posted @ 2013-06-05 10:18  Evan Liu  阅读(1525)  评论(0编辑  收藏  举报