• 构造方法


    构造方法

     
    啥是构造? 为什么要有构造方法?
     
    上节课我们写了一辆车. 车的颜色. 排量等信息都是创建完车之后. 再给车设置的. 但是大家想想, 这些车的信息在出厂的时候应该就已经是设置好的了. 不应该在外面进行一个一个的设置. 所以, 在车辆在出厂的时候. 可以给车设置好一些属性信息. 这就是构造. 构造的意义就是可以帮我们在创建对象的时候给对象传递一些信息.
     
    构造方法的语法:
    public 类名(参数….){
    }
     
     
    注意: 构造方法的名字必须和类名一致.
     
    public class Car {
        public Car() {
            System.out.println("构造方法");
        }
        public static void main(String[] args){
            Car p = new Car();
    
        }
    }


    构造能干嘛?
     public class Car {
        String name;
        String color;
        int seat;
    
        public Car(String name, String color, int seat) {
            this.name = name;
            this.color = color;
            this.seat = seat;
            System.out.println("构造了一辆车");
        }
    
        public static void main(String[] args) {
            Car p = new Car("大黄蜂", "绿色", 5);
            System.out.println(p.name + p.color + p.seat);
        }
    }
     
    总结: 构造方法存在的意义就是在对象在创建的时候给对象设置一些属性.
    注意: 每个类都会有构造方法. 如果不写, java会自动赠送一个免费的没有参数的构造方法.
    但是, 如果你自己写了构造方法了. 系统就不送了.
      

    构造方法的重载

     
    想这么一个事儿, 我们可以在创建对象的时候给对象传递一些信息, 通常都是在构造方法里设置一些属性. 那如果现在我写一个”大侠”类, 里面会有很多个属性,
     
     public class DaXia{
         String name;
         String waihao;
         int age;
         String bangPai;
     }
    好了, 接下来我们去创建大侠, 比如, 创建一个"岳不群", 那在创建岳不群的时候, 需要给出: 名字, 年龄, 帮派.
    外号和口头禅对于岳不群而言都不需要. 那如果是创建一个武松呢? 需要给出: 名字, 年龄, 帮派,外号. 这就会产生一个分歧. 有些大侠有外号, 有些大侠没有外号. 对吧. 并且, 我们知道在创建对象的时候. 我们是默认调用构造方法的. 那就需要我们写两个构造方法来满足两种不同的大侠. 但是构造方法的名字还必须是类名. 也就意味着, 我们要写两个名字相同的方法. 咱们在上一章里学过, 方法的名字相同参数的个数或者类型不同, 叫方法的重载. 没错, 这里需要我们重载构造方法.
     
    public class DaXia {
        String name;
        int age;
        String bangPai;
        String nickname;
    
        public DaXia(String name, int age, String bangPai) {
            this.name = name;
            this.age = age;
            this.bangPai = bangPai;
        }
    
        public DaXia(String name, int age, String bangPai, String nickname) {
            this.name = name;
            this.age = age;
            this.bangPai = bangPai;
            this.nickname = nickname;
        }
    }
    聪明的你应该又发现一个问题. 两个构造方法的写法太像了. 能不能简化一下呢? OK. 没问题. 我们还可以使用this来调用当前类中的其他构造方法
     
    public class DaXia {
        String name;
        int age;
        String bangPai;
        String nickname;
    
        public DaXia(String name, int age, String bangPai) {
            this.name = name;
            this.age = age;
            this.bangPai = bangPai;
        }
    
        public DaXia(String name, int age, String bangPai, String nickname) {
            this(name, age, bangPai);
            this.nickname = nickname;
            System.out.println(this.name + this.age + this.bangPai + this.nickname);
        }
    
        public static void main(String[] args) {
            DaXia p = new DaXia("乔峰", 23, "少林", "乔帮主");
        }
    }
     
    this的两个作用:
    表示当前类的对象, 可以访问成员变量和成员方法
    可以调用当前类中的其他构造方法
     

    static

     
    static表示静态. 被static修饰的变量会被所有的对象共享, 并且, 在内存里只会保留一份.
     
    public class Person {
        String name;
        String address;
        static String country = "大清";
    
        public Person(String name, String address) {
            this.name = name;
            this.address = address;
    
        }
    
    
        public static void main(String[] args) {
            Person p1 = new Person("张麻子", "北京四合院");
            Person p2 = new Person("黛西", "北京大裤衩");
            Person.country = "民国";
            System.out.println(p1.country);
            System.out.println(p2.country);
    
        }
    
    
    }
     
    小总结:
    静态变量并不属于对象, 它属于类. 并且在内存中是共享的. 所有对象都可以访问和使用静态变量.
    那如果用static来修饰方法呢? 其实是一样的. 我们用类名去访问静态变量, 同样, 我们也使用类名去访问静态方法.
     
     public class Person{
         public static void huo(){
             System.out.println("是人都想火");
         }
         public static void main(String[] args){
             huo(); // 由于是自己类. 可以直接访问静态方法
             Person.huo();// 最好呢, 还是用类名去访问. 
         }
     }
    类中内容的加载顺序(简单):
     
     public class Person{
         {
             System.out.println("我是通用构造器");
         }
         static {
             System.out.println("我是静态构造器");
         }
         public Person(){
             System.out.println("我是构造方法");
         }
         public static void main(String[] args){
             new Person();
         }
     }
    在创建对象的时候, 首先加载的是静态的内容, 然后才是非静态内容.
    这也就导致一个问题. 静态内容在创建的时候, 还没有对象产生, 所以:
    在静态方法里, 不能使用this.
    也不能直接调用自己类中的其他成员(方法, 变量). 但是反过来是可以的.
     
    重点: 静态的东西不属于对象, 直接属于类, 优先于对象产生. 使用的时候使用类名去访问.
     
     
     
     
     
  • 相关阅读:
    常用编码格式算法
    js显示当前时间
    客户端和服务器端乱码问题
    常用的小技巧
    开发jsp中常用标签
    java中的反射
    java中的单例设计模式
    java中的枚举类
    关于继承时构造方法的问题
    TCP三次握手和四次握手全过程 为什么要三次握手而不是二次握手?
  • 原文地址:https://www.cnblogs.com/wenyule/p/12192256.html
Copyright © 2020-2023  润新知