黑马程序员-Java的面向对象(对象、类和封装)

本文详细介绍了Java面向对象的基础概念,包括对象的定义方法、面向对象的三大特性:封装、继承和多态,以及构造函数、代码块、this关键字、static关键字等内容。

                                                     -----------android培训、java培训、java学习型技术博客、期待与您交流!------------

                                                                                        Java的面向对象要点总结1

1、对象:名词提炼法。
人开门

{
 开门(门)
 {
  门.开();
 }
}


{
 开(){操作门轴等。}
}

2、面向对象的三个特征:封装、继承和多态

   开发:找对象;抽象出类、建立对象;使用对象;维护对象之间的关系。

   类类型变量:指向对象的引用变量。

3、成员变量和局部变量
   (1)作用范围:成员变量作用域整个类中,而局部变量作用于方法
   或者语句中;
   (2)在内存中的位置:成员变量保存在堆中的对象中,都有其默认
   的值,而局部变量保存在栈中,没有默认的的值。

4、匿名对象
   (1)调用完匿名对象,对象就成为垃圾;
   (2)调用匿名对象的属性没有意义,所以对一个对象进行多个成员
        调用时起个名字;当只调用对象方法时,可以用匿名对象来简
 化调用。
   (3)利用匿名对象的值传递方式,可以将匿名对象作为实际的参数
        来进行传递。
 注:如果方法在栈中实行完,这个匿名对象就会在堆中成为
 垃圾。
   (4)方法都是被调用在栈中执行的,包括main()方法。
   注:缓存技术时:强引用和弱引用、软引用和虚引用;通过java
   提供的类进行转变。

5、封装:
  (1)类->包->框架
   类:通过权限修饰符实现;
   包:通过文件路径;
   框架:通过jar压缩实现。
   注:通过对外提供访问方式,就可以在访问方式中加入逻辑判断语句,
   对访问数据进行操作,提高代码的健壮性。
  (2)把属性都隐藏,提供公共方法对其访问。

6、构造函数:初始化对象
   (1)函数名与类名相同,不用定义返回值类型和不可以写
        return语句;
   (2)对象一建立,就会调用与之对应的构造函数;
   (3)当一个类中没有定义构造函数时,编译器会默认给该类加入
       一个空参数的构造函数;当类中自定义了构造函数,默认
       的构造函数就不会添加了。
   (4)运行上构造函数与一般函数不同:对象一建立就运行,给
       对象初始化,只调用一次;而一般函数是对象调用才执行,
       给对象添加功能。
   (5)当分析事物时,该事物具备一些特征,那么就将这些内容
        定义在构造函数中。

7、代码块:{}
   (1)构造代码块:给对象进行初始化,对象一建立就运行,而且
        优先于构造函数执行;
 它是给所有的对象进行统一初始化,而构造函数是给对应的
 对象初始化;
 构造代码块中定义的是不同对象共性的初始化内容,先于构
 造函数执行;
   (2)static静态代码块;静态代码块只执行一次,有main的类先于
        main()函数执行;其他的类随类的第一个对象实例而先执行;
   (3)普通代码块:在方法或语句中出现的{}就称为普通代码块。
        普通代码块和一般的语句执行顺序由他们在代码中出现的
 次序决定--“先出现先执行”;
 静态代码块中不能访问非静态成员变量和方法。


    注:执行顺序:(优先级从高到低。)静态代码块>mian方法>构造代码块>构造方法。
        其中静态代码块只执行一次,构造代码块在每次创建对象是都会执行。

8、this关键字:代表当前对象的引用
   (1)this代表它所在函数所属对象的引用(简单说,就是哪个对象
        在调用this所在的函数,this就代表哪个对象);
   (2)类中的方法中调用它的属性和它别的方法的时候,省略了
        this.;
   (3)当定义类中方法时,该方法内部要用到调用该方法的对象
        时,这时用this.来表示这个对象。例如,该类自己的两个
 对象作比较时。
   (4)this()在构造函数中的应用:用于构造函数之间互相调用;
        但是一个构造函数内部不能同时用this调用2个及以上的
 构造函数。
 而且必须放在构造函数的第一行。
 两个构造函数之间不能利用this互相嵌套调用。

