黑马程序员--Java基础学习笔记【构造器、静态】

 

 ------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------    

 

  • 构造方法,构造器(constructor)

用于给对象的数据进行初始化,每个类都有构造方法。构造方法可以重载。

默认构造方法:如果没有定义,系统会给出默认的无参的空构造方法

构造方法的格式:

    方法名与类名相同;没有返回值类型;没有具体的返回值,不需要写return

构造方法的运行和作用:

    创建对象时,仅执行一次;创建对象时,对成员变量初始化赋值

this 关键字的使用

    一个构造方法可以通过this关键字调用另外一个重载的构造方法

    this语句: 格式 this(参数列表); // 调用其他构造方法

    注意:this 语句只能写在构造方法里面,且必须是第一行

类的初始化过程

    加载 Student.class 文件进内存(方法区)

    在栈内存为引用变量 stu 开辟空间

    在堆内存为学生对象开辟空间

    对学生对象的成员变量进行默认初始化

    对学生对象的成员变量进行显示初始化

    通过构造方法对学生对象的成员变量赋值

    学生对象初始化完毕,把对象地址赋值给 stu 变量

  • static 关键字   成员修饰符,修饰成员,不能修饰局部

静态成员可以被类名直接调用 类名.静态成员,非静态成员只能被对象调用

  • 修饰成员变量 静态成员变量

用 static 修饰的成员变量不属于对象的数据结构

static 变量是属于类的变量,可以通过类名来引用 static 成员

static 成员变量和类的信息一起存储在方法区,而不是在堆中,

一个类的 static 成员变量只有“一份”,无论该类创建了多少对象

  • 修饰方法

    static 修饰的方法不需要针对某些对象进行操作,其运行结果仅仅与输入的参数有关,调用时直接用类名引用。

    double c = Math.sqrt(3.0 * 3.0 +4.0 * 4.0);

    // 该方法在调用时,没有隐式的传递对象引用,因此在 static 方法中不可以使用 this 关键字

    由于 static 在调用时没有具体的对象,因此在 static 方法中不能对非 static 成员(对象成员)进行访问。static 方法的作用在于提供一些“工具方法”和“工厂方法”等。

  • 修饰代码块

static 块:属于类的代码块,在类加载期间执行的代码块,只执行一次,可以用来在软件中加载静态资源。

  • 静态成员变量和非静态成员变量的区别:

        内存位置:

            静态成员变量,存储到方法区的静态区

            非静态成员变量,存储到堆内存

        生命周期:

            静态成员变量,随着类的加载而加载,随着类的死亡而死亡,生命最长

            非静态成员变量,随着对象的加载而加载,随着对象的死亡而死亡,生命相对较长

        调用方式:

            静态成员变量,不属于对象,属于自己的类,类变量通过类名直接调用

            非静态成员变量,属于对象,只能对象调用

        *作用上:

            静态成员变量,是所有对象的共享数据

            非静态成员变量,是对象的特有数据

 

class Person{

 

    Stringname= "呵呵";

    static String country = "China";

 

    publicvoid show() {

       System.out.println(name + country);

    }

 

    publicstaticvoid function() {

       // 错误:无法从静态上下文中引用非静态变量à生命周期不一样

/*

        * 静态方法中,使用了非静态变量,静态不能直接调用非静态

        * 因为静态成员优先于非静态成员进入内存

        */

       // System.out.println(name + country + "in static function");

    }

   

    publicstaticvoid method(){

       //  this 表示本类对象,静态方法中,不能写 this, super

//  System.out.println(super);

        //System.out.println(this);

//  super.hashCode();

    }

}

 

publicclassPersonDemo {

    publicstaticvoid main(String[] args) {

       Person.function();

    }

}

 

类的成员变量、局部变量、实例成员变量、类成员变量

    类的成员变量:定义在类中的变量

    局部变量:定义在方法或语句中的变量

    实例成员变量:非静态成员变量,对象调用

    类成员变量:静态成员变量,类名调用

 

代码块:局部代码块,构造代码块,静态代码块,同步代码块(多线程)

    局部代码块:在方法中出现,限制变量生命周期

    构造代码块:定义在类中方法外,多个构造方法中相同的代码存放到一起,每次调用构造都执行,并且在构造方法前执行。

    静态代码块:定义在类中方法外,static 修饰符。用于给类进行初始化,在加载的时候只执行一次。

静态代码块,构造代码块,构造方法的执行顺序:

静态代码块,构造代码块,构造方法

 

class Person

{

    Person(){

     System.out.println("构造方法");

    }

 

    {

     System.out.println("构造代码块");

    }

 

    static{

     System.out.println("静态代码块");

    }

    public static void a(){}

   

}

class Code

{

    public static void main(String[]args)

    {

        Person.a(); // 静态代码块执行

        new Person(); // 构造代码块和构造方法执行

    }

}


你可能感兴趣的:(静态,构造器)