一、权限修饰符:private、缺省的、protected、public
- 本类中可以使用:private、缺省的、protected、public
比如:定义的某个类中,某个变量如name是private的,但是该类中的set/get方法是public的,可以获取这个值并被其他类调用,所以这个private的值其实本质上,是可以被公开的——这合理嘛?好吧,就是这么设置的。 - 本包中(同一个包,不同类):缺省的、protected、public
- 不同包的子类:protected、public
- 不是同一个包,也不是子类:public
⭐封装性:
a.为什么要使用封装性?
当我们创建对象以后,可以通过 ”对象名.属性名“ 的方式对属性进行赋值。这种方式默认只能对内容的类型和范围进行约束。但在实际开发中我们往往还会遇到更多的限制条件,但这些限制条件无法在属性的声明处加以限制。所以我们采用如下方式:
- 使用 private 修饰属性,这样就不能使用 ”对象名.属性名“ 的方式进行赋值了;
- 提供公共的方法(get、set)给属性赋值和获取属性值,这样可以在方法中对赋值的内容加以限制。
b.封装性的体现:
- 狭义上:
私有化属性,同时提供公共的set/get方法; - 广义上:
用四种权限修饰符来修饰:属性、方法、构造器、内部类。(不能修饰代码块。)
注意:类只能使用public和缺省的来修饰。
二、⭐构造器/构造方法(constructor——创建对象必调构造器
a.作用
- 创建对象:即标准语句:Animal animal = new Animal( );
- 对对象进行初始化
b.格式
权限修饰符 类名(形参列表){
执行语句;
}
说明:
- 如果在类中没有显式提供构造器 ,那么系统会默认提供一个空参的构造器;我们创建对象常规时就是调用这个默认空参的构造器。
- 如果在类中自定义了显式构造器,那么系统将不再提供那个默认的空参构造器。
- 构造器可以有多个,彼此之间构成重载。
c.总结
- 创建对象必调构造器;
- 构造器的特点:同一个对象只能调用一次。
- 构造器使用场景:创建对象;给对象进行初始化;在对象中只执行一次的代码放在构造器中。
class Animal{
String name;
int age;
//构造器
public Animal(){
System.out.println("constructor");
}
public void info(){
System.out.println("name=" + name, " age=" + age);
}
}
public class ConstructorTest{
public static void main(String[] args){
//思考:如何调用构造器?——这个默认语句就是用来创建对象的构造器。
Animal animal = new Animal();
}
}
三、⭐JavaBean
a.定义:一种Java语言写成的【可重用组件】
JavaBean就是一个普通的类;但拥有如下特点:
- 类是公共的——public
- 有一个无参的 public 的构造器
- 有属性,且有对应的get/set方法
b.要点:JavaBean的对象用来——存数据——与前端web交互、后端数据库存储。
public calss JavaBean{ //满足条件1
private String name;
private int age;
public JavaBean(){ //满足条件2
}
public JavaBean(String n, int a){
name = n;
age = a;
}
public void setName(String n){ //满足条件3
name = n;
}
public String getName(){
return name;
}
}
public class JavaBeanTest{
public static void main(String[] args){
//思考:如何调用构造器?——这个默认语句就是用来创建对象的构造器。
Animal animal = new Animal();
}
}
四、this关键字
含义:用来表示当前对象。
this可以调用属性、方法、构造器。
当this调用属性时:
- 在构造器和方法中我们可以直接调用属性,往往是默认省略了 this (实际上有,只是我们看不到)。
- 当局部变量和属性名一样时,就必须使用 this.属性名 来进行区分属性和局部变量。
当this调用方法时:
在同一个类中方法可以互相调用,调用时往往省略this;
当this调用构造器时:
构造器之间也可以相互调用!
- 格式:this(形参列表)
- 作用:调用本类中的其他构造器
- 说明:
- this(形参列表)必须在构造器的首行;
- 在同一个构造器中最多只能有一个this(形参列表);
- 如果有 N 个构造器,那么最多只能有 N-1 个 this(形参列表)——不然会形成死循环(彼此调用成圈圈
- 举例:需求:Cat类中有三个不同形参的构造器,要求无论使用哪种构造器,都必须输出“我真好看”
class Cat{
String name;
int age;
//public void setName(String n){ //n指代不明,设置为name最好,但是与类内属性冲突
//思考?这里使用的是局部变量还是属性?——根据就近原则,name是局部变量。
// name = n;
//}
public void setName(String name){
// this.name 表示这个name是属性的name,不是传参的局部变量,所以可以完成对 属性 的赋值。
this.name = name;
//this也是地址值
System.out.println(this); // 这个地址和下面33行输出的那个地址值相同,代表指向同一个对象;
}
//this构造器使用举例:
public Cat(){
System.out.println("我真好看");
}
public Cat(int age){
this(); //相当于调用第19行的构造器。——且这行语句必须在21行这个构造器的首行!!!
}
public Cat(String name, int age){
this();
}
}
public class ThisTest{
public static void main(String[] args){
Cat cat = new Cat();
//cat对象
System.out.println(cat);//输出的是 cat 在java内存中的地址值;
cat.setName("miao");
}
}