黑马程序员——java基础面向对象基础知识总结

------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];

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值