网站首页 > 精选教程 正文
5.5 隐藏与封装
封装引入
在程序中经常出现通过某个对象的直接访问其Field的情况,这会存在一系列的问题,比如定义一个Person的对象,其中有age这样一个属性,如果将属性值赋值为1000,虽然程序不会出错,但是逻辑是错误的,人不可能活1000岁,那怎么来解决这个事情呢?
这个时候我们引入一个新的概念,封装。
我们将成员变量定义使用private关键字进行修饰,这样外部所有类将无法直接访问当前类中的变量,然后通过方法的方式向外提供服务,在方法中提供控制条件来进行变量的赋值操作。
举例1:
package com.langsin.test;
publicclass Test {
private int age = 0;
public int getAge() {
return age;
}
public void setAge(int age) {
if(age>100){
this.age = 100;
}else{
this.age = age;
}
}
public static void main(String[] args) {
Test test = new Test();
test.setAge(125);
System.out.println(test.getAge());
}
}
5.5.1 理解封装
封装是面向对象的三大特征之一,它指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象的内部信息,而是通过该类所提供的方法来实现对内部信息的操作和访问。
封装可以实现以下目的:
1、 隐藏类的实现细节
2、 使用者只能通过提供的方法来访问数据,从而可以在方法中加入控制逻辑,限制对变量的不合理的访问。
3、 可进行数据检查,从而有利于保证对象信息的完整性。
4、 便于修改,提高代码的可维护性。
封装的实际含义就是该隐藏的隐藏,该暴漏的暴漏。
5.5.2 package、import
Oracle公司提供的JDK、各种软件厂商、众多的开发商,会提供成千上万、具有各种用途的类,那么类名肯定会出现同名的这种情况,为了处理重名问题,Java引入了包(package)机制,提供了类的多层命名空间,用于解决类的命名冲突、类文件管理问题。
Java源文件中使用了pageckage语句,就意味着该源文件里定义的所有类属于这个包下。位于包中的每个类的完整类名都应该是包名和类名的组合。
举例1:
public class Test {
public static void main(String[] args) {
com.langsin.vo.Page page1 = new com.langsin.vo.Page();
}
}
为了简化编程,Java引入了import关键字,import可以向某个Java文件中导入指定包层次下的某个类或全部类,import语句出现在package语句之后,类定义之前。
举例2:
package com.langsin.test;
import com.langsin.vo.Page;
public class Test {
public static void main(String[] args) {
Page page = new Page();
System.out.println(page.getLineNum());
}
}
Import语句可以简化编程,可以导入包下某个类或者全部类,导入全部类的方式用*表示,
举例3:
import com.langsin.vo.*;
表示导入com.langsin.vo包下的所有类。
5.5.3 Java的常用包
Java的核心类都放在java这个包以及其子包下,Java扩展的许多类都放在javax包以及其子包下,这些实用类也就是前面所说的API。
java.lang:这个包下包含了Java语言的核心类,如String、Math、System、和Thread类等,使用这个包下的类无须使用import语句导入,系统会自动导入这个包下的所有类。
java.util:这个包下包含了Java的大量工具类/接口和集合框架类/接口,例如Arrays和List、Set等。
java.net:这个包下包含了一些Java网络编程相关的类和接口。
java.io:这个包下包含了一些Java输入/输出编程相关的类和接口。
java.text:这个包下包含了一些Java格式化相关的类。
java.sql:这个包下包含了Java进行JDBC数据库编程的相关类和接口。
java.awt:这个包下包含了抽象窗口工具集的相关类和接口,这些类主要用于构建图形用户界面(GUI)程序。
java.swing:这个包下包含了Swing图形用户界面编程的相关类和接口,这些类可用于构建平台无关的GUI程序。
猜你喜欢
- 2024-10-28 Java 8 中处理日期和时间示例 java 日期时间格式
- 2024-10-28 Java 实现日期的格式化,月份和天不足两位时补上0
- 2024-10-28 Java中日期格式化YYYY-DD的坑 java 日期格式化为yyyy-mm-dd mmss
- 2024-10-28 Java 的流程控制是什么样子的 java流程控制有哪些
- 2024-10-28 Java优雅的保留两位小数 java保留两位数字
- 2024-10-28 阿里面试官:聊聊如何格式化 Instant
- 2024-10-28 圆你的大厂梦!今日头条Java高频面试题真题:一/二/三面+常见问题
- 2024-10-28 “全栈2019”Java第十四章:二进制、八进制、十六进制
- 2024-10-28 Java,FreeMarker,模板引擎,通过案例代码,学懂模板引擎
- 2024-10-28 Springboot强大的数据格式化功能你必须要知道
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)