黑马程序员-JAVA基础之面向对象

来源:互联网 发布:miro mac 编辑:程序博客网 时间:2024/04/30 20:11

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


“我们之所以将自然界分解,组织成各种概念,并将其含义分类,主要是因为我们是整个口语交流社会共同遵守的协定的参与者,这个协定一语言的形式固定下来……除非赞成这个协定中的有关语言信息的组织和分类,否则我们根本无法交谈。”——Benjamin Lee Whorf(1897~1941)     摘自——java编程思想


一、面向对象

1.概念:面向对象是相对于面向过程而言的一种编程思想,面向过程是强调功能行为,而面向对象强调将功能封装在对象中,强调 具有功能的对象

2.特点:

            (1)是一种符合人们思考习惯的方式
            (2)可以将复杂的事情简单化
            (2)将程序员从执行者转化为指挥者

            (4)简化开发并提高复用

3.表现:

          开发过程:寻找对象,没有对象就创建对象。开发过程就是一个不断创建对象,使用对象

           设计过程:管理和维护对象之间的关系

4.三大特征:封装(encapsulation)、继承(inheritance)、多态(polymorphism

二、类与对象

1.关系:生活中的事物可以用计算机语言来描述,java语言就是通过类来描述事物,类是具体事物在语言中的抽象表现,对象是该类所描述事物真实存在的个体。

                                                          

                                                               在上图中,类就是图纸,汽车就是对内存中的对象

2.表现:用class定义类,描述对象,对象的属性就是类中变量,对象的功能就是方法(函数),变量和函数都是类的成员(成员
变量和成员函数)

3.成员变量和局部变量的区别?

成员变量:

        成员变量定义在类中,在整个类都可以访问。

        成员变量随着对象的建立而建立,存在于对象所在的对内存中。

        成员变量都有默认的初始化值。

局部变量:

       局部变量只定义在局部范围内,如函数、语句内。

       局部变量只在栈内存中。

       作用范围结束,变量空间会自动释放。

       局部变量没有默认初始化值。

4.匿名对象

(1)、当对象的方法值调用一次时,使用匿名对象,简化代码。

(2)、可以将匿名对象作为实际的参数进行传递。

三、封装(encapsulation)

1.概念:将对象的属性和实现细节进行隐藏,仅对外提供公共的访问方法。

2.好处:将变化隔离;便于使用;提高重用性;提高安全性


3.private关键字:

              概念:是一种权限修饰符,用来修饰成员(成员变量和成员函数),被修饰的成员只在本类中有效。

              常用:将成员属相封装后,对外提供get和set方法对其访问,提高安全性。

4.构造函数:

          特点:函数名与类名一致

                     没有具体返回值并且不定义返回值类型

                     每一个类都有默认的空参数的构造函数,当在类中自定义了构造函数后,默认的构造函数就不存在了

                     多个构造函数以重载的形式存在

                     对象一建立,就会调用与之对应的构造函数

          作用:用于给对象初始化

class Student {private String name;private int age;private int score;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public int getScore() {return score;}public void setScore(int score) {this.score = score;}// 具有姓名、年龄、成绩的构造函数public Student(String name, int age, int score) {this.name = name;this.age = age;this.score = score;}}

上面的程序就是将学生(student)类进行封装,将姓名、年龄、成绩属性隐藏,对外提供get和set方法,并且定义了一个构造函数

5.构造代码块:

           作用:给所有对象进行统一初始化

           特点:先于构造函数执行

           什么时候用:当对象具有共性的属性时,可以放在构造代码块中初始化

6.this关键字:代表本类对象,哪个对象调用this所在的函数,this就代表哪个对象。

         注意:this只能写在构造函数的第一行,因为要进行初始化。

class Person{private int age;//人的年龄属性Person(int age){this.age = age;}//比较两个人的年龄是否相同public boolean compare(Person p){return this.age == p.age;}}class PersonDemo{public static void main(String[] args) {Person p1 = new Person(24);Person p2 = new Person(20);System.out.println(p1.compare(p2));//p1调用compare方法,this代表p1对象}}

7.static关键字:是一种修饰符,用于修饰成员(包括成员变量和成员函数),被static修饰的成员可以直接被类名调用。

            特点:(1)随着类的加载而加载

                       (2)优先于对象而存在,所以内部不能定义this和super

                       (3)静态只能访问静态

            什么时候用?

            当类中出现共享数据时,可以将定义为静态

            当函数中没有访问到非静态数据时,可以将函数定义为静态。

class Person{private String name;public void setName(String name){this.name = name;}public String getName(){return name;}static String country = "china";//中国人的国籍属性共有的属性public static void show()//静态函数{System.out.println("静态函数被调用");}}class StaticDemo {public static void main(String[] args) {Person p = new Person();p.setName("lee");System.out.println("name="+p.getName()+"+++country="+p.country);//结果:name=lee+++country=chinaPerson.show();//结果:静态函数被调用}}

8.静态代码块:

格式:

static{}

特点:随着类的加载而执行,而且只执行一次,先于构造函数执行。

9.实例变量和类变量的区别:

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

10.对象的初始化过程:

Person p = new Person("zhangsan",20);</span>

该句话所做的事情:

               1.new用到了Person.class,首先找Person.class文件并加载到内存中。

               2.执行该类中的静态代码块,给Person.class进行初始化

               3.在堆内存中开辟空间,并分配内存地址值

               4.在堆内存中建立对象的特有属性,并进行默认初始化

               5.对对象的属性进行显示初始化

               6.对对象进行构造代码块的初始化

               7.对对象进行对应构造函数初始化

               8.将堆内存中的地址值赋给栈内存中的p变量

四、设计模式:是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结

单例设计模式:保证一个类在内存中只有一个对象

       懒汉式:  

class Single{private static Single s = new Single();private Single(){}public static Single getInstance(){return s;}}

       饿汉式:具有延时加载的特点,但是在多线程下会不安全,可以加同步解决问题,但是效率会降低,可以加双重判断来提高效率

class Single{private static Single s = null;private Single(){}public static Single getInstance (){if (s == null){synchronized(Single.class)//加锁,更安全{if (s == null){s = new Single();}}}return s;}}
0 0
原创粉丝点击