3.1封装概念
封装是把过程和数据包围起来,对数据的访问只能通过已定义的接口。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。封装是一种信息隐藏技术,在java中通过关键字private,protected和public实现封装。
什么是封装?封装把对象的所有组成部分组合在一起,封装定义程序如何引用对象的数据,封装实际上使用方法将类的数据隐藏起来,控制用户对类的修改和访问数据的程度。 适当的封装可以让程式码更容易理解和维护,也加强了程式码的安全性。
3.1.1封装的好处有:
1.提高了安全性
2.提高了复用性
3.隐藏了现实细节
3.2 封装的使用步骤
在介绍封装步骤之前,要先了解一下什么是修饰符。
在面向对象的过程中,我们通过“权限的控制”对封装好的类加上权限,来限制外来者对类的操作,借以达到保障类中数据和方法安全的目的。而这种权限,可以用来控制属性和方法的访问范围。
Java中4中修饰符分别为public、protecyed、default、private。下表是不同修饰符的访问权限
修饰符 | 同一个类 | 同一个包 | 子类 | 所有类 |
---|---|---|---|---|
pricate | √ | |||
default | √ | √ | ||
protected | √ | √ | √ | |
public | √ | √ | √ | √ |
封装步骤如下。
1.尽量让权限降到最低,在类里要将属性前添加private修饰符,从而提高安全性。
2.在类中定义getter和setter方法,在方法内可以设置取值范围。
3.最后在我们的main函数里的对象,不能再直接调用属性了只能通过getter和setter方法调用。
下列看代码实例 3.2.1
示例3.2.1
public class Person{
//私有属性
private string name;
private String pwd;
private Integer age;
private String sex;
//无参数构造方法
public Person() {}
//对应私有属性的get和set方法
public string getName() {
return name ;
}
public void setName(String name) {
this. name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this. pwd = pwd;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getSex() {
return sex;
}
publc void stSex:(tring sex) (
this.sex=sex
}
@Override
public String toString(){
return "Person[name="+name+",pwd="+pwd+",age="+age+",sex="+sex+"];
}
}
3.2.2
public class Person{
//私有属性
public string name;
public String pwd;
public Integer age;
public String sex;
//无参数构造方法
public Person() {}
//对应私有属性的get和set方法
public void setAge(Integer age) {
if(age>=18&&age<=65)
this. age = age;
else
System. out. println("年龄输入不合法");
}
public Integer getAge() {
return age;
}
/...剩下的get和set方法
@ Override
public String toString() {
public String toString(){
return "Person[ name=" + name + ",pwd=" + pwd + ",age="+ age
+",sex="+sex+"];
}
}
@ Override
在测试类,创建这个类的对象,并为属性赋值。
public static void main(String[] args) {
Person person = new Person();
person. setName("李四");
person. setAge(22);
person. setSex("女");
person. setPwd("123");
person.name=‘张E”;
person. sex = "男";
person. age =- 5;
System. out. println("姓名:" + person. toString()
+ "\n 性别:"+ person. getSex()
+"\In年龄:"+ person. getAge());
}
上面的测试类,运行后出现了如下列3.2.1所示结果
出现这样的问题解决方法如下:
出现的问题 | 解决方法 | 关键字 |
---|---|---|
为对象属性赋值出现了两种方法,是的数据安全性不足 | 将属性修饰符设为私有化,已解决此问题 | private |
打印结果中出现了-5的年龄,这显然不是对的 | 在setter方法中添加判断语句来解决 | if-else |
扩展——log4j 3.4
日志及分类
软件的运行过程离不开日志。日志主要用来记录系统运行过程中的一些重要的操作信息,便于监视系统运行情况,帮助用户提前发现和避开可能出现的问题,或者出现问题后根据日志找到发生的原因。
根据记录内容的不同,日志主要分成以下3类
1.SQL日志:记录系统执行的SQL语句。
2.异常日志:记录系统执行运行中发生的异常事件。
3.业务日志:记录系统运行过程,如用户登录、操作记录。
如何使用log4j记录日志3.4.1
下面就开始具体学习lgi,使用log4) 来记录日志。
1.在项目中加人log4j所使用的JAR文件
在Ecipe中选中要使用log4j 的项目,然后依次选择
“Project" →“properties"
"anBandpar 二Iueree"一。Add Etem J…"选项,弹出选择JAR的窗口,
找到自己计算机上存放的文件,即logij-l.2.17.jar,
如图3.4. 1所示。然后回到项目的
属性窗口,单击“OK”按钮即可。
2.创建log4j. properties文件
使用log4j需要创建log4j. propeties文件,该文件专门用来配置日志信息,如输出级
别、输出目的地、输出格式等。
选择要使用log4j的项目,右击“src”, 依次选择“New”-“File" 选项,弹出
“New File"对话框,输人文件名“log4j. properties", 单击"Finish" 按钮,结束创建。包
建后结果如图3.4.2所示。
3.编写log4j. properties文件,配置日志信息
现在,我们就一起来编写这个文件,内容如示例3.4. 1所示。各配置项的具体含义我
们会在后面详细讲解。根据配置,将在控制台和文件中同时记录日志信息,日志文件的名
字是sysInfo. log。
3.4.2 log4j配置文件
示例3.4.1中编写的文件是log4j的配置文件log4j. poperties, 下面对其中的配置信息
进行详细解释。
输出级别
log4j rootLogger = debug, stdout, lofile
其中,debug 指的是日志记录器( Logger)的输出级别,主要输出级别及含义如下。
(1) fatal: 指出严重的错误事件将会导致应用程序的退出。
(2) error: 指出虽然发生错误事件,但仍然不影响系统的继续运行。
(3)warn:表明会出现潜在错误的情形。
(4) Info: 在粗粒度级别上指明消息,强调应用程序的运行过程。
(5) debug: 指出细粒度信息事件,对调试应用程序是非常有帮助的。各个输出级别
优先级排序: fatal > error > warn > info > debugo
日志记录器( Logger)将只输出那些级别高于或等于它的信息。例如:级别为debug,
将输出fatal、error、 warm、info、 debug 级别的日志信息;而级别为error,将只输出fatal 、
error级别的日志信息。