Java编程的封装机制

Java编程的封装机制

开发工具与关键技术:eclipse  java
作者:黄济民
撰写时间:2021.6.13

package com.hjm.dome;

/**

  • @author Rmin
  • 对于当前程序来说:
  • User类中的age属性在外部程序中可以随意访问,导致age属性不安全。
  • 一个User对象表示一个用户,用户年龄不可能是负数,以下程序当中年龄值 为负数,
  • 程序运行的时候并没有报错,这就是当前程序的缺陷。
  • 面向对象包括三大特征:
    • 封装
    • 继承
    • 多态
  • 当前主要讲解的是封装机制。为什么要封装?封装有什么好处?
  • 封装的好处:
  •  1,封装之后,对于那个事物来说,看不到这个事物比较复杂的那一面,只能看到该事物简单的那一面。
    
  •    复杂性封装,对外提供简单的操作入口。照相机就是一个很好的封装的案例,照相机的实现原理非常复杂,
    
  •    但对于使用照相机的人来说,操作起来是非常方便的是非常便捷的。还有像电视机也是封装的,
    
  •  2,封装之后才会形成真正的“对象”,真正的“独立体”。
    
  •  3,封装就意味着以后的程序可以重复使用。并且这个事物应该适应性比较强,在任何场合都可以使用。
    
  •  4,封装之后,对于事物本身,提高了安全性。【安全级别高】
    

*/

package com.hjm.dome;
//用户类
public class User {
//年龄
int age;
}
//测试类
public class UserText {

public static void main(String[] args) {

	// 创建User对象
	User user = new User();

	// 访问age
	// 读取年龄值【get】
	System.out.println("该用户年龄:" + user.age);

	// 修改年龄值【set】
	user.age = 20;

	// 读取年龄值【get】
	System.out.println("该用户年龄:" + user.age);
	
	//修改年龄
	//这里的age属性显然是完全暴露给外部程序的,对于程序员来说可以操作User对象当中的所以细节,导致User中部分数据不安全。
	//不建议这样,建议User类型进行封装,建议在外部程序中不能随意访问User对象当中的值。这样可以保证属性的安全。
	user.age = -100;
	
	//读取年龄值
	System.out.println("该用户年龄:" + user.age);
}

}

下面是另一种写法:
package com.hjm.dome.java;

/**

  • @author Rmin
  • 封装的步骤:
  • 1.所有属性私有化,使用private关键字进行修饰,private表示私有的,修饰的所有数据只能在本类中访问。
    
  • 2.对外提供简单的操作入口,也就是说以后外部程序想要访问age属性,必须通过这些简单的入口进行访问:
    
  •       -对外提供两个公开的方法,分别是set方法和get方法
    
  •       -想修改age属性,调用set方法
    
  •       -想读取age属性,调用get方法
    
  • 3.set方法的命名规范:
    
  •     //public void set+属性名首之母大写	(形参){}
    
  •     public void setAge(int a){
    
  •         age = a;
    
  •     }
    
  • 4.get方法的命名规范:
    
  •     //public 返回值类型  get+属性名首之母大写(){}
    
  •     public int getAge(){
    
  •         return age;
    
  •     }     
    
  • 回想一下,一个属性通常访问的时候 包括几种访问形式
  • - 第一种方式:想读取这个属性的值,读取get
    
  • - 第二种方式:想修改这个属性的值,修改set
    
  • 需要背后的内容:
    • setter and getter方法没有static关键字
    • 有static关键字修饰的方法怎么调用:类名.方法名(实参);
    • 没有static关键字修饰的方法怎么调用:引用.方法名(实参);

*/

//用户类
public class User {

//属性私有化
private int age;

//set方法没有返回值,因为set方法只负责修改数据
/*
public void setAge(int age) {
	age = age;//java有就近原则,这里其实并没有给age属性赋值,这里age就是局部变量age
}
*/

//setter方法
public void setAge(int a) {
	//编写业务逻辑代码进行安全控制
	//age = a;
	
	if(a < 0 || a > 150) {
		System.out.println("对不起,该年龄阶段不合法");
		//不合法直接return不往下执行了 结束
		return;
	}
	
	//程序可以执行到这里的话,说明a年龄是合法的,则进行赋值运算
	age = a;
}

//getter方法
public int getAge() {
	return age;
}

}

package com.hjm.dome.java;

//测试
public class UserText {

public static void main(String[] args) {
	
	//创建User对象
	User user = new User();
	
	//编译报错,age属性私有化,在外部程序中不能直接访问
	//从此之后age属性非常安全,但是有点太安全了。
	//对于目前的程序来说,age属性彻底在外部访问不到了。
	//System.out.println(user.age);
	
	//修改
	user.setAge(1);
	
	//读取
	System.out.println(user.getAge());
	
	
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值