------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
一 面向对象的三个基本特征
1 封装:隐藏对象的属性和方法的实现细节,仅仅对外提供公共访问方法。
封装的原则:1 将不需要对外提供的方法或属性隐藏起来。private关键字
2 所有类属性都设为私有,但对外提供访问方法。
2 继承
3 多态
二 局部变量和成员变量之间的区别
1 位置区别
局部变量位于栈中。
成员变量依附于对象存在,存在于堆中。
2 初始化
局部变量无默认初始值,当定义一个局部变量时,必须赋予初始值才能直接参与运算。
如: int a;//
a = a+2;//报错
成员变量具有默认初始值,能直接参与运算。个类型默认初始值如下:
byte、short、int :0
long :0L
float :0.0f
double :0.0d
char :空字符(即:/u0000)
boolean :false
引用类型 :null
3 生命周期局部变量:定义局部变量的所在的最小“{ }”执行结束时局部变量从栈中消失。
成员变量:成员变量依附于对象的存在,当对象消失时,成员变量消失。(JVM的垃圾管理机制进行回收)
三 构造函数和构造代码块
构造函数:
1 定义:必须和类名相同,可重载,可私有(但一个类至少得对外提供一个共有的构造函数)。
2 调用:当使用new 关键字创建一个对象时调用。
3 作用:完成对对象的初始化。
构造代码块:{........}
1 调用:当一个对象被创建时被调用,但优先级高于构造函数。初始化块不接受任何参数,因此一个类的初始化块对该类的所有对象执行同样的操作。
2 作用:用来初始该类不同对象的共同属性 。
-
使用场景:如果有一段初始化处理代码对所有的对象完全相同,且无需接受任何参数,就可以把这段初始化处理代码提取到初始化块中。
-
使用好处:通过把多个构造器中的相同代码提取到初始化块中定义,能更好地提高初始化代码的复用。
例如:
Class Person
{
private String name;
private String country;
public Person(String name)
{
this.name = name;
this.country = "CN";
}
public Person()
{
this.country = "CN";
}
{
this.country = "CN";
}
}
可 将红色出的初始化移到初始化块中进行,提高代码执行效率。
四 this 关键字和static关键字
1 this关键字
1 使用场景:
1 当局部变量和成员变量同名时。使用this关键字区分局部变量和成员变。
如: public setAge(int age)
{
this.age = age;
}
此处的this代表,调用setAge方法分那个对象。
2 this 语句用于不同构造函数之间相互调用。但此时this语句只能在第一句。注意:一般函数不能调用构造函数,因为this语句只能在构造函数内使用。
public Person(int age)
{
this();//只能在第一句
this.age = age;
}
public Person(){
System.out.println("无参 构造函数调用");
}
2 static 关键字
staic 修饰的成员存储位置:不在堆中,在共享区(方法区)中。
static成员的特点
1 随着类的加载而加载,也就是说:随着类的消失而消失,生命周期最长。
2 优先于对象存在。
3 被所有对象共享
4 可直接被类名调用。
注意事项:
1 静态方法只能访问静态成员。
非静态方法既可以访问静态,也可访问非静态。(静态先于存在,对象存在时静态成员已经在内存中了)
2 静态方法中不可以使用this,super关键字。
因为静态方法先于对象存在。
3 主函数是静态的。
静态的利弊
利:对对象的共享数据就行单独空间存储,节省内存空间,没有必要每个对象都存储一份。
敝:生命周期过长。长期占据内存。
访问局限性(今天方法只能访问静态成员)
五 关于主函数
public static void main(String[] args)
主函数是一个特殊函数,是程序的入口。
public:具有最大的访问权限,
static:随着类的加载而加载,不依附于具体对象。
void:无返回值。
main:不是关键词,但是特殊的单词,能被JVM识别。
main ()函数可以被重载,但只有参数为(String[] agrs)的main函数才能被JVM识别。
参数:
当java 虚拟机调用mian函数时:传入参数为 new String[0];