面向对象
1. 特点:
1)强调的是对象,让我们从执行者变为指挥者;2)是一种更符合人们思考习惯的思想;3)可以将复杂额事情简单化;老师总结:谁拥有数据,谁就对外提供操作这些数据的方法。典型案例:人在黑板上画圆,列车司机紧急刹车。
2. 局部变量和成员变量的区别
1)作用范围:局部变量:方法内;成员变量:类中,对整个类有效;2)存储空间:局部变量:栈内存;成员变量:堆内存;3)初始化值:局部变量:在使用前必须手动给值;成员变量:JVM默认初始化值;
3. 面向对象的特征
封装 (encapsulation)
继承 (inheritance)
多态 (polymorphism)
java中通过new 关键字创建实体,实体就是用来封装具体数据的,如:数组就是,对象也是。
易错题:
class Test {
int num = 10 ;
num = 30;
//程序编译错误,此处为出现错误的位置。原因:对类的描述只能是属性和行为,不能是单独的语句。
public void point(){
int num = 20;
int num = 20;
}
}
4.匿名对象
匿名对象可以调用属性,但是没有意义,调用后匿名对象会变成垃圾。匿名对象可以当做参数传递,其实传递的是地址值;
5.封装
概念:隐藏对象的属性的实现细节,仅对外提供公共访问方式。好处:将变化隔离;便于使用;提高重用性;提高安全性。原则:将不需要对外提供的内容都隐藏起来,把属性都隐藏,提供公共方法对其访问。
1)private关键字
权限修饰符,用于修饰成员(成员变量和成员函数);被初始化的成员只在本类中有效;当成员私有后提高了安全性,但是访问权限降低了,这时可以通过对外提供公有方法的形式对其进行访问。好处:可以在方法中对成员变量的访问进行控制。注意:私有成员仅仅是封装的一种体现形式而已。class Person{ } //在class的前面没有写修饰符,但也是一种修饰符,访问权限比private大。
6. 构造函数
1)特点:
* 方法名必须与类名相同。* 没有返回值类型,也不能定义为void,在方法名前不声明方法类型。* 构造方法不能由编程人员调用,而要系统调用。* 一个类可以定义多个构造方法,也就是构造方法可以重载,以参数个数、类型或排列顺序区分。构造函数细节:如果在定义类时没有定义构造方法,则编译系统会自动插入一个无参数的默认构造器,这个构造器不执行任何代码。作用:主要作用是完成对象的初始化工作,它能够把定义对象时的参数传给对象的域。
2)构造函数与一般函数的区别。
从功能上:构造函数是给对象初始化的;一般函数是因为对象需要满足某种功能而定义的。
从执行上:构造函数在对象创建的时候被执行,不用调用;一般函数什么时候调用就什么时候执行,不调用永远不执行。
7.this 关键字
1)代表当前对象的引用,使用的时候谁调用方法this就代表谁。
2)什么时候使用this?
当局部变量和成员变量重名的时候,可以用this区分;
写功能的时候可能用到this,比如:比较两个对象的年龄 this.compare(p);
构造函数中使用this,调用本类中其他的构造函数,this()必须放在第一行;
由上面总结:this是指向对象身份的一个指针。
8.局部代码块
例如:
public static void main(String[] args){{int x = 10;System.out.println(x);}}作用:限定了变量的生命周期;位置:定义在方法里;
9.构造代码块
class Test{{System.out.println("我是构造代码快"); //构造代码块或者初始化快是对构造函数的补充,优先于构造函数执行。}}注意:如果成员变量进行显示初始化(如:int num = 10;)的源码放在了构造代码块之前,那么显示初始化先执行;如果成员变量显示初始化的源码放在构造代码块之后,那么先执行构造代码块中的代码。其实初始化快是对构造器的补充,初始化块是不能接收任何参数的,定义一些所有对象共有的属性、方法等内容时就可以用初始化快来初始化。好处:可以提高初始化块的复用,提高整个应用的可维护性。
10.static关键字
静态修饰的方法比非静态多一种调用方式,可以类名.调用,如:Person.eat();特点:1)随着类的加载而加载,静态会随着类的消失而消失,说明它的生命周期最长;2)优先于对象存在,明确一点:静态先存在,对象后存在;3)被所有对象共享;4)可以被类名.调用;
11.实例变量(非静态成员变量)和类变量(静态变量)区别
1)存在位置:类变量(静态变量)随着类的加载而存在方法区中;实例变量随着对象的建立而存在于对内存中;2)生命周期:静态变量的生命周期最长,随着类的消失而消失;实例变量的生命周期随着对象的消失而消失;3)所属不同:静态变量也称之为类变量,所属于整个类被整个类共享;实例变量是对象的特有数据,所属于对象;
12. 静态代码块
格式 static { }静态代码块随着类的加载而加载,而且是类一加载只执行一次;静态代码块与构造代码块的异同:1)相同点:都是在JVM加载类时,构造方法之前执行,在类中可以定义多个;2)不同点:静态代码块在非静态代码块之前执行,静态代码块只在第一次new执行一次,之后不再执行;构造代码块在每new一次就执行一次;当一个类中所有方法都是静态的,那么建议私有构造函数,目的不让别的类继承;