写点什么

Surpass Day——Java 面向对象的封装、构造方法

作者:胖虎不秃头
  • 2022 年 10 月 07 日
    河南
  • 本文字数:2042 字

    阅读完需:约 7 分钟

Surpass Day——Java面向对象的封装、构造方法

1、面向对象的封装

1.1 封装的好处

1)封装之后对于那个事物来说,看不到这个事物比较复杂的那一面,只能看到该事物简单的那一面,复杂性封装,对外提供简单的操作入口;


2)封装之后才会形成真正的"对象",真正的"独立体";


3)封装之后意味着以后的程序可以重复使用,并且这个事物适应性比较强,在任何场所都能够使用;


4)封装之后,对于事物本身提高了安全性;

1.2 如何封装

1.2.1 属性私有化


使用 private 关键字进行修饰,修饰的所有数据只能在本类中访问;


1.2.2 对外提供简单的操作入口(两个公开的方法)


-调用 set 方法:修改属性;


-调用 get 方法:读取属性;


1.2.3 set 方法的命名规范


public void setAge(int a){    //编写业务逻辑代码进行安全控制 if()    age = a;}
复制代码


点击并拖拽以移动


由于 java 有就近原则,以下代码 Error


public void setAge(int age){    age = age;}//这里并没有给age属性赋值,这里的age都是局部变量age
复制代码


点击并拖拽以移动


1.2.4 get 方法的命名规范


public int getAge(){    //编写业务逻辑代码进行安全控制 if()    return age;}
复制代码


点击并拖拽以移动


而在 eclipse 中 get 和 set 方法不用写,直接按下面操作自动生成 get,set 方法


单击右键--->Source--->Generate Getters and Setters



点击并拖拽以移动


​编辑



点击并拖拽以移动


​编辑

1.3 封装后如何访问

调用方法:


修改:user.setAge(-100);


读取:user.getAge();


注意:不能通过"类型.变量名"访问,已经封装在类中,外部无法访问,只能通过方法;



2、构造方法

2.1 定义

构造方法又被称为构造函数/构造器/Constructor

2.2 构造方法的语法结构

[修饰符列表]  构造方法名 (形式参数列表){
​
    构造方法体;  
​
}


与普通方法的语法结构对比:


[修饰符列表] 返回值类型 方法名(形式参数列表){
​
        方法体;
​
}


注意:


1)"返回值类型"不需要指定,也不用写 void;


写上 void 就变成了普通方法了;


2)构造方法名必须与类名相同;

2.3 构造方法的调用

1)普通方法的调用:


方法修饰符有 static 时:类名.方法名(实参列表)


方法修饰符没有 static 时:引用.方法名(实参列表)


2)构造方法的调用: new 构造方法名(实参列表)


3)构造方法执行之后有返回值,且返回值类型为构造方法所在类的类型(他本身),所以语法结构中不用写返回值类型,构造方法执行之后 java 程序自动返回值;


4)当一个类中没用定义任何构造方法的话,系统默认给该类提供一个无参数的构造方法,这个构造方法被称为缺省构造器


5)当一个类显示的将构造方法定义出来了,那么系统不再默认提供的缺省构造器了,建议开发中手动的为当前类提供无参数的构造方法;


6)构造方法支持重载机制,在一个类中编写多个构造方法,这多个构造方法显然已经构成方法重载机制;


public class Code{    public static void main(String[] args){        User u1 = new User("Jack");        User u2 = new User(10);    }}public User(int i){    System.out.println("带有int参数类型的构造器")}public User(String name){    System.out.println("带有String参数类型的构造器")}
复制代码


点击并拖拽以移动

2.4 有无 static 方法的调用

方法有 static 修饰时,调用方法时不需要 new 对象,直接通过方法名(实参)/类名.方法名(实参)调用;


public class Code{    public static void main(String[] args){        Code.dosome();        dosome;    }}public ststic void dosome(){    System.out.println("do some");}
复制代码


点击并拖拽以移动


方法没有 static 修饰时,调用方法时需要 new 对象;


public class Code{    public static void main(String[] args){        Code t = new Code();        t.dosome;    }}public void dosome(){    System.out.println("do some");}
复制代码


点击并拖拽以移动

2.5 构造方法的作用

1)创建对象;


2)初始化实例变量的内存空间,赋值;


注意: 实例变量的系统默认赋值不是在类加载的时候完成赋值的,类加载的时候只将代码片段加载到了方法区内存,而实例变量的初始化是在创建对象之后(构造方法完成之后)完成初始化的

2.6 自动构造方法的快捷方式

单击右键--->Source--->Generate Constructor using Fields... 



点击并拖拽以移动


​编辑

2.7 面向对象的封装以及构造方法的实例

public class helloworld{  public static void main(String[] args){    Bank b = new Bank("Jack",1000);    System.out.println("账号名字为" + b.getName());    System.out.println("账号余额为" + b.getMoney());        Bank a = new Bank();        System.out.println("账号名字为" + a.getName());    System.out.println("账号余额为" + a.getMoney());    }}class Bank{  public String getName() {    return name;  }  public void setName(String name) {    this.name = name;  }  public int getMoney() {    return money;  }  public void setMoney(int money) {    this.money = money;  }  private String name;  private int money;    //无参数的构造器    public Bank(){  }    //有参数的构造器  public Bank (String s,int d) {    name = s;    money = d;  }}
复制代码


点击并拖拽以移动


\


发布于: 刚刚阅读数: 3
用户头像

还未添加个人签名 2022.07.29 加入

还未添加个人简介

评论

发布
暂无评论
Surpass Day——Java面向对象的封装、构造方法_Java_胖虎不秃头_InfoQ写作社区