--------------------------- android培训、java培训、期待与您交流!---------------------------
面向对象的特征:
封装(encapsulation),继承(inheritance) ,多态(polymorphism)
成员变量和局部变量的特点:
成员变量作用于整个类中。在堆内存中,因为对象的存在,才在内存中存在。
局部变量变量作用于函数中,或者语句中。存在栈内存中。
匿名对象:(new 类名().成员)
匿名对象使用方式一:当对对象的方法只调用一次时,可以用匿名对象来完成。
匿名对象使用方式二:可以将匿名对象作为实际参数进行传递,例:( 函数名(new 类名()) )。
如果对一个对象进行多个成员调用,必须给这个对象起个名字。
封装(encapsulation):
封装原则:
将不需要对外提供的内容都隐藏起来, 把属性都隐藏,提供公共方法对其访问。
常用关键字:
private : 私有,权限修饰符:用于修饰类中的成员(成员变量,成员函数)。私有只在本类中有效。当成员变量私有化时,一般对外提供对应的set ,get 方法对其进行访问。提高对数据访问的安全性。
构造函数:
特点:
函数名与类名相同 ,不用定义返回值类型 , 不可以写return语句 。
默认的构造函数的权限和所属类一致。如果类被public修饰,那么默认的构造函数也带public修饰符。如果类没有被public修饰,那么默认的构造函数,也没有public修饰。
作用:
对象一建立就会调用与之对应的构造函数,给对象进行初始化。
注意:
当一个类中没有定义构造函数时,那么系统会默认给该类加入一个空参数的构造函数。当在类中自定义了构造函数后,默认的构造函数就没有了。
构造函数和一般函数的特点:
构造函数是在对象一建立就运行,给对象初始化,一个对象建立,就构造函数只运行一次。
一般方法是对象调用才执行,给是对象添加对象具备的功能,可以被该对象调用多次。
构造代码块:
作用:定义不同对象共性的初始化内容,而且优先于构造函数执行。
构造代码块和构造函数的区别:
构造代码块是给所有对象进行统一初始化,而构造函数是给对应的对象初始化。
当构造函数被private修饰的时候,外界就不能创建对象,一般用于单例模式。
常用关建字:
this :代本类对象的引用。当定义类中功能时,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象。但凡本类功能内部使用了了本类对象,都用this表示。 还可以用于构造函数之间进行互相调用。this语句只能定义在构造函数的第一行。因为初始化要先执行。
static(静态)关键字:
特点:
随着类的加载而加载 ,优先于对象存在 ,被所有对象所共享 ,除了可以被对象调用外,还可以直接被类名调用(类名.静态成员) 。存在于方法区中。
使用注意
静态方法只能访问静态成员 ,因为静态存在时,对象还不存在,所以静态方法中不可以写this,super关键字 。主函数是静态的 。
什么使用静态:
当所有对象都使用相同的数据时,该数据要被静态所修饰。
当功能内部没有访问到非静态数据(对象的特有数据),那么该功能可以定义成静态的。
classpath:
指定虚拟机找.class文件(set classpath=.;D:\myclass),其他中“.”表示当前目录。
静态代码块:
特点:随着类的加载而执行,只执行一次,并优先于主函数,用于给类进行初始化的。
。
小练习:(说明下面程序的运行顺序)
class Person
{
Person(){
System.out.println("空参数初始化");
};
private String name = "tiantiantian";
private int age;
private static String country = "cn";
//静态代码块,随着类加载被执行一次,对类进行初始化。(最先被执行)
static
{
System.out.println("静态代码块");
}
//构造代码块,随着每一对象被加载被执行一次,(第二顺序)
{
System.out.println("默认初始化 age="+age);//age=0,默认初始化,
System.out.println("构造代码块:"+"::"+"显示初始化"+this.name);//name=tiantian显性初始化
}
Person(String name)//相应对象执行相应的构造函数。
{
this.name = name;
System.out.println(name);
}
Person(String name,int age)
{
this(name);
this.age = age;
}
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
public void speak()
{
System.out.println(this.name+"..."+this.age);
}
public static void showCountry()
{
System.out.println("country="+Person.country);
}
}
class PersonDemo
{
public static void main(String[] args)
{
new Person();
System.out.println("----------------------------");
new Person();
System.out.println("----------------------------");
Person per=null;//由于传递的null,类没有被使用到,所以不加载。
System.out.println("----------------------------");
Person p1 = new Person("P1");
System.out.println("----------------------------");
Person p2 = new Person("P2",20);
p2.showCountry();
System.out.println("----------------------------");
}
}
打印结果:
静态代码块
默认初始化 age=0
构造代码块:::显示初始化tiantiantian
空参数初始化
----------------------------
默认初始化 age=0
构造代码块:::显示初始化tiantiantian
空参数初始化
----------------------------
----------------------------
默认初始化 age=0
构造代码块:::显示初始化tiantiantian
P1
----------------------------
默认初始化 age=0
构造代码块:::显示初始化tiantiantian
P2
country=cn
----------------------------
new Person();
该句话都做了什么事情?
1,因为new用到了Person.class.所以会先找到Person.class文件并加载到内存中。
2,执行该类中的static代码块,如果有的话,给Person.class类进行初始化。
3,在堆内存中开辟空间,分配内存地址。
4,在堆内存中建立对象的特有属性。并进行默认初始化。
5,对属性进行显示初始化。
6,对对象进行构造代码块初始化。
7,对对象进行对应的构造函数初始化。
--------------------------- android培训、java培训、期待与您交流!---------------------------
详细请查看: http://edu.csdn.net/heima/