3.2 构造器、this、包机制、访问修饰符、封装-编程思维

构造器

构造器:在实例化的一个对象的时候会给对象赋予初始值,因此我们可以通过修改构造器,来改变对象的初始值,构造器是完成对象的初始化,并不是创建对象

我们也可以创建多个构造器实现不同的初始化,即构造器的重载

默认初始化:

  • 数字: 整形是0 浮点型是0.0
  • char:u0000
  • boolean:false
  • 引用: null

一个类即使什么也不写,它的class文件也会自带一个构造方法,这个方法也叫构造器;当然我们也可以直接在java文件里写一个构造器

构造器的规则:

  • 方法的名字必须和类名相同
  • 不能有返回值 也不能写void

构造器的作用:

  • 使用new的时候必须要有构造器,本质是在调用构造器
  • 构造器一般用来初始化值

默认的无参构造器:(下图为隐式无参构造)

修改后的无参构造器:(下图为显式无参构造)

有参构造:

一旦定义了有参构造,无参构造就必须显式定义,否则new一个无参的对象时会报错

有参构造的使用如下图:

对象创建的流程: (下图出自B站韩顺平教育,韩老师yyds!!)

  1. 加载Person类信息(Person.class)
  2. 在堆中分配空间
  3. 完成对象初始化
    1. 默认初始化age=0 name=null
    2. 显示初始化 age=90,name=null
    3. 构造器的初始化 age=20,name=“小倩”
    4. 把对象在堆中的地址返回给 p(p是对象名,也可以是对象的引用)

this

先来一个小实验:

这时候this就很有用了。使用this可以解决构造器中的age、name是局部变量而不是属性的问题

再来一个小实验:

结论:当我们new了很多个对象时,每个对象都有自己的this,this指向堆中的对象本身,简单来说,那个对象调用,this就代表哪个对象

this的注意事项和使用细节:

  • this关键字可以用来访问本来的属性、方法、构造器
  • this用于区分当前类的属性和局部变量
  • 访问同类中其他方法的语法:this.方法名(参数列表);
  • 访问构造器语法:this(参数列表)(参数列表不用写参数类型);注意只能在构造器中使用,且必须是第一条语句(即只能在构造器中访问另外一个构造器)
  • this不能再类定义的外部使用,只能在类定义的方法中使用

包机制

包的本质就是创建文件夹来存放类

一般利用域名倒置作为包名

定义包:package pkg1.pkg.2 必须写在最上面 package是关键字;一个类中最多只有一个package

为了使用某个包的成员,需要在java程序中导入这个包 用import pkg1.pk2 import必须在定义包的下面 如: import com.ohj.* 导入com.ohj这个包下所有的类;

若使用两个包中相同名字的类时,第一个使用的类import导入包,第二个使用的类不能通过import,而是通过直接通过路径加上类来使用
使用哪个类,就导入哪个类,不建议用 *

包命名规范:

  • 包名只能是数字、字母、下划线、小圆点,数字不开头,不能是关键字
  • 一般都是小写
  • 一般写成: com.公司名.项目名.业务模块名

常用的包:

  • java.util.* //util包,系统提供的工具包,工具类
  • java.net.* //网络包,网络开发
  • java.awt.* //做java页面开发的,GUI

访问修饰符

访问修饰符用于控制方法和属性以及类的访问权限,分为4种:

  • public:公开级别,对外公开
  • protected:受保护级别,对子类和同一个包中的类公开
  • default:默认级别,直接没有修饰符号就是default,向同一个包中的类公开
  • private:私有级别,只有类本身可以访问,不对外公开,外面需要通过get、set方法来进行使用

方法和属性的修饰符能用上面的四种,但是类的只能用public和默认


封装

封装的好处:

  • 隐藏实现细节
  • 可以对数据进行验证,保证安全合理

封装也就是避免直接访问对象中数据的实际表示,通过操作接口来访问

封装大多数是对于属性来进行操作的,也就是属性私有,关键字private;通过封装可以让别的类无法使用自己的私有属性。

通过在设置属性的时候在前面加上private关键字 让属性变得私有。

private与public 是对立的

既然属性已经私有了,那么别的类想用这个属性的时候,必须在属性所在的类里提供一些可以操作这个属性的方法,也就是get和set

get:可以获得这个属性 get的时候也有驼峰命名法,规则就是get+大写属性的一个字母

set:可以给这个属性设置值 set的时候也有驼峰命名法,规则就是set+大写属性的一个字母 set方法是void类型,且必须要有个参数
若定义了有参构造器,有参构造器避开了set方法,避开了数据的验证,那么我们可以在有参构造器中调用set方法,这样数据就不会通过构造器规避了数据验证

我们可以通过在set方法里设置一些判断,来规避掉不合理的值

操作如下图:

封装可以提高程序的安全性,保护数据;可以隐藏代码的实现细节;统一了接口也就只用get、set

版权声明:本文版权归作者所有,遵循 CC 4.0 BY-SA 许可协议, 转载请注明原文链接
https://www.cnblogs.com/Hipopaaaaa/p/16334531.html