zoukankan      html  css  js  c++  java
  • 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
      能添加元素,获取元素,删除元素   看看到底有几个
      
    更多学习笔记移步 https://www.cnblogs.com/kknote
  • 相关阅读:
    关于WPF中Popup控件的小记
    javascript调用外部wpf的方法
    html+ashx 缓存问题
    『Linux学习笔记』8. 权限
    LeetCode 2.两数相加
    C# 标签打印示例 1
    检索COM 类工厂中CLSID 为 {0002450000000000C000000000000046}的组件时失败
    C# 文件操作(一)
    Nginx 事件基本处理流程分析
    Spring学习笔记1:概论
  • 原文地址:https://www.cnblogs.com/kknote/p/15257452.html
Copyright © 2011-2022 走看看