面向对象总结1

 

 面向对象是相对面向过程而言的,面向过程强调的是功能行为,面向对象是将功能封装进对象,强调具备了功能的对象。

面试官若问什么是面向对象(开放式问题,回答必须有自己的体会):

1、  面向对象是一种思想,可以使复杂的问题简单化,可以使我们从执行者变成指挥者

2、  结合实际场景举个例子说明:面试官就是在用面向对象的思想思考问题,公司里面现在有招人的需求,说明公司现在的业务量比较大,代表着公司在蓬勃发展,你需要找一些具有专业编程经验的人来帮你完成公司的工作,我就是那个对象,我具备专业编程的功能,你就是在指挥我做事情,就是使用我的功能,来为公司创造效益。【万物皆对象】

面向对象三大特征:封装、继承、多态

类和对象的关系:

类:对现实生活中事物的描述

对象:就是这类事物,实实在在存在个体

描述事物就是描述事物的属性(对应类中变量)和行为(对应类中方法),属性和行为共同称为类的成员(成员变量和成员方法)

成员变量作用于整个类中,局部变量作用于函数中,或者语句中

成员变量在堆内存中,因为对象的存在,才在内存中存在,局部变量:存在栈内存中

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

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

封装原则:将不需要对外提供的内容都隐藏起来,把属性都隐藏,提供公共方法对其访问

private(私有):权限修饰符,用于修饰类中的成员(成员变量,成员函数),私有只在本类中有效。

static用于修饰成员(成员变量和成员函数)

被修饰的成员:随着类的加载而加载,优先于对象存在,被所有对象所共享,可以直接被类名调用。类名.静态成员  

【方法区、共享区、数据区】----存放类中的方法和共享数据

什么时候定义静态函数:当功能内部没有访问到非静态数据(对象的特有数据),那么该功能可以定义成静态的,用类名直接调用。

Eg:获取数组的最大值

class ArrayTool

{

       public static void main(String[] args)

       {

              int[] arr={5,8,4,1,3,5,8,77,55,99};

              int max=GetMax.getMax(arr);

              System.out.println("max="+max);

       }

}

class GetMax

{

       public static int getMax(int[] arr)

       {

              int max=0;

              for(int x=0;x<arr.length;x++)

              {

                     if(arr[x]>arr[max])

                            max=x;

              }

              return arr[max];

       }

}

构造代码块(定义对象共性初始化内容):给对象进行初始化,对象一建立,就运行,而且优先于构造函数执行。

构造代码块是给所有对象进行统一初始化,而构造函数是给对应对象进行初始化。

this关键字:代表它所在函数所属对象的引用。

                简单说:哪个对象在调用this所在的函数,this就代表那个对象。

构造函数间调用只能用this语句,this语句只能放在构造函数第一行,因为初始化动作要先执行,构造函数的权限和类的权限一致。

静态代码块(可以验证类是否加载):

格式:

static

{

      静态代码块中的执行语句。

}

特点:随着类的加载而加载,只执行一次,并优先于主函数,一般用于类的初始化。

Person p = new Person("zhangsan",20);

 

该句话都做了什么事情?

1,因为new用到了Person.class.所以会先找到Person.class文件并加载到内存中。

2,执行该类中的static代码块,如果有的话,给Person.class类进行初始化。

3,在堆内存中开辟空间,分配内存地址。

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

5,对属性进行显示初始化。

6,对对象进行构造代码块初始化。

7,对对象进行对应的构造函数初始化。

8,将内存地址付给栈内存中的p变量

设计模式:解决某一类问题最行之有效的方法,java中有23中设计模式

单例设计模式:解决一个类在内存只存在一个对象

1、  避免其他程序过多建立该类对象,禁止其他程序建立该类对象(将构造函数私有化)

2、  为了让其他程序可以访问到该类对象,在本类中,自定义一个对象(在类中创建一个本类对象)

3、  为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式(提供一个方法可以获取到该对象)

对于事物该怎么描述就怎么描述,当需要将该事物的对象保证在内存中唯一时,就将以上的三步加上即可。

方法被调用只有两种方式:对象调用和类名调用(static

Eg: class SimpleDemo//单例设计模式

{

       public static void main(String[] args)

       {

              Student s1=Student.getInstance();

              Student s2=Student.getInstance();

              s1.setAge(20);

              s1.setName("HuangQin");

              System.out.println(s2.getAge()+";"+s2.getName());

       }

}

class Student

{

       private String name;

       private int age;

       public void setAge(int age)

       {

              this.age=age;

       }

       public int getAge()

       {

              return age;

       }

       public void setName(String name)

       {

              this.name=name;

       }

       public String getName()

       {

              return name;

       }

       private Student(){}

       public static Student s=new Student();//先初始化对象,称为:饿汉式类一进内存,就创建对象,设计建议饿汉式

       public static Student getInstance()

       {

              return s;

       }

}

/* class Student

{

       private static Student s=null;//懒汉式,延迟加载,调用getInstance方法时,才建立对象

       private Student(){}

       public static Student getInstance()

       {

              if(s==null)

                     s=new Studente();

                     return s;

       }

      

}

*/


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值