zoukankan      html  css  js  c++  java
  • 无参构造与有参构造

    构造方法根据有无参数分为无参构造和有参构造

    无参构造语句:

    [修饰符]  类名(){
    }

    有参构造语句:

    [修饰符] 类名(type a1,type a2...){
    }

    它俩构成了方法重载。

    局部变量和成员变量的优先级问题:(如下述代码)

    public class Dog{ 
        String name;
    public Dog(String name){
    name=name;
    }
    }

    此时标记的name是无法赋值给name的,因为局部变量的优先级高于成员变量,name只会找到name

    name这种情况怎么解决呢?

    第一种方法:

    public class Dog{ 
        String name;
    public Dog(String _name){
        name=_name;
      }
    }

    将这个形参里的属性名变化一下以示区分,此时name在局部变量里面找不到name就会去成员变量里面找。

    第二种方法:

    关键字   this(可用于访问对象本身的属性)

    具体实例可跳到 this 环节。。。

    有参构造中常见问题:
    一般类里没声明构造的话,系统默认的是无参构造;

    如果声明了有参构造,但是其它类传过来的数据类型或者属性个数都不匹配的话,那么系统就会报错,

    此时咱们程序员就需要习惯性的两个构造都声明一下。

    举例说明:(下述类的有参构造只构造了名字和品种,但是没有声明无参构造)

     1 public class Dog{
     2     
     3     String name;
     4     int health;
     5     int love;
     6     String strain;
     7     
     8     /*
     9     public Dog(){
    10         System.out.println("构造方法");
    11         health = 100;
    12         love = 0;
    13     }
    14     */
    15 
    16     public Dog(String _name,String _strain){
    17         name = _name;20                   
    strain = _strain; 21 } 22 23 public void showInfo(){ 24 System.out.print("我的名字叫"+name); 25 System.out.print(",健康值"+health); 26 System.out.print(",亲密度"+love); 27 System.out.println(",我是一只"+strain); 28 } 29 }
    另一个类的属性赋值:
    Dog dog = new Dog(); dog.name = name; dog.health = 100; dog.love = 0; dog.strain = strain;

    9-13行代码就是解决方案。

    ***习惯性的两个构造都声明一下

  • 相关阅读:
    NET CORE 数据库迁移
    VUE3.0 解析svg文件
    关于ElementUI的样式不生效
    git命令
    vue 2.x的跨域问题
    Putty 重新启动 linux sqlserver服务
    aspnetcore之session
    Syncfusion 在 core 的架构
    TortoiseSVN创建/合并分支
    正则表达式知识点整理
  • 原文地址:https://www.cnblogs.com/zhangxiong-tianxiadiyi/p/10742340.html
Copyright © 2011-2022 走看看