黑马程序员_四、面向对象(类与对象、构造方法、this关键字、静态)

来源:互联网 发布:梨园 淘宝城 编辑:程序博客网 时间:2024/04/29 03:47

-------android培训、java培训、期待与您交流! -------

 

 

                              四、面向对象(类与对象、构造方法、this关键字、静态)

        这两天的课已经换老师了讲,这个老师的技术很牛,而且思路条理很清晰,上课笔记注释非常详细,非常喜欢这个老师讲课,

不光教我们基础的技术方面的知识,而且经常传授一些以后工作的经验和面试方面得技巧,总体非常不错。话说我们每天都要演讲,

这个真的对我们各个方面都有很大的帮助,我到时候结束后该唱一首什么歌好呢,哈哈跑题了。

----------------------------------------------------------------------------------------------------------------------------------------

一、面向对象:(面试经常提问,最好举实例说明)
               相对于面向过程而言的。
               关注最终的结果。
               面向对象和面向过程都是一种思想。

       面向过程:
               注重操作的每一个步骤和细节。

       思想特点:
               是一种符合人们思考习惯的思想
               可以将复杂的事情简单化
               将程序员从执行者转换成了指挥者

       举例:
               去旅游。
       面向过程:
               签证 -- 机票 -- 去机场 -- 安检 -- 飞机行驶 -- 到目的地 -- 看朋友 -- 旅游
       面向对象:
               找个旅行社

       把大象装进冰箱:
               1、打开冰箱门 2、放进大象 3、 关闭冰箱门

       代码体现:
              面向过程:
            

class Demo{public static void main(String[] args){//System.out.println("打开冰箱门");//System.out.println("放进大象");//System.out.println("关闭冰箱门");open();in();close();}public static void open(){System.out.println("打开冰箱门");}public static void in(){System.out.println("放进大象");}public static void close(){System.out.println("关闭冰箱门");}}

              面向对象:

                     1、把大象装进冰箱。2、打开冰箱门 3、放进大象。4、关闭冰箱门

              提取对象:名词提取法。(UML统一建模语言)

             

class 大象{public static void in(){System.out.println("放进大象");}}class 冰箱{public static void open(){System.out.println("打开冰箱门");}public static void close(){System.out.println("关闭冰箱门");}}class Demo{public static void main(String[] args){冰箱对象.open();大象对象.in();冰箱对象.close();}}

 

二、类与对象

               java语言就是为了描述现实世界中的事物。            

               在Java语言中,最基本的单位是:类
               所以,我们是用类来描述一种事物的。

               事物通过类来体现:

               类:
                    特征 -- 成员变量(属性,字段)
                    行为 -- 成员方法(函数)

               类与对象:
                      类是一类事物的抽象。
                      对象:对象是类的实例,具体的存在的个体。

               在使用类中成员时,必须创建对象使用。

               包含main的类是测试类,不包含的类是描述事物,

               在一个类文件中,可以有多个类。
               文件名称和带main方法的类名称一致。
               如果一个文件中有多个类,文件名称必须和public类名一致。                    类中方法如果不家public会影响导包后使用不了。

        用代码体现:如下       

//这是学生类class Student{//学号String sid;//姓名String name;//年龄int age;//学习public void study(){System.out.println("好好学习,天天向上");}//睡觉public void sleep(){System.out.println("早睡早起");}//吃饭public void eat(String type){System.out.println("我今天想吃:"+type);}public static void main(String[] args){//创建学生类对象//数据类型 变量名 = 初始化值;Student s = new Student();//调用成员方法s.study();s.sleep();s.eat("宫保鸡丁");//在给成员变量赋值前,使用成员变量值,成员变量有默认值。System.out.println(s.sid+"***"+s.name+"***"+s.age);//给成员变量赋值s.sid = "001";s.name = "张三";s.age = 23;//使用赋值后的成员变量System.out.println(s.sid+"***"+s.name+"***"+s.age);}}


         成员变量和局部变量的区别              

                A:访问
                    成员:定义在类中,方法外的变量叫成员变量,在类中都可以被访问到。
                    局部:局部变量定义在方法内部,以及方法的参数,或者语句内的变量。
                               只能在局部中使用。
                B:存储位置
                    成员:成员变量随着对象的创建而存在,存在于堆内存中。随着对象的消失而消失。
                    局部:随着方法被调用,或者语句被执行而存在,随着语句执行完毕,或者方法调用完毕而消失。

                C:初始化值
                    成员:有默认值。(java中用的是nuicode编码表)
                               byte,short,int,long 0
                               float,double 0.0
                               boolean false
                               char '\u0000'
                    局部:没有默认值,要使用,必须声明,赋值,使用。       

