对于事物的描述通常只关注2个方面
一个是属性,一个是行为
只要明确该事物的属性和行为并定义在类中即可
对象 :其实就是该类事物实实在在存在的个体
类与对象之间的关系
类:事物的描述
对象 :该类事物的实例 。在java中通过new来创建的
描述小汽车
分析
1、属性
轮胎数
颜色
2、行为
运行
定义类其实就是在定义类中的成员
成员:
成员变量(定义在类中)-----------属性
成员函数 -----------行为
局部变量 :作用域 : 方法中,语句中
//在计算机中创建一个Car的实例 ;通过new关键字
//c 就是一个类类型的引用变量 ,指向了该类对象
Car c = new Car();
c.num = 5;
c.color = "bule";
c.show();
一旦产生一个对象,该对象一定就具备着该类所具备的内容
对象封装的是一个事物当中所具备的特有数据(与同类对象的区别)
对象封装的是数据,而不是封装对象的属性(属性与数据的区别,数据是对属性的赋值)
成员变量和局部变量的区别
1、成员变量
定义在类中,整个类中都有效
存在于堆内存的对象中
成员变量随着对象的创建而存在,随着对象的消失而消失
都有默认初始化值
2、局部变量
定义在函数、语句、局部代码块中,只在所属的区域有效
存在于栈内存的方法中
随着所属区域的执行而存在,随着所属区域的结束而释放
没有初始化值,必须要赋值
误区理解 :
成员变量 num :是说汽车这类事物,应该具备num的这个属性
而c.num 是对该类的一个对象(实例) 对对象自身的num属性进行赋值
是对 对象中的属性进行赋值
成员变量和局部变量同名:
自己所属的区域(栈)有,就不用出去找(堆)
对成员变量赋值就是显示初始化
数据类型 变量名
C : 类类型变量肯定指向的是对象,不然就为null
Public static void show(Car c) 类类型变量只能接收的是对象(实例)
{
}
匿名对象
new Car( ).run( );
1、当对象对方法仅进行一次调用的时候,就可以简化为匿名对象
2、匿名对象可以作为实际参数进行传递 show(new Car( ) );
肯定会有一个类类型的引用变量来接收这个匿名对象
public static void show( Car c )
封装
封装 : 是指隐藏对象的属性和实现细节 ,仅对外提供公共的访问方式
好处
1、将变化隔离
2、便于使用
3、提高重用性
4、提高安全性
封装的原则
1、将不需要对外提供的内容都隐藏起来
2、把属性都隐藏,提供公共方法对其访问
一旦有属性 几乎都隐藏 , 对外提供公共的访问方法
对外提供方法的目的是 对属性进行可控
private 私有 :是一个权限修饰符 ,用于修饰成员 ,(修饰不了局部)
私有的内容 只在本类中有效
常用
将成员变量私有化,对外提供对应的set get方法
对方法进行访问。提高对数据访问的安全性
用方法的目的是对数据进行可控(方法体内可以对数据进行判断)
注意 :私有仅仅是封装的一种体现而已
笔记本 、手机 就是一个封装体
java中最小的封装体就是函数
类也是封装体
框架也是封装体
构造函数
特点
1、函数名与类名相同
2、不用定义返回值类型
3、没有具体的返回值
作用
给对象进行初始化
注意
1、默认构造函数的特点
2、多个构造函数是以重载的形式存在的
构造函数在对象一创建的时候就运行了 ,用于给对象进行初始化
构造函数: 构建创造对象的时候就会立刻 调用的函数 ,作用 :是个创建的对象进行初始化
创建的对象都必须要通过构造函数初始化 ,对象不初始化绝对不能用
函数是封装体,相同的函数名及参数列表,就是相同的函数,不关心函数体是否相同
一个类中如果没有定义过构造函数,那么该类中会有一个默认的空参数的构造函数
如果在类定义了指定的构造函数,那么类中的默认构造函数就没有了
构造函数和一般函数的区别
构造函数
对象一旦创建,就会立刻调用与之相对应的构造函数,对 对象进行初始化
对象创建时,会调用,只调用一次
一般函数
对象创建后,需要该函数功能时才调用
对象创建后,可以被调用多次