9、static关键字:
   static修饰符:
   (1)方便在没有创建对象的情况下来进行调用(方法/变量);
   (2)是一个修饰符,用于修饰成员变量,在对象之间共享值时
        (注:修饰的成员变量在内存中只存在
  一个副本,在运行时的方法区(共享区或者数据区)内)
  也叫静态成员变量或者类变量,而其他的成员变量叫
  实例变量。
   (3)修饰类的方法,可以被类直接调用;
   (4)静态代码块;只存在一个副本,在运行时的方法区(共享区或者数据区)内。

   static特点:
   (1)随着类的加载而加载;随着类的消失而消失,也就是说只要
        内存中存在类的对象实例,它就不会消失;
   (2)优先于对象存在
   (3)被所有的对象所共享
   (4)可以被类名直接调用。

   实例变量和类变量区别:
   (1)存放位置:类变量随着类的加载存在于方法区中;
        实例变量随着对象的建立存放于堆内存中;
   (2)生命周期:类变量生命周期最长,随着类的消失而消失;
       生命周期随着对象的消失而消失。

   静态使用的注意事项:
   (1)静态方法中不能用this和super关键字,
        不能直接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员成员方法,反之可以),
 只能访问所属类的静态成员变量和成员方法。
 因为static方法独立于任何实例,因此static方法必须被实现,而不能是抽象的abstract。
   (2)不能用static来修饰局部变量。
   (3)主函数或者入口函数必须是静态的。

   静态的利弊:
   利处:对对象中的共享数据单独存储,节省空间;可以直接被
         类名调用;
   弊端:生命周期过长,访问出现局限性(静态虽好,只能访问
         静态)。

10、main函数
  (1)主函数:是一个特殊的函数,作为程序的入口,可以被jvm调用。
  (2)主函数定义:
       public:代表着该函数访问权限是最大的;
       static:代表主函数随着类的加载就会存在;
       void:主函数没有具体的返回值;
       main:不是关键字的特殊的单词,可以被jvm识别;
       String[] args:函数的参数,是一个字符串数组;jvm在调用主函数时,传入的是new String[0];
       ,其中args原本为arguments,可以写成任何形式。
  (3)主函数是固定格式的:被jvm识别。

  (4)可以在一个类的主函数中通过类的静态调用函数的方法调用另一个类的主函数。

11、静态的使用
    静态变量:当对象中出现成员变量的共享数据时,该成员变量可以被静态所修饰;
    静态方法:当方法内部没有访问到类的非静态数据(对象的特有数据)时,那么
              该方法尅被定义为静态的。
    静态的应用:工具类,类可以直接调用方法。比如:数组和Arrays类。
             
    构造函数私有化:但是该工具类,还是可以被其他类用于建立对象。为了更佳的
       严谨,强制让该类不能建立对象,可以通过将构造函数私有化
       实现。
12、类的编译
    当在一个类中使用另一个类(没有编译)时,jvm会在当前路径下查找该类的.class文件,
    如果找不到,就会查找.java文件,进行编译;如果找不到.java文件,就会报错“找不到符号”。

13、javadoc
   (1)/** 形式注释类、属性和方法;
      */

  (2)javadoc -d xxx -author -version yyy.java 命令生成
       xxx.html文档。

  (3)类必须是public的;只有public的方法才能生成注释。

14、默认构造类额权限
    一个类中默认会有一个空参数的构造函数(如果自己定义了构造函数,那默认的构造函数就没有了),
    这个默认的构造函数的权限和所属类一致。
 
15、类的加载:可以通过static代码块验证
    类  xxx  = null;或者 类  xxx;不会引起类的加载;只有在 new的时候或者执行.class文件时
    才会加载。

16、对象初始化
    a、带有main()的特殊类的执行:
    (1)先加载类的.class文件;
    (2)在方法去中开辟空间,先初始化静态的属性和存放静态代码块和静态类方法;
         然后,再存放非静态方法;
    (4)从方法区拷贝main()方法到栈内,执行main()方法;

    b、类  xxx  =  new 类()初始化
    (0)在栈内初始化xxx;
    (1)因为new用到了类.class,所以加载类.class到内存中
         (在方法去中开辟空间,先初始化静态的属性和存放静态代码块和静态类方法;
         然后,再存放非静态方法);
    (2)执行该类中的static代码块,如果有的话,给该类进行初始化;
    (3)在堆内存中开辟对象空间,分配内存地址;
    (4)在堆内存中建立对象的特有属性,进行默认初始化;
    (5)对对象属性进行显式初始化(即复制给了一个确定值给成员变量),如果没有就不执行;
    (7)对对象进行构造代码块初始化;
    (8)对对象进行对应的构造函数初始化;   
    (4)将对象的内存地址赋值给栈内的xxx;

    c、xxx.方法()的调用
       把xxx.方法()从方法区拷贝到栈内存中,执行语句。
  

   

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值