zoukankan      html  css  js  c++  java
  • 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);
        }
    }
  • 相关阅读:
    053335
    053334
    053333
    053332
    053331
    053330
    053329
    053328
    053327
    053326
  • 原文地址:https://www.cnblogs.com/EvanLiu/p/3118420.html
Copyright © 2011-2022 走看看