一.封装的简单理解
将类的某些信息隐藏在类的内部,不允许外部程序直接访问,并通过该类提供的方法来实现对隐藏信息的操作和访问。(简单的说就是隐藏对象的信息,留出访问的接口)。
特点:1.只能通过规定的方法访问数据;2.隐藏类的实例细节,方便修改和实现。
二.封装的代码实现
![e38f41c1dbdc96206c2f69249c8ec8db.png](https://i-blog.csdnimg.cn/blog_migrate/31eff41c6dabe321e42f18cc83d7f857.jpeg)
注:只有getxxx的属性是只读属性,只有setxxx的属性是只写属性
例:
![4dd2fe22a58920c800f9ec4248eacc11.gif](https://i-blog.csdnimg.cn/blog_migrate/8b0a7cf8fb3b8b6fb5f3925520cb83f6.gif)
View Code
![4dd2fe22a58920c800f9ec4248eacc11.gif](https://i-blog.csdnimg.cn/blog_migrate/8b0a7cf8fb3b8b6fb5f3925520cb83f6.gif)
View Code
注:Python中使用(__属性定义私有属性【规范】,可以自己实现方法封装,@property属性处理)
三.使用包进行类管理
Java同一个包下不允许存在同名类(域名倒序+模块+功能)(如com.swpu.chains),域名全部小写,必须放在Java源文件的第一行,建议每个包内存储信息功能单一,一个源文件中只能有一个定义包的语句。
![38e8b62b130f34e37469aa22e2e539c9.png](https://i-blog.csdnimg.cn/blog_migrate/2b234b950ff17949afa624c4479bed57.png)
注:建议采用“import 包名.类名”的方式加载,提高效率;
加载类的顺序跟import导入语句的位置无关【如果有两个包中有同名的类都导入(import com.animals.Cat;import com.animals2.*会优先调用更详细的包路径,与导入的先后位置无关)】;
“import 包名.*”只能访问指定包名下的类,无法访问子包下的类
Java常用系统包:
![87140240d4795c404620e986b54dd2e7.png](https://i-blog.csdnimg.cn/blog_migrate/94d1d4a3fb49943f38db9b2c890bdd9d.jpeg)
四.static关键字
1.static
static修饰的成员:静态成员,类成员,无论实例化多少个实例对象,都共享同一块内存空间(和Python的类变量,类方法一致),类对象共享,类加载时产生,销毁时释放,生命周期长。【既可以使用对象名访问,也可以使用类名访问{推荐类名}】
static+属性-》静态属性,类属性;static+方法-》类方法,静态方法【没有静态类(static+类),也没有(static+方法中的局部变量】
注:
在成员方法中可以直接访问呢静态成员;
静态方法中不能直接访问同一个类中的非静态成员【只能通过对象实例化后,对象.成员的方式访问】,只能直接访问同一个类中的静态成员。
2.代码块:(每一个都是一个作用空间)
注:同一作用范围不可以定义两个同名的变量,但在不同的代码块中用多个{}相当于多个作用空间,就可以定义相同的变量,作用周期仅仅限制于自己的作用空间。
![a6b335decf22ab8f9d5576d981fbdce6.png](https://i-blog.csdnimg.cn/blog_migrate/7f64d8086d3647e1c8826c4f1c564f58.png)
![493ef96229b91c96712ff88a47bd55ac.png](https://i-blog.csdnimg.cn/blog_migrate/edd19fae1ed9cf18cd472b30c4b2c71d.png)
最外层的{}作用区域包含了代码块1和代码块2
普通代码块(在方法中的{}):
可以有多个,顺序执行,先出现先执行
![67f8e3a52cc83a1d187e4d1fe6d88f2c.png](https://i-blog.csdnimg.cn/blog_migrate/33c7a2e31109788bade55ebd39f352b9.png)
![4dd2fe22a58920c800f9ec4248eacc11.gif](https://i-blog.csdnimg.cn/blog_migrate/8b0a7cf8fb3b8b6fb5f3925520cb83f6.gif)
View Code
构造代码块:(类中{})
创建对象时调用,优先于构造方法执行(可以有多个,顺序执行),实例化一个对象就执行一次,可以对成员属性,静态属性赋值。
静态代码块(也是类中static{}):
类加载时调用,优先于构造代码块执行(可以有多个,顺序执行),无论实例化多少个对象,它都只执行一次,在同一个类中只能直接给静态成员赋值(若要给成员属性赋值,需要实例化对象然后赋值)
![2c2b7323e44fadc14094924a9e713996.png](https://i-blog.csdnimg.cn/blog_migrate/6b2399074655c92d9659cdf7d322ac1e.png)
五.Java封装综合实例
1.学生类:
![4dd2fe22a58920c800f9ec4248eacc11.gif](https://i-blog.csdnimg.cn/blog_migrate/8b0a7cf8fb3b8b6fb5f3925520cb83f6.gif)
View Code
2.专业类:
![4dd2fe22a58920c800f9ec4248eacc11.gif](https://i-blog.csdnimg.cn/blog_migrate/8b0a7cf8fb3b8b6fb5f3925520cb83f6.gif)
View Code
3.测试类:
![4dd2fe22a58920c800f9ec4248eacc11.gif](https://i-blog.csdnimg.cn/blog_migrate/8b0a7cf8fb3b8b6fb5f3925520cb83f6.gif)
View Code
![7571fa42980961e99d91f5312b4979b1.png](https://i-blog.csdnimg.cn/blog_migrate/69802b48d1d9dbe86a1ac3c1c7377cf6.png)