封装
1:封装的目的:
封装就是保护内容,保证某些属性或方法可以不被外部看见。
class Person{
String name;
int age;
public void tell(){
System.out.println("姓名:"+name+" 年龄:"+age);
}
}
public class test06
{
public static void main(String args[]){
Person per1 = null;
Person per2 = null;
per1 = new Person();
per2 = new Person();
//Person per = null;
//per = new Person();
per1.name="张三";
per1.age = 30;
per2.name="李四";
per2.age = 33;
per2 = per1;//把per1的堆内存空间使用权给per2
per1.tell();
per2.tell();
}
}
此时如果把per1.age = 30;语句改为per1.age = -30;
class Person{
String name;
int age;
public void tell(){
System.out.println("姓名:"+name+" 年龄:"+age);
}
}
public class test06
{
public static void main(String args[]){
Person per1 = null;
Person per2 = null;
per1 = new Person();
per2 = new Person();
//Person per = null;
//per = new Person();
per1.name="张三";
per1.age = -30;
per2.name="李四";
per2.age = 33;
per2 = per1;//把per1的堆内存空间使用权给per2
per1.tell();
per2.tell();
}
}
后,在java语法上没有任何问题,但是从实际角度看,以上的代码绝对不符合要求。
为什么呢?
#因为没有人的年龄是负数。
而不合适的根本原因在与此处让属性可以直接被外部所访问。
此时只能通过封装解决:
2:封装实现:
为属性封装:private 属性类型 属性名称
为方法封装:private 方法返回值 方法名称(参数列表){}
class Person{
private String name;
private int age;
public void tell(){
System.out.println("姓名:"+name+" 年龄:"+age);
}
}
public class test06
{
public static void main(String args[]){
Person per1 = null;
Person per2 = null;
per1 = new Person();
per2 = new Person();
//Person per = null;
//per = new Person();
per1.name="张三";
per1.age = -30;
per1.tell();
}
}
此时再次编译,出现问题:
F:\test>javac test06.java
test06.java:17: name 可以在 Person 中访问 private
per1.name="张三";
^
test06.java:18: age 可以在 Person 中访问 private
per1.age = -30;
^
2 错误
提示是一个私有的访问权限,则意味着,外部根本就无法调用。
3:访问封装的内容
因为这些属性肯定是要表示出一些实际的意义,那么这些有意义的内容肯定应该有外部设定,所以在整个java中对于封装性的访问就给出了一个明确的原则,此原则必须遵守。
被封装的属性如果需要被访问,则需要编写setter及getter方法完成。
如:private String name;
Setter(设置):public void setName(String n){}
Getter(取得):public String getName();
class Person{
private String name;
private int age;
public void setName(String n){
name = n;
}
public void setAge( int a){
age = a;
}
public String getName(){
return name;
}
public int getAge(){
return age;
}
public void tell(){
System.out.println("姓名:"+name+" 年龄:"+age);
}
}
public class test06
{
public static void main(String args[]){
Person per1 = null;
Person per2 = null;
per1 = new Person();
per1.setName("张三");
per1.setAge(-30);
per1.tell();
}
}
此时程序运行结果如下:
F:\test>javac test06.java
F:\test>javac test06.java
F:\test>java test06
姓名:张三 年龄:-30
注:
以上的代码只是可以访问封装属性了,但是并没有加入检错错误的措施。
如果年龄设置的有问题,则不应该为属性赋值。
在setter方法中加入检测
getter直接取值就行啦
加入验证后的代码:
class Person{
private String name;
private int age;
public void setName(String n){
name = n;
}
public void setAge( int a){
if(a>=0&&a<=150){
age = a;
}
}
public String getName(){
return name;
}
public int getAge(){
return age;
}
public void tell(){
System.out.println("姓名:"+name+" 年龄:"+age);
}
}
public class test06
{
public static void main(String args[]){
Person per1 = null;
Person per2 = null;
per1 = new Person();
per1.setName("张三");
per1.setAge(-30);
per1.tell();
}
}
结果为:
F:\test>javac test06.java
F:\test>java test06
姓名:张三 年龄:0
总结:
#封装性在java中有很多形式,private致死最基本的一种形式,也是一种比较常见的形式
#类中的每一个属性都必须封装
分享到:
相关推荐
Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记
Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习...
java学习笔记,java基础知识,只用于个人学习。
java学习笔记java学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记...
java学习笔记.doc java学习笔记 java学习 学习笔记 java
JAVA学习笔记JAVA学习笔记JAVA学习笔记JAVA学习笔记JAVA学习笔记JAVA学习笔记JAVA学习笔记JAVA学习笔记JAVA学习笔记
Java基础 java学习笔记 Java Java基础Markdown学习笔记,可转换成PDF、Word等格式
在学习java过程中的笔记。
java学习笔记java学习笔记java学java学习笔记习笔记
java学习笔记
Java学习笔记(必看经典) Java学习笔记(必看经典) Java学习笔记(必看经典)
良葛格的Java学习笔记~讲解得非常详细。JDK5.0的~是Java入门的不错选择。
狂神说java学习笔记,markdown版
java学习笔记,从0开始学习 java学习笔记,从0开始学习 java学习笔记,从0开始学习 java学习笔记,从0开始学习 java学习笔记,从0开始学习 java学习笔记,从0开始学习 java学习笔记,从0开始学习 java学习笔记,从0...
Java 学习笔记.pdf Java 学习笔记.pdf Java 学习笔记.pdf Java 学习笔记.pdf
Java学习笔记(源码)Java学习笔记(源码)Java学习笔记(源码)Java学习笔记(源码)Java学习笔记(源码)Java学习笔记(源码)
林信良的《JAVA学习笔记》电子版,从作者网站中下载
Java 学习笔记,分为7个pdf,java学习笔记书籍
针对初学者,一些笔记整理,Java的知识就是这 样积少成多啊
韩顺平编写的java学习笔记(全) 包含各种java的基本语法,以及3大项目的详细设计解释以及代码