黑马程序员——Java基础---面向对象(封装、构造函数)(2)

时间:2023-02-11 19:31:54

                 -----------android培训java培训、java学习型技术博客、期待与您交流!------------ 


                                                                   面向对象(封装、构造函数)

一、封装概述: 1、封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方法。 2、好处: 隔离变化 便于使用 提高重用性 提高安全性 3、封装原则: 将不需要对外提供的内容都因此起来。 属性都隐藏起来,提供公共方法对其访问。
4、示例: 关键字:private:私有,权限修饰符,用于修饰类中的成员(成员变量、成员方法); 私有只在本类中有效。
/*
* 将age私有化后,作用范围就是本类,即使外面有类的对象也不能直接访问。
* but,人应该有年龄,就需要在Person类中提供对应访问age的方法。
*/
class Person{
private int age ;//一个变量通常对应两种访问方式,一个是获取get,一个是设置set

public void setAge(int age){
if(age>0&&age<130){
this .age =age;
}
}
public int getAge(){
return age ;
}

void speak(){
System. out .println("age=" +age );
}
}
public class PersonDemo {

public static void main(String[] args) {
Person p= new Person();
//p.age=-20;//与现实生活相违背。因为:直接访问属性,容易出现安全隐
//--->使用private修饰属性,将属性隐藏起来--->对外提供公共访问方法
p.setAge(20);
p.speak();

}

}
黑马程序员——Java基础---面向对象(封装、构造函数)(2)图     06-1
黑马程序员——Java基础---面向对象(封装、构造函数)(2) ******封装不是私有,私有仅仅是封装的一种表现形式
*****之所以对外提供公共访问方式,是因为可以在访问方式中加入逻辑判断等语句。       对访问的数据进行操作,以提高代码的健壮性。
注意:成员变量都有默认值:都能参与运算,因为其在堆内存中。而局部变量不初始化不能参与运算,因为其在栈内存中,有初始化值才能参与运算。

二、构造函数 1、特点: 1)函数名和类名相同 2)不用定义返回值类型 3)不可以写return语句 2、作用: 给对象进行初始化             对象一建立,就会调用与之对应的构造函数。 3、注意: 1)默认构造函数的特点 2)多个构造函数是以重载的形式存在。
4、重载:函数名相同,参数列表不同

定义不同的构造函数对不同的对象进行初始化,(有些对象初始化时的属性是不同的)

没有与之对应的初始化方式(即:构造函数),这个对象是不可能建立的。


5、什么时候定义构造函数?

当分析事物时,发现该事物具备一些特性或行为时,那么,将这些内容定义在构造函数中。

黑马程序员——Java基础---面向对象(封装、构造函数)(2)黑马程序员——Java基础---面向对象(封装、构造函数)(2)

黑马程序员——Java基础---面向对象(封装、构造函数)(2)

黑马程序员——Java基础---面向对象(封装、构造函数)(2)


三、构造代码块
定义不同对象共性初始化内容,
构造代码块:
     作用:给对象初始化。对象一建立就运行,而且优先于构造函数。
     和构造函数的区别:     构造代码块是给所有对象进行统一初始化,而构造函数是给对应的对象进行初始化。
     构造代码块中定义的是不同对象共性的内容。 黑马程序员——Java基础---面向对象(封装、构造函数)(2)


四、关键字:this
1、构造函数可以私有化,即加上private,但是私有化的构造函数不能被对象调用初始化。当类中所有的构造函数都是私有的,就不可能建立对象。

一个类中,成员相互调用都是对象完成的。

2、this的应用 凡是本类功能内部用到本类对象,都用this. 黑马程序员——Java基础---面向对象(封装、构造函数)(2) 黑马程序员——Java基础---面向对象(封装、构造函数)(2)黑马程序员——Java基础---面向对象(封装、构造函数)(2)黑马程序员——Java基础---面向对象(封装、构造函数)(2)黑马程序员——Java基础---面向对象(封装、构造函数)(2)黑马程序员——Java基础---面向对象(封装、构造函数)(2)黑马程序员——Java基础---面向对象(封装、构造函数)(2)


黑马程序员——Java基础---面向对象(封装、构造函数)(2)黑马程序员——Java基础---面向对象(封装、构造函数)(2) 3、构造函数间调用
初始化动作里 还有初始化,要把它先执行。 黑马程序员——Java基础---面向对象(封装、构造函数)(2) this语句用于构造函数之间的相互调用。  this语句只能定义在构造函数的第一行,因为初始化要先执行。 黑马程序员——Java基础---面向对象(封装、构造函数)(2)