黑马程序员_JAVA面向对象

---------------------------   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/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值