zoukankan      html  css  js  c++  java
  • JAVA的学习日记13

    Java构造器

    大佬博客指路

    定义声明:
    构造方法的名字必须和所在类的名字一致,没有返回值,但不能声明void,访问权限可以为任意,但是一般情况下使用public方法权限,构造方法中的参数可以根据需要自行定义,参数的不同的构造方法构成重载;

    package com.Test;
    
    public class test {
        class Fu {
            public Fu(){} //无参的公有构造方法
            public Fu(int i){} //参数类型为int的公有构造方法
        }
        
        public class Demo extends Fu {
            public Demo(){} //无参的公有构造方法
            public Demo(int i){} //参数类型为int的公有构造方法
            public Demo(int i,double d){} //参数类型为int和double的公有构造方法
        }
    }
    
    

    构造方法的使用:
    java中构造方法的使用有两个地方,一个是跟在关键字new后面,类名加上一个小括号(),小括号内根据实际加上实参,另外一个是跟在关键字super或this后加上一个小括号(),小括号内根据实际添加实参

        Demo demo = new Demo(); //这里是调用的是一个无参的构造方法,必须声明在方法中,最好声明在主方法
        //上面构造方法的参数根据实际添加实参,jvm根据构造方法的参数不同加载不同的构造方法;
        //2
        public Demo(){
            this(2); //这里调用参数为int类型的本类的构造方法
        }
        //3
        public Demo(){
            super(1); //调用参数为int类型的父类的构造方法
        }
    
    //    注意:2和3中this或super调用构造方法只能出现在构造方法中,而且必须出现在第一行,所以一个构造方法中第一行只能为this或super调用构造方法,两者不能同时调用构造方法出现,而且注意this或super调用构造方法时,要留构造方法出口,意思就是最后调用的构造方法中没有再调用别的构造方法!
    
    

    构造方法的作用:
    1.为了初始化成员属性,而不是初始化对象,初始化对象是通过new关键字实现的
    2.通过new调用构造方法初始化对象,编译时根据参数签名来检查构造函数,称为静态联编和编译多态
    (参数签名:参数的类型,参数个数和参数顺序)
    3.创建子类对象会调用父类构造方法但不会创建父类对象,只是调用父类构造方法初始化父类成员属性;

    学习实例和实现

    package com.oop.Demo02;
    
    public class Person {
        //一个类即使什么都不写,它也会存在一个方法,这个时候称构造器为隐式构造器
    
        String name;
    
        /*
        构造器的作用:
            1.使用new关键字,本质是在调用构造器
            2.实例化初始值
    
    
        IDEA中快捷键:alt+insert键,快速创建构造器
         */
    
        //显式定义构造器
        //无参构造---实例化初始值
    //    public Person(){
    //        this.name = "cdoudou";
    //    }
    
    
        //有参构造:一旦定义了有参构造,无参就必须显式定义
    //    public Person(String name){
    //        this.name = name;
    //    }
    
    
    
    
    
        //快捷键定义的构造器
    //    public Person() {
    //    }
    //
    //    public Person(String name) {
    //        this.name = name;
    //    }
    }
    
    
    /*
    public static void main(String[] args) {
            //实例化了一个对象
            Person person = new Person();
    }
    
    
        构造器:
            1.和类名相同
            2.没有返回值
        作用:
            1、new本质在调用构造方法
            2、初始化对象的值
        注意点:
            1.定义有参构造之后,如果想要使用无参构造,需要显式的定义一个无参的构造
     */
    

    内存分析

    package com.oop.Demo03;
    
    public class Pet {
        public String name;
        public int age;
    
    
        public void shout(){
            System.out.println("叫");
        }
    }
    
    /*
    public static void main(String[] args) {
            Pet dog = new Pet();
    
            dog.name = "旺财";
            dog.age = 5;
            dog.shout();
    
            System.out.println(dog.name);
            System.out.println(dog.age);
    
     */
    

    小结

    1.类与对象

    • 类是一个模板,对象是一个具体的实例

    2.方法

    • 定义和调用

    3.对象的引用

    • 引用类型:基本类型(8)
    • 对象是通过引用来操作:栈----堆

    4.属性:字段Field 成员变量

    • 默认初始化:
      数字:0 0.0
      char:u0000
      boolean:false
      引用:null
      修饰符 属性类型 属性名 = 属性值

    5.对象的创建和使用

    • 必须使用new 关键字创造对象 构造器 Person doudou = new Person();
    • 对象的属性 doudou.name
    • 对象的方法: doudou.sleep()

    6.类:

    • 静态的属性:属性
      动态的行为:方法
    加油!!!马上封装、继承和多态了!
  • 相关阅读:
    UVa 12174 (滑动窗口) Shuffle
    UVa 1607 (二分) Gates
    CodeForces ZeptoLab Code Rush 2015
    HDU 1525 (博弈) Euclid's Game
    HDU 2147 (博弈) kiki's game
    UVa 11093 Just Finish it up
    UVa 10954 (Huffman 优先队列) Add All
    CodeForces Round #298 Div.2
    UVa 12627 (递归 计数 找规律) Erratic Expansion
    UVa 714 (二分) Copying Books
  • 原文地址:https://www.cnblogs.com/cdoudou/p/13687368.html
Copyright © 2011-2022 走看看