黑马程序员————面向对象——学习(一)

来源:互联网 发布:outlook pop服务器端口 编辑:程序博客网 时间:2024/05/19 09:02

一,什么是面向对象(Object Oriented Programming)

    1,是一种思维方式,由面向过程演化而来,从原来的执行者,变为指挥者,在面向对象的程序里。将数据和处理数据的方法紧密地联系在一起,形成类,再将类实例化,就形

         了对象。在面向对象的世界里,不再需要考虑数据结构和功能函数,只要关注对象就可以了。

     2,面向对象的三大特点

          1)封装性:面向对象编程的核心思想之一就是将对象的属性和方法封装起来,是用户知道并使用对象提供的属性和方法即可,而不需要知道对象的具体实现。

                              原则是可以使对象意外的部分不能随意存取对象的内部数据,避免了外部错误对内部数据的影响,实现错误的局部化。

          2)继承性:继承的实体是类,也就是说子类拥有父类的成员。

          3)多态性:又是重要特征,它是指在父类中定义的属性和方法被子类继承后,可以具有不同的数据类型或表现出不同的行为。

      3,类和对象

           1)类:类是基本构成要素,是对象的模版,java程序中所有的对象都是由类创建的。(使用计算机语言来描述现实中的实物)

           2)对象:在java语言中把一切失误都看成对象。

                           定义格式: 类名 变量名=new 类名;new关键字来实例化对象。

                           使用对象的格式:对象.成员变量,对象.成员方法()。

       4,成员变量和局部变量

            1)成员变量:是定义在类中的变量。

                                    成员变量跟随对象的创建而储存在堆中。

                                    成员变量储存在堆中生命在周期比较长。

                                   作用范围在整个类中。

                                   在堆中储存有默认值。

            2)成员变量:是定义在方法,和语句中的变量。

                                    局部变量跟方法一起储存在栈中。

                                    局部变量储存在栈中生命周期比较短。

                                    作用范围在方法和语句中有效。

                                    在栈中储存必须手动赋值。

           5,匿名对象

              1)就是没有名字的对象,只能一次调用,没有具体的引用变量,在方法中可以将对象的地址进行传递。

          6,private关键字

              1)修饰符意思是私有的访问权限,修饰成员,不能修饰局部。

                   private是一种封装形式的体现形式,不是完全封装。被私有的成员变量(方法)只能在类中使用,类外不能使用,但是提供了方法,可以间接的访问到。

                   以后的成员变量(方法)要求私有修饰。

           7,构造方法

              1)定义:是一种特殊的方法,它的名字必须与它所在的类的名字完全相同,并且没有返回值,也不能写return,也不需要使用关键字void进行标识。

                    特点: 构造方法用于对对象中的所有成员变量进行初始化,在创建对象时立即被调用,经运行一次。

                               可以重载。写不写都有,不写的化会自定写,但是看不见。

           8,this关键字

               1)当局部变量和成员变量的名字相同时,成员变量就会被隐藏,这是如果想在成员方法中使用成员变量,则必须使用关键字this。

                    this也表示本类对象的引用,那个对象调用,就表示那个对象。

                2)this的第二个用法:this()语句,可以在构造方法中进行调用,注意:this语句只能写在构造方法的第一句。

           9,static 关键字(修饰符)

              1)由来:如果一个值被所有对象共用,为了节约内存,提高效率,就用static修饰,来进行共享。  

               2)static只能修饰成员变量和成员方法,不能修饰局部变量和方法。

                    被static修饰的成员多了一种调用方法,类名调用。没有被修饰的成员,只能被对象调用。

                3)静态成员变量和非静态成员变量的区别:

                     static修饰成员变量,类变量 --属于类。

                     非静态成员变量,实例变量,对象变量 --属于对象。

                      a)内存位置

                           静态,跟随类的加载而加载,随着类的消亡而消亡,方法区。

                           非静态,跟随对象在堆中,没有引用变量后,成垃圾。

                       b)生命周期

                           静态随着类的加载而加载,生命最长。

                          非静态成成员变量,随着对象加载,生命相对较短。

                      c)调用方式

                           静态,可以被类名,对象调用。

                         非静态,只能对象调用。

                   4)作用意义

                        静态是所有对象共享数据。

                        非静态是每个对象的特有数据。

                    5)使用注意事项

                         在静态方法中,不能直接调用非静态变量。

                        静态方法中,不能写this,super。

                         非静态方法中,能直接调用静态变量。

                     6) 静态该什么时候用

                           什么时候使用静态成员变量:

                         具体问题,具体分析,分析一个事物的时候,发现事物之间有共享数据,共享数据定义成静态。

                         什么时候使用静态成员方法:

                          如果一个方法,没有使用过,类中的非静态变量,方法定义成静态。

                   10,main方法

                        public static void main(String[] args){}

                        public 公共权限,被JVM调用

                        static 类名调用,不需要对象 java Demo

                         void 没有返回值,如果有返回到JVM,因此不需要返回值

                         main 规定好的名字,不能改

                        string[] 字符串数组

                         args 参数(唯一能改)

          下面是个小程序:

                                 

<span style="font-size:14px;">/*定义一个Student的类 实现set,get改变成员变量的值*/class Student{ private String name;//把成员私有化 private int age; private int score;Student(String name,int age,int score){this.name=name;//给成员变量赋值this.age=age;this.score=score;}//通用set,get方法实现对成员变量赋值 public static void setName(String name){      this.name=name;   }public static String getName(){   return name;}public static void setAge(int age){   this.age=age;}public static int getAge(){     return age;   }public static void setScore(int score){      this.score=score;  }public static int getScore(){     return score;}public static void speak(){   System.out.println(name+"  "+age+"  "+score);}}class StudentTest {public static void main(String[] args) {Student s=new Student("张三",25,95);s.setName("赵五");System.out.println(s.getName());//s.setAge(24);s.setScore(110);s.speak();}}</span>


    加油,为黑马。

                      

 

 

                          

0 0