         匿名对象:
                没有名字的对象(因为没有变量指向对象,所以执行完,在内存中就被释放)

         应用场景:
                A:方法只用一次
                B:可以作为实际参数传递

         封装:     是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。            

              好处:
                     将变化隔离,便于使用,提高重用性,提高安全性。

              类的成员变量是不能让其他的类直接访问的。

              private关键字:
                     是一个权限修饰符。
                     用于修饰成员(成员变量和成员方法)
                     被私有化的成员只在本类中有效。

              私有的成员变量,都会配对的出现getXxx()/setXxx(int xxx)方法

         代码体现:      

class Student{private String name;private int age;public void setName(String n){name = n;}public String getName(){reutrn name;}public void setAge(int a){age = a;}public int getAge(){return age;}}

         构造方法:
                A:用途
                    用于对象的创建并进行对象的初始化。
                B:特点
                    a:构造方法名与类名相同
                    b:没有具体的返回值类型
                    c:没有返回值
                C:注意事项
                    a:如果你没有给出构造方法,系统会默认给出一个无参构造
                    b:如果你给出了构造方法,系统将不再给出默认构造。
                       这个时候,要么给出无参构造,要么你不使用无参构造。

                D:构造方法还可以给成员变量赋值
         this关键字
                A:代表当前对象的一个引用,谁调用方法,在该方法内部的this就代表谁。
                B:this的使用场景
                    a:局部变量隐藏成员变量
                    b:构造方法调用其他构造方法(不推荐)
                    注意:必须作为第一条语句存在。
                    格式:this(参数)

三、静态          

         static
               (1)static 静态的意思,可以修饰成员变量,也可以修饰成员方法。
               (2)静态修饰的成员和非静态修饰的成员的区别
                    A:加载顺序和消失
                        静态的内容是随着类的加载而加载,随着类的消失而消失。生命周期长。
                        非静态的成员随着对象的创建而存在,随着对象的消失而消失。
                    B:存储位置不同
                        静态的内容是存储在方法区的静态区。
                        非静态的成员是存储在堆内存。
                    C:调用不同
                        静态的内容可以直接被类名调用,也可以被对象调用。
                        非静态的成必须通过对象调用。
                    D:理解不同
                        静态内容修饰的成员一般是所有对象的共享数据
                        非静态成员是每个对象特有的数据。
               (3)静态和非静态的调用
                    A:非静态的方法调用
                        a:非静态的成员变量
                        b:静态的成员变量
                        c:非静态的方法
                        d:静态的方法
                    B:静态的方法调用
                        a:静态的成员变量
                        b:静态的方法

                    注意:静态只能访问静态。
                    在静态方法内部不能有this关键字。
               (4)什么时候使用静态:
                    A:工具类的时候,一般使用静态。(Math)
                    B:当数据是被所有对象共享的时候,用静态修饰。

         代码块:
               (1)由{}括起来的代码。
               (2)分类:
                       局部位置:局部代码块
                               让变量的生命周期缩短,提高程序的效率。
                       成员位置:构造代码块
                               在每个构造方法执行的时候,都会执行。
               (3)静态代码块
                   把构造代码块用static修饰。
                   特点:静态代码块只执行一次。

                   执行顺序:
                   静态代码块 -- 构造代码块 -- 构造方法

         Person p = new Person()到底在内存中做了哪些事情?
                A:把Person.class加载到内存
                B:在栈内存开辟一个空间给p变量
                C:在堆内存开辟空间给new Person()
                D:采用默认值对成员变量初始化(隐式初始化)
                E:采用显示值对成员变量初始化(显示初始化)
                F:如果有构造代码块,就执行构造代码块的初始化。(方法也会被加载到方法区)
                G:执行构造方法里面的变量初始化。
                H:到此,对象在内存中创建完毕。
                 I:把堆内存的地址值给栈内存的p变量
         java中的数据传递问题
                java中只有值传递:
                       基本类型值
                       地址值
               A:基本类型
                       形参的改变对实参没有影响 
               B:引用类型
                       形参的改变直接影响实参

         main方法解释(面试题)
         public static void main(String[] args)

         public:最大的访问权限。
         static:为了访问被jvm调用main方法。
         void:jvm得到这个值没有意义。
         main:jvm只认识这个名字。不是关键字。
         String[] args:接收参数提供的数组。
 总结:这两天的知识点挺多的,老师也讲的很细,我笔记也做的很详细。

         主要理解面向对象的思想,会举例说明,成员和局部变量的区别。

         能够自己手动画出对象创建的内存图,掌握封装的特性、构造方法和this的用法

         最后就是静态的特点及什么时候使用静态,代码块和静态代码块的执行顺序。

                                                                                   -------android培训、java培训、期待与您交流! -------

           

原创粉丝点击