三个特征:封装,继承,多态.
类和对象的关系:
类:对现实生活中事物的描述
对象:就是这类事物,实实在在存在个体
定义类:就是描述事物,定义属性和行为.属性和行为共同成为类中的成员(成员变量和成员方法)
成员变量与局部变量:
作用范围:
成员变量作用于整个类中.
局部变量作用于函数中,或语句中.
在内存中的位置:
成员变量在堆内存中,因为对象的存在,才在内存中存在.
局部变量在栈内存中.
匿名对象
new Car().num=5;
new Car().color="green";
new Car().run();
//匿名对象使用方式一:当对对象的方法只调用一次时,可以用匿名对象来完成,这样比较简化.
//如果对一个对象进行对个对象的调用,必须给这个对象起个名字
//匿名对象使用方式二:可以将匿名对象作为实际参数进行传递
封装(Encapsulation):
是指隐藏对象的属性和实现细节,仅对外提供公共访问方式.
好处:
.将变化隔离
.便于使用
.提高重用性
.提高安全性
封装原则:
将不需要对外提供的内容都隐藏起来.
把属性都隐藏,提供公共方法对其访问.
构造函数
1.函数名与类名相同
2.不用定义返回值类型
3.不可以写return语句
作用:
给对象进行初始化.
注意:
1.多个构造函数是以重载的形式存在的.
2.当一个类中没有定义构造函数时,那么系统会默认给该类加入一个空参数的构造函数,方便对象初始化
当在类中定义了构造函数时,系统默认构造函数会消失.
构造函数与一般函数的区别:
1.两者在写法上不同,在运行上也有不同
2.构造函数是对象一建立就运行,给对象初始化.而一般方法是对象调用才执行,是给对象添加对象具备的功能
3.一个对象的建立,构造函数只运行一次,而一般函数可以被该对象多次调用
什么时候定义构造函数呢?
当分析事物时,该事物存在具备一些特性或者行为,那么将这些定义在构造函数中.
/*构造代码块
* 作用:给对象进行初始化
* 对象一建立就运行,而且优先于构造函数执行
* 和构造函数的区别:
* 构造代码块是给所有对象进行统一初始化
* 而构造函数是给对应的对象初始化
*
* 构造代码块中定义的是不同对象的共性内容*/
{
System.out.println("haha");
}
this 的应用:
当定义类中功能时,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象,但凡本类功能内部使用了本类对象,都用this表示
this语句:用于构造函数之间进行互相调用。this语句只能放在构造函数的第一行,因为初始化动作要先执行
静态:static
用法:
是一个修饰符,用于修饰成员(成员变量,成员函数)。
当成员被静态修饰后,就多了一种调用方式,出了可以被对象调用外,还可以直接被类名调用。
格式为:类名.静态成员
特点:
1.随着类加载而加载
*当类被使用时,要进内存,静态就已经存在,静态会随着类的消失而消失,说明生命周期最长
2.优先于对象存在
*静态先存在,对象后存在
3.被所有对象所共享
4.可以直接被类名所调用
实例变量和类变量的区别:
1.存放位置。
类变量随着类的加载而存在于方法区中
实例变量随着对象的建立而存在于堆内存中
2.生命周期
类变量生命周期最长,随着类的消失而消失
实例变量随着对象的消失而消失
静态的使用注意事项:
1.静态方法只能访问静态成员
非静态成员既可以访问静态成员,也可以访问非静态成员
2.静态方法中可以定义this,super关键字
因为静态优先于对象存在。所以静态方法中不可以存在this。
3.主函数是静态的
静态有利有弊
利:对对象的共享数据进行单独空间的存储,节省内存。没有必要每个对象中都存储一份。可以直接被类名调用。
弊:生命周期过长,访问出现局限性(静态只能访问静态)