重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
说给人家听,我们就说的通俗简单点: 代码封装的好处:第一点在于安全,JAVA中类的一个属性,我们一般会在类中将其私有化然后getter和setter方法对外提供得到和设置的方法,这就好比自动存提款机,钱就是我们要的属性,要的数据,放在那直接去拿可以吗?很明显不行,所以自动存提款机提供了取钱的方法和存钱方法,而你不用知道钱从哪来要到哪里去。第二点在于方便:方法也是封装的一种体现,有一个功能我们要反复调用,每次写同样的代码吗?答案很明显,不要!,我们写个方法,把这段功能代码封装成一个方法,需要的时候调用方法名就可以了,不是吗? 关于package:如果一个项目很大的话,会分成很多小组,每个小组会有很多开发人员,大家在编写代码时说不定会出现同样的类名,问题就来了,我在调类的时候,调的是哪个?所以每个小组用不同的包名,这样来区分类所在的位置。好,如果你说项目编码之前详细设计说的很清楚了,类不可能出现同名,那么包的另外一个好处在于相似用途的类放在一个包下可以方便管理和查找,比如java.util包,如查没有包的存在,我想查API看有哪些集合框架,你说方便不 权限修饰符的作用就是:你很有钱,你愿意告诉谁你很有钱需要的时候可以来找你,你的亲属?你的儿子?还是全世界的所有人?你自己有必要告诉谁 那么他们缺钱的时候就会想到你
成都创新互联公司主营德化网站建设的网络公司,主营网站建设方案,app软件定制开发,德化h5小程序设计搭建,德化网站营销推广欢迎德化等地区企业咨询
封装性是整个面向对象的第一大特性,所谓的封装性几是指类内部的操作对外部不可见。
范例:观察如下的程序问题
class Person { // 类名称的单词首字母必须大写
String name ; // 姓名,是一个字符串所以使用String
int age ; // 年龄是一个整数,所以使用int
public void tell(){ // 定义一个方法
System.out.println("姓名:" + name + ",年龄:" + age) ;
}
}
public class ClassDemo {
public static void main(String args[]){
Person per = new Person() ;
per.name = "张三" ;
per.age = -30 ;
per.tell() ;
}
}
此时的程序从技术(语法)上而言没有任何的问题,但是从实际的生活(业务)上来看,一个人的年龄绝对不可能是-30岁,所以这个时候造成问题的主要原因就是类中的操作对外部可见。
此时,就可以通过封装性来解决此类问题,如果现在要想对类中的属性或方法封装,可以直接使用private关键字完成。
class Person { // 类名称的单词首字母必须大写
private String name ; // 姓名,是一个字符串所以使用String
private int age ; // 年龄是一个整数,所以使用int
public void tell(){ // 定义一个方法
System.out.println("姓名:" + name + ",年龄:" + age) ;
}
}
public class ClassDemo {
public static void main(String args[]){
Person per = new Person() ;
per.name = "张三" ;
per.age = 99999 ;
per.tell() ;
}
}
此时,程序编译之后出现了以下的错误信息:
ClassDemo.java:11: name has private access in Person
per.name = "张三" ;
^
ClassDemo.java:12: age has private access in Person
per.age = 99999 ;
^
2 errors
由于name和age两个属性被private声明了(封装了,私有)所以,现在根本无法被外部所访问,很明显,此时的属性绝对安全,但是封装归封装了,一个问题就出现了,现在的属性无法操作了,无法操作就没有意义了,所以此时,就可以给出一个概念,以后凡是类中的属性在定义的时候必须封装,封装之后的属性一定要通过setter、getter方法设置和取得。Setter和getter方法本身有自己的命名规范。
• 例如:private String name ;
• setter:public void setName(String na)
• getter:public String getName()
class Person { // 类名称的单词首字母必须大写
private String name ; // 姓名,是一个字符串所以使用String
private int age ; // 年龄是一个整数,所以使用int
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 ClassDemo {
public static void main(String args[]){
Person per = new Person() ;
per.setName("张三") ;
per.setAge(99999) ;
per.tell() ;
}
}
此时,虽然是通过setter和getter方法间接的访问了私有属性,但是却没有检验,一旦需要检验,则检验的操作应该放在setter语句之中。
所有的设置应该在setter中完成,而getter方法只是将内容简单的返回即可。
class Person { // 类名称的单词首字母必须大写
private String name ; // 姓名,是一个字符串所以使用String
private int age ; // 年龄是一个整数,所以使用int
public void setName(String n){
name = n ;
}
public void setAge(int a){
if(a0 a200){
age = a ;
}
}
public String getName(){
return name ;
}
public int getAge(){
return age ;
}
public void tell(){ // 定义一个方法
System.out.println("姓名:" + name + ",年龄:" + age) ;
}
}
public class ClassDemo {
public static void main(String args[]){
Person per = new Person() ;
per.setName("张三") ;
per.setAge(99) ;
per.tell() ;
}
}
此时,就通过封装性解决了设置错误内容的问题。
一定要注意的是,封装性出了在属性声明上外,也可以在方法上声明。
private void info(){ // 私有方法
System.out.println("*************************") ;
}
public void tell(){ // 定义一个方法
this.info() ;
System.out.println("姓名:" + name + ",年龄:" + age) ;
}
如果现在调用的是本类中的方法,可以通过“this.方法()”的形式访问。
这个是MLDN李兴华老师将封装性的时候介绍的,你可以看下
一、提升对java技术的思考
很多人口里嚷着要提升java技术,行动也有,但就是不奏效,是怎么回事呢?因为行动前没有好好的思考,比如老是盯着已经掌握熟练的java技术练习,你为什么不考虑多练练你不熟习的java技术呢?那么应该思考些什么关于java技术的问题呢?
1、这个技术能解决什么问题(why)
2、比较适合在哪些场景应用(where+when)
3、这个技术跟我已经掌握的哪个知识或技能类似,有什么差别、有什么特点、有什么优点和缺点(what)
4、了解前面的问题后,你在开始考虑提升java技术那么效果会比较好。
二、善于模仿,把他人的变成你的
你的代码刚开始是怎么学会的呢?不外乎模仿,但是模仿也有诀窍,有的人模仿的快,有的人模仿的慢。时常强调,多去看看其他人的代码是怎么编写的,你可以从其他人的代码中模仿出很多的东西,甚至你可以尝试去修改其他人的代码,让它跟你的想法更加接近,看看你下次是不是可以这样做,看看学习效率有没有提高或者变得简单,长此以往,你的java技术一定会有质的提升。
java类的封装性就是不能让外面的类随意修改一个类的成员变量
基本类型只能按值传递,而每个基本类型对应的封装类是按引用传递的。
从性能上说java中的基本类型是在堆栈上创建的,而所有的对象类型都是在堆上创建的,(对象的引用在堆栈上创建)
比如Integer i=new Integer(10); 其中new Integer()是在堆上创建的,而他的引用Integer i是在堆栈上。封装类的出现,是为了更方便的使用一些基本类型不具备的方法