java面向对象第二天(构造方法 &&静态变量&&静态方法)

1.构造方法: constructor;构造函数.

定义:在创建对象的时候, 对象成员可以由构造函数的方法进行初始化.

1.构造方法的方法名必须和类名一致.

2.构造方法没有返回类型,也不能定义成void ,在方法名前面不用声明方法的类型.

3.构造方法作用是完成对象初始化工作,它能够把定义对象的参数传递给对象的域.

4.构造方法是由系统调用的,不能被编程人员来调用.

5.构造方法可以重载,以参数的类型,个数,排列顺序进行区分;

1.区分有参和无参构造方法

public Car(){
 
System.out.println("我是无参构造方法")
}

 public Car(int width,int height){
//类里面的属性(成员变量)一般直接写在构造方法里
this.width=width;
this.height = height;
//也可以通过计算直接给成员变量进行赋值
this.area = height*width;
this.perimeter = 2*(height+width)
System.out.println("我是有参构造方法")
}

2.静态变量

可以将静态变量理解成为类变量(与对象无关);而实例变量则是属于一个特定的对象

静态变量是基本数据类型,在类的外部不必创建该类的实例就可以直接使用;

静态变量:1,属于类的变量,在内存中存在于方法的静态区,2.声明周期:随着类的加载而加载和销毁和销毁,程序运行结束而销毁

            只加载了一次; 3可以使用对象名和类名进行调用;

话不多少


public class Demo03静态变量 {

    public static void main(String[] args) {
        AVGirl girl1 = new AVGirl(); // 代表girl1 使用 AV模板创建出来;
        girl1.name = "苍老"; // girl1 保存的是地址可以找到AVGirl()的位置,通过地址去堆里找小苍;
        // AVGirl.country = "日本";// 并且给country赋值日本;
        // girl1.sayHi();

        AVGirl girl2 = new AVGirl();
        girl2.name = "小兰";                //当country属性变成static以后,他就不存在于堆,而存在于类中,通过对象也可以找到;
        AVGirl.country = "本天";          //在这里就可以直接通过类名进行获取country 属性 ; 并且获取的country属性可以被
        girl2.sayHi();                         // girl1  和 girl2 ...... 以及后面的girl(n)同时使用;
        girl1.sayHi();
        // 这时可以打印国籍;单girl1 并没有写国籍; country 存在静态区;
    }

}

class AVGirl {
    String name;
    // 如果加上static 就会把该属性加载到静态区;       再类的这里country前面加上static
    static String country;


    public void sayHi() {
        System.out.println("我的名字是:" + name + "  " + "国家" + country);
    }

    // 思考构造方法能用private? 可以的(特殊用途;)
    AVGirl() {

    }
}

3.静态方法

1.静态方法是使用公共内存空间的,就是说所有的对象都是可以直接引用,不需要创建对象就可以使用该方法;

例如: 创建一个类

class Test{  //静态方法
public static int function1int x,int y){
        return x+y; 
  }
public int funtion2(int a,int b){
      return x +y; 
  }
}

   import Test;
public class mainClass{
      int sum;
         public static void main(String args[]){
        sum = Test.function1(1,2)
//直接可以通过类.方法进行调用;
       sout(sum);
      
  Test t = new Test();
       t.function2(1,2);
 //因为function2不是静态方法,所以只能用Test类创建一个t对象,然后才能调用该对象的方法;
   }
}

静态变量只能调用静态; 成员方法即可以使用成员变量,也可以使用静态变量和方法

静态方法:         随着类的加载而加载(和静态变量一样);

执行位置        在栈中执行,只要是方法就会在栈中执行;

静态方法中      不能使用成员变量(由于还没有被加载)

静态方法     出栈以后不会消失而是存在于方法区里面;

public class Demo04静态方法 {
    public static void main(String[] args) { //main函数是一个静态方法;
        
    }

}

class Test {
    int num1 = 10; //成员变量              
    static int num2 = 20;//静态变量

    /*
     * 成员方法中 既可以使用成员变量 也可以使用静态变量
     */
    public void fun1() {     //这就是一个成员方法:可以使用num1,也可以使用num2;
        System.out.println(num1);
        System.out.println(Test.num2); // 可以用Test(静态变量) ;可以用this
        Test.fun2();
    }

    /*
     * 静态方法 什么时候加载:随着类的加载的加载而加载(跟静态变量是一样的); 执行位置 在栈中执行 (只要是方法都在栈中执行执行完以后出栈);
     * 静态方法中不能使用成员变量(静态方法加载还没有对象) 只能使用静态变量; 静态方法出栈以后不会消失存在于方法区;
     *
     * 简单: 静态变量 静态只能调用静态; 成员变量 可以调用成员 也可以调用静态;(成员有对象了类肯定就已经被加载了;)
     */
    public static void fun2() {   //静态方法
         System.out.println(num1); //num1相当于this.num1 还没有对象(不能调用成员方法)
        System.out.println(num2);  //num1 爆红说明不能调用成员变量;
    }

    public static void fun3() {
        System.out.println("我是fun3");
        Test.fun1();//爆红说明不能调用成员方法;因为实在静态方法中;
    }
}


版权声明:本文为a18755425397原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。