面向对象——构造方法(重载)

构造方法

1、构造方法概述和格式

(1)概述:给对象的数据(属性)进行初始化

(2)格式特点

  • 方法名与类名相同(大小写也要与类名一致)
  • 没有返回值类型,连void都没有
  • 没有具体的返回值return;
public static void main(String[] args) {
        Phone p = new Phone();
    }        
}

class Phone{
    private String brand;
    private int price;    
    
    //构造方法
    public Phone(){
        System.out.println("啦啦啦");
        return;

    }


}

2、构造方法的重载

(1)概述

方法名相同,与返回值类型无关(构造方法没有返回值),只看参数列表

(2)注意事项

  • 如果没有给出构造方法,系统将自动提供一个构造方法
  • 如果给了构造方法,系统将不再提供构造方法
  • 所以最好一直写出无参构造方法
public static void main(String[] args) {
        Phone p1 = new Phone();
        p1.show();
        
        System.out.println("----------------");
        
        Phone p2 = new Phone("vivoxplay5",2999);
        p2.show();
    }        
}

class Phone{
    private String brand;  //品牌
    private int price;       //价格
    
    //无参构造方法
    public Phone(){
        System.out.println("无参构造");
    }

    //有参构造器
    public Phone(String brand, int price) {
        this.brand = brand;
        this.price = price;
        System.out.println("有参构造");
    }
    
    public void show(){
        System.out.println(brand+"..."+price);
    }

    
}

3、给成员变量赋值的两种方式的区别

/**
     * 无参构造方法:给属性进行初始化
     * set/get方法:修改属性值
     * @param args
     */
public static void main(String[] args) {
        //无参构造创建对象
        Phone p1 = new Phone();    
        p1.setBrand("vivoxplay5");
        p1.setPrice(2999);
        
        p1.setBrand("vivo");
        p1.show();
        
        System.out.println("----------------");
        //有参构造创建对象
        Phone p2 = new Phone("vivoxplay5",2999);
        //这种方式并不是改名,而是将原对象变成垃圾
        //p2 = new Phone("vivo",2000);
        p2.show();
    }        
}

class Phone{
    private String brand;  //品牌
    private int price;       //价格
    
    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    //无参构造方法
    public Phone(){
        System.out.println("无参构造");
    }

    //有参构造器
    public Phone(String brand, int price) {
        this.brand = brand;
        this.price = price;
        System.out.println("有参构造");
    }
    
    public void show(){
        System.out.println(brand+"..."+price);
    }

    
}

4、长方形案例

public static void main(String[] args) {
        长方形 c = new 长方形(4,6);
        System.out.println(c.周长());
        System.out.println(c.面积());
    }    
}
/**
 * 定义一个长方形类,求周长和面积的方法
 * 然后定义一个测试类进行测试
 *
 */

class 长方形{
    private int a;
    private int b;
    
    public 长方形() {  //无参构造
        
    }
    
    
    public 长方形(int a, int b) {   //有参构造
        super();
        this.a = a;
        this.b = b;
    }

    public int getA() {
        return a;
    }

    public void setA(int a) {
        this.a = a;
    }

    public int getB() {
        return b;
    }

    public void setB(int b) {
        this.b = b;
    }

    public int 周长(){
        return (a+b)*2;
    }
    
    public int 面积(){
        return a*b;
    }
}

5、static关键字

特点:

(1)随着类的加载而加载

(2)优先于对象存在

(3)被类的所有对象共享

  •   举例:班上的同学应该共用同一个班级编号
  •   如果成员变量是被所有对象共享的,那么它就应该定义为静态的
  •   举例:饮水机(用静态修饰)
  •         水杯(不能用静态修饰)
  •    共性用静态,特性用非静态

(4)可以通过类名调用

  •   它本身也可以通过对象名调用
  •   推荐使用类名调用
  •   静态修饰的内容一般称为:与类相关的,类成员

注意事项:

(1)在静态方法中式没有this关键字的

  • 静态是随着类的加载而加载,this是随着对象的创建而存在的
  • 静态比对象先存在

(2)静态方法只能访问静态的成员变量和静态的成员方法

public static void main(String[] args) {
        c c1 = new c();
        c1.print();
        
        c.print1();
    }

}    
    

class c{
    
    int num1=10;            //非静态成员变量
    static int num2 = 20;   //静态成员变量
    
    public void print(){   //非静态成员方法,既可以访问静态的,也可以访问非静态的
        System.out.println(num1);
        System.out.println(num2);
    }
    
    public static void print1(){  //静态成员方法
        //System.out.println(num1);  //静态成员方法不能访问非静态的
        System.out.println(num2);
    }
}

6、静态变量和成员变量的区别

(1)所属不同

静态变量属于类,所以也称为类变量

成员变量属于对象,所以也称为实例变量(对象变量)

(2)内存中位置不同

静态变量存储与方法区的静态区

成员变量存储于堆内存

(3)内存出现时间不同

静态变量随着类的加载而加载,随着类的消失而消失

成员变量随着对象的创建而存在,随着对象的消失而消失

(4)调用不同

静态变量可以通过类名调用,也可以通过对象调用

成员变量只能通过对象名调用

7、Math类的随机数功能

public static void main(String[] args) {
        double d = Math.random();  //生成一个随机小数
        System.out.println(d);
        
        //生成1-100的随机数
        int a = (int)(Math.random()*100+1);
        System.out.println(a);
    }

}    

猜你喜欢

转载自www.cnblogs.com/lc1997/p/10685877.html