------- android培训、java培训、期待与您交流! ----------
面向对象
1.面向对象是相对于面向过程而言的。
(1)面向过程强调过程,执行者。(2)面向过程强调过程,指挥者。我让你帮我买烟,就是面向对象。我自己去买烟就是面向过程。(3)面向对象的特点:a.封装b.继承c.多态
2.类和对象:(1)类是对现实世界的描述。(2)对象是现实中存在的个体。
3.成员变量和局部变量(1)作用范围:局部变量在方法内,成员变量在类中。(2)存储空间:局部变量在栈中,成员变量在堆中。(3)初始化值:局部变量人工初始化赋值,成员变量jvm默认初始化。
4.匿名对象的使用(1)对对象中的功能只执行一次的时候使用,否则用有名字对象。(2)勇于作为实际参数进行传递。
5.封装:把属性隐藏仅对外提供公共的访问方法。(1)好处:便于重复使用,安全性高。
6.private:
(1)可以早方法中对成员变量的访问进行控制。私有只是封装的一种体现形式。
(2)常用方法:void setAge(int a){}int getAge(){}
class Demo{
int age;//把属性私有对外提供公共的访问方法,可控性提高了
public void setAge(int age){//age = -20;
if(age>=0 && age<=200){
this.age = age;
}
else {
System.out.println("请回火星");
}
} public int getAge(){
return age;
}
}
class DemoTest{
public static void main(String[] args) {
Demo d = new Demo();
d.setAge(-20);
System.out.println(d.getAge());
}
}
7.构造函数特点:(1)方法名必须与类名相同(2)构造函数没有返回值也不能定义为void,方法名前不声明方法类型(3)构造方法不能有编程人员调用而是由系统调用(4)一个类可以定义多个构造方法(5)若没定义构造函数系统会给一个默认的无参构造函数(6)给对象初始化,一建立对象系统就会自行调用
8.class Person{
int age;
String name;
Person(){}
Person(int age,String name) {//age = 20,name = "zhangsan";
this.age = age;
this.name = name;
}
public void speak(){
System.out.println(age + "....." + name);
}
}
class Demo{
public static void main(String[] args) {
//Person p = new Person(20,"zhangsan");
Person p = new Person();
p.speak();
}
}
9.this关键字:哪个对象调用this所在的函数this就代表了那个对象。作用:(1)函数参数或者函数中的局部变量和成员变量同名的情况,用this.成员变量名来引用成员变量。(2)在函数中需要引用该函数所属类的当前对象时候直接用this(3)this(参数列表)在一个构造函数中调用另一个构造函数用这种this语句(只可放在构造函数第一行)。
Person(String name){
this.name = name;
}
Person(String name,int age){
this("张三");//是找带一个字符串类型参数的构造方法
this.name = name;
this.age = age;
//this("zhangsan");
}
Person p = new Person("lisi",20);
10.代码块:(1)局部代码块定义在方法里,可以控制变量的生命周期(2)构造代码块定义在类里,每创建一次对象就执行一次(3)静态代码块给类进行初始化,只在第一次new执行一次。Person p =new Person的过程中在内存做了什么:a.将Person.class加载进内存b.p定义函数中,在栈内存中开辟了变量空间pc.在堆内存中分配空间并分配内存地址值,d.给对象中的属性进行默认初始化额e.给对象中的值进行显示初始化f.调用构造代码块对对象进行初始化g.调用构造函数进行初始化h.将对象的内存地址值赋值给p变量,让p变量指向该对象。
11.static静态用于修饰成员变量,成员被静态修饰后可以直接用:类名.静态成员调用。静态特点:随类的加载而加载,生命周期长。优先于对象存在。被所有对象共享。静态变量都被存储在方法区。实例变量是非静态成员变量,类变量是静态变量。类变量随类的加载存在于方法区,实例变量随对象的建立存在于堆中。类变量所属于整个类,被所有对象共享,实例变量是对象的特有数据。要注意:1)静态方法只可以访问静态成员,非静态方法既可以访问静态页可以访问非静态。2)静态方法中不可以定义this super关键字因为静态优先于对象存在,所以静态方法中不可以出现this。静态的利弊:对对象的共享数据提供单独的存储空间,不用每个对象都存一份节约内存,可以类名.直接调用。生命周期过长,静态虽好,只可访问静态。什么时候可以使用静态:成员变量所存储的数据每个变量否拥有这个数据,没必要存储到对象中,让所有对象共享该数据即可,用static修饰。什么时候定义静态函数:当成员函数没有访问对象的特有数据是,就将该方法定义成静态的,该方法没有访问到静态的特有数据,直接类名.调用即可。
12.单利设计模式:饿汉式:1)私有构造函数2)创建一个本类对象3)定义一个公共的访问方式: class Single {
private Single() {}
private static Single s = new Single ();
public static Single getInstance(int num) {
return s;
}
懒汉式:1)私有构造函数2)声明一个本类引用3)定义一个公共的访问方式
class Single {
private Single() {}
private static Single s;
public static Single getInstamce (int num) {
if (s==null) {
s = new Single();
}
return s;
}
}