封装
了解面向对象?
面向对象是一种编程方法,一种编程思想
面向对象的编程方法中,有几个核心特性,也是它的优势体现。
面向对象的三大特性 :封装 继承 多态 (如果面试官提四大特性,再加上一个抽象)
封装的概念
1.什么是封装
封装的定义:
将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过类提供的公开的接口访问。
封装的两个大致原则
把尽可能的东西隐藏起来,对外提供便捷接口,把所有属性藏起来
如何使用封装:
如何实现封装:
1.修改属性的可见性 ,设为private ,防止错误的修改
2.创建公有的getter/setter方法,用于属性读写
3.在getter/setter方法中加入属性控制语句,对属性值的合法性进行判断
封装的实现:
1.把属性私有private 方法设为公开
2.把属性提供一对 setter/getter方法
封装的好处
高内聚、低(松)耦合(功能之间相互独立,没有影响,不会牵一发而动全身)
1.便利于使用者正确使用系统,防止错误 修改属性
2.有助于系统之间的松耦合,提高系统独立性
3.提高软件的可重用性
4.降低了构造大型系统的风险
包的使用和作用
为什么需要包:
1.因为在各个平台系统中,同一个目录下不允许出现同名文件
2.当我们文件(java代码等)越来越多的时候,全放在一起会显得很乱,不易管理和查找。有一定规则的包则可以解决此问题。
3.有助于实时访问权限控制
使用包:
1.包名的命名规则:
1.包名有小写字母组成,不能以圆点开头或结尾
2.采用 反域名命名法(公司域名排序)例如:cn.kgc.XXx
包名之前最好加上唯一的前缀,通常使用组织倒置的网络域名
3.包名后续部分依不同机构内部的规范不同而不同
一般都是四级包,可能有更多升级,根据集体需求来。
cn: 一级包
kgc :二级包 公司的名称
项目的名称:三级包
模块名或者层级名:四级包
例如:com.neteasy.cloudmusic.ui…
2.声明包地址:
导包快捷键 :Ctrl+Shift+O
声明包地址的 它必须在文件中的有效代码第一行
package cn.kgc.包名
导包:如果你要使用的类不在同一个包下,你就需要将它的地址导入过来
导包的语句必须是在类声明上方,包声明的下方
语法:import 类的全名/全路径/全限定名(它也支持通配符 )
java.lang.xxx包下的类,不需要你手动声明,JVM会自动进行加载。
例如:System
3.跨级导包
导包先输入包名和类名进行跨级导包
包使用import可以使用多项
package在类里面有一句或可以没有
如果在同一类中两个不同包名但类名一样时
应在 new对象时附加上包名和类名
【4】访问修饰符的使用
public class的类可以公共访问没有权限
访问权限修饰符
在Eclips中:
private----->红色小正方形 最严格的访问级别,只能在本类中 使用
默认的--------------蓝色三角形 同包之间可以随意访问
protected-------------黄色菱形
public-------绿园点 在整个项目都能使用
访问修饰符:可以用来修饰类、修饰属性、修饰方法
作用:为了隐藏某些细节,或者公开某些内容,控制访问权限
5.static关键字
static可以用来修饰变量:静态变量/类变量
static 可以用来修饰方法:静态方法/类方法
static 也可以修饰代码块:静态代码块
static 修饰的类变量和普通的成员(实例/对象)变量区别:
1.生命周期不同
类变量随着加载而创建
实例变量随着对象产生而创建
2.作用域“不同”
类变量被该类的所有的对象共享,只要有一个对象更改,所有的对象获取的结果都会变化。
实例变量仅仅被自身对象所使用,不同对象之间的实例变量相互独立存在。
3.调用上有所不同
实例变量或实例的方法等必须先通过创建对象 ,然后才能使用
类信息,直接可以用 类名.的形式调用(当然也可以用对象来调用)
注意事项:
如果在多个对象之间,有共享的数据,且这个数据不会发生变动,最好定义为静态常量,可以有效提升效率
static final 修饰…
静态变量它是随着类的加载而加载,它被这个类所有对象共享。
普通成员变量(实例变量)它是随着对象的创建而产生,在不同对象之间,是相互独立的。
2.可以用来修饰方法–>静态方法
静态方法调用:
同一个类中方法之间调用:
A(S)—B:不能直接调用,因为B不是静态方法它是随着对象的调用才产生的
B—A(S):可以创建对象去调用,也可以直接使用
A(S)—B(S):可以直接调用
不同类中的方法之间调用:
(B是一个类 A是另一个类中的方法)
B -> A(S):可以创建对象去调用,也可以直接类名.方法名();
B(S) -> A(S):可以创建对象去调用,也可以直接类名.方法名();
普通方法的调用:
同一个类中方法之间调用: 直接调用。方法名();
不同类之间的方法调用 :它必须创建对象之后才能调用。
可以用来修饰代码块 -> 静态代码块
代码块/构造代码块/成员代码块:每一次创建对象 都会执行。优先于构造方法。
成员变量
静态变量,可以直接通过类名访问
成员方法
静态方法 ,可以直接通过类名访问
代码块
静态代码块,当java虚拟机加载类时,就会执行该代码块
static变量
类的成员变量包括
类变量(静态变量)
1.被static修饰的变量
2.在内存中只有一个拷贝
3.类内部,可以任何方法内直接访问静态变量
4.其他类中,可以直接通过类名访问
实例变量
1.没有被static修饰的变量
2.每创建一个实例,就会为实例变量分配依次内存,实例变量可以在内存中有多个拷贝,互不影响
static 关键字 静态的
1.被static修饰的成员 只能访问同样被static修饰的
2.只要被静态修饰之后,那么可以直接通过类名 (.)点 的方式来访问。
例如: Arrays.toString();Arrays.sort ();在eclipes中 会出现s的图标
3.只要是静态的,它属于类的,随着类的加载而加载,被所有的对象(实例)共享
实例变量 (不被static修饰的):属于对象,不同的对象之间是不同的 ,它是随着对象的创建才出现的。
4.static修饰的会变为斜体。
构造代码块/成员代码块/非静态代码块:每次的对象创建时都会执行一次
静态构造代码块:只有当第一次创建对象的时候才执行。(因为要明白只要当你创建对象的时候,才会开始去加载一个类)
(初识版面试题)构造代码块、静态代码块、实例(对象)变量、构造方法的执行顺序
(升级版面试题)父类和子类中 构造代码块、静态代码块,静态变量,实例变量,构造方法的执行顺序。
Java封装基础了解
最新推荐文章于 2022-08-02 20:38:41 发布