java 13. 方法重载构造方法块this用法

利用类来描述现实生活中的事情

利用对象去具体的执行操作

类的内部成员Person

​ 属性:静态描述类的特征(变量、存值)

​ 方法:动态描述类的行为(做事情)

​ 构造方法:用来创建当前类的对象(方法,很特殊)

​ 程序块(代码块):理解为就是一个方法(非常特殊,无修饰符无参数无返回值无名字)

构造方法

类中的第三个成员 --构造方法
  1. 作用:只有一个构建(构造)当前类的对象

  2. 写法:

    权限修饰符 与类名一致的方法名(参数列表) [抛出异常]{

    ​ 一件事情 创建一个对象(当前类Person)

    ​ 返回对象;//返回值类型省略了

    }

  3. 用法:通过new关键字调用

  4. 特点:

    a. 每一个类都有构造方法,若自己在类中没有定义,系统会默认提供一个无参数的构造方法,若在类中自己定义了构造方法,则默认无参数的构造方法即被覆盖

    b. 构造方法存在构造方法重载

  5. 每一个类都有构造方法

    若不定义,系统会默认提供构造方法

    为什么要定义构造方法?什么时候需要设计构造方法?

    在创建对象的同时,想要一并做一些事情,默认提供的构造方法是不会做的,这个时候我们可以自己定义构造方法(无参数的构造方法内做事,也可以定义带参数的)

    public class Person {
    
        public String name;
        public int age;
        public String sex;
    
    	//自己定义带参数的构造方法时,把系统提供的默认无参数的构造方法一起写出来,构成构造方法的重载
        public Person(String n,int a,String s){
            name = n;
            age = a;
            sex = s;
        }
    
        //权限修饰符 类名一致的方法名(参数列表) [抛出异常]{方法体}
        //只有这么一个特殊的方法,名字是大写字母
        //少了结构,特征修饰符(没有),返回值类型(结构上没有返回值类型,但是有返回值 对象)
        public Person(){
            System.out.println("我是Person类的构造方法");
        }
    }
    
    
    public class Test {
        public static void main(String[] args){
            //调用Person类中的构造方法
    //        Person p = new Person("abc");
            //自己定义带参数的构造方法时,把系统提供的默认无参数的构造方法一起写出来,构成构造方法的重载
            Person p = new Person("香吉士",17,"男");
    
            System.out.println(p.name+"今年"+p.age+"岁,"+"性别:"+p.sex);
        }
    }
    
    

    但是为了见名知意,如下

    public class Person {
    
        public String name;
        public int age;
        public String sex;
        public Person(String n,int a,String s){
                name = n;
                age = a;
                sex = s;
            }
    	//我修改为
            public Person(String name,int age,String sex){
                name = name;
                age = age;
                sex = sex;
            }
        //这样就会造成变量和属性重名,因为就近原则,再main函数调用(new Person(name,age,sex))的时候就不能用了,为了解决这个问题,下面引入this关键字
        //继续修改Person方法为
        public Person(String name,int age,String sex){
                this.name = name;//this指代Person()对象
                this.age = age;
                this.sex = sex;
            } 
    }
    
类的第四个成员 --程序块(代码块)
  1. 作用:跟普通方法一样 做事情的

  2. 写法:可以认为程序是一个 没有修饰符 没有返回值 没有名字的特殊方法

    {

    }

  3. 用法:块也需要调用才能执行,我们自己调用不到(没有名字),每一次我们调用构造方法之前,系统会帮我们自动的调用一次程序块,让他执行一遍

  4. 特点:没有什么重载的概念(压根连名字都没有 连参数都没有),但是可以在类中定义 多个程序块

  5. 块可以在里面写一些程序,我想要在创建对象之前执行

this关键字的使用 --构造方法中属性和变量重名,必须要一个代替词来代替对象
  1. 是一个关键字(指代词)代替的是某一个对象(当前调用属性或方法时的那个对象)

  2. this既然代替的时一个对象,this可以调用什么?

    • 属性 this.name

    • 方法 this.eat() ,一般方法是先创建对象,然后对象去执行(调用)

    • 构造方法

      1. 是创建对象的,早于一般方法,在一般方法内无法调用构造方法,

      2. 构造方法可以重载构造方法,

      3. 构造方法内可以调用另一个构造方法(this() 省略构造方法的名字,因为构造方法的名字必须与类名一致)

      4. 必须在另一个构造方法内调用,必须在程序的第一行

            public Person(String name,int age,String sex){
                this();//放在第一行可以
                this.name = name;
                this.age = age;
                this.sex = sex;
                this();//放在这里不可以,报错
            }
        
  3. this调用的过程可以放在那个位置写?

    调用属性或者方法这一行代码,可以放在类中的任何成员位置,上下顺序随意


总结

类的四个成员

  1. 属性 – 静态描述特征(存值)
    权限修饰符 [特征修饰符] 属性类型 属性名字 [= 值]

  2. 方法 – 动态描述行为(做事情)
    权限修饰符 [特征修饰符] 返回值类型 方法名字 ([参数列表]) [抛出异常] [{方法体}]

    最主要的是方法设计的参数及返回值问题 传递 调用 执行 内存

  3. 构造方法 – 创建当前类对象(做事情,唯一的事情)
    权限修饰符 与类名一致的方法名 ([参数列表]) [抛出异常] {方法体}

  4. 程序块 – 一个特殊的方法(没名 做事情 不用我们调用 构建对象之前调用)

  5. this 关键字的使用
    用来代替某一个对象

    可以调用一般属性或方法,放置在任何类成员中

    可以调用构造方法,只能放在另一个构造方法内,只能放在程序的第一行

  6. 类的加载及对象的创建(内存原理 机制)

小任务

  1. 设计一个类模拟一个计算器,做加减乘除 方法 计算方法
控制台输出

​	请输入第一个数:1
​	请输入符号:+
​	请输入第二个数:2
​				 3    (输入2之后输出来结果3,然后立马弹出请输入符号)
​	请输入符号:-
​	请输入第二个数:2
​				 1    
  1. 设计一个类,替代数组可以做的事情

    数组  长度是固定的  存储一组元素
    	长度一旦固定,使用起来不太方便,添加元素  删除元素
    
    设计一个类 --  充当一个容器,ArrayBox
    能添加元素,获取元素,删除元素   看看到底有几个
    
posted @ 2022-04-05 19:07  我是一言  阅读(67)  评论(0编辑  收藏  举报