天天看点

面向对象基础(知识点的归纳)一、面向对象基本概念二、类与对象三、封装性四、构造方法五、this关键字六、static关键字七、代码块八、单例设计模式

面向对象

  • 一、面向对象基本概念
    • 一、什么是面向对象:
          • 1.介绍:
          • 2.三大思想:
          • 3.三大特征:
    • 二、建立面向对象思维方式:
    • 三、如何学习面向对象
  • 二、类与对象
    • 1、什么是类?
    • 2、类与对象的关系
    • 3、类和对象的定义格式
    • 4、属性与方法
    • 5、对象的定义和使用
    • 6、对象内存说明
  • 三、封装性
        • 一、 封装性的概念
        • 二、封装的好处
        • 三、成员变量和局部变量
  • 四、构造方法
  • 五、this关键字
  • 六、static关键字
  • 七、代码块
  • 八、单例设计模式

一、面向对象基本概念

一、什么是面向对象:

1.介绍:

1、面向对象是一种编程思想

2、面向对象是一种思考问题的思维方式

2.三大思想:

面向对象思想从概念上讲分为以下三种:OOA、OOD、OOP

OOA:面向对象分析(O`ject Oriented Analysis)  
OOD:面向对象设计(ObjectOriented Design)  
OOP:面向对象程序(Object Oriented Programing)
           
3.三大特征:
封装性:所有的内容对外部不可见=
继承性:将其他所有功能继承下来继续发展
多态性:方法的重载本身就是一个多态性的体现
           

二、建立面向对象思维方式:

1、先整体、再局部

2、先抽象、再具体

3、能做什么、再怎么做

三、如何学习面向对象

1、掌握一门面向对象语言的语法

2、熟悉面向对象的设计原则

3、熟悉面向对象设计模式

面向过程:以步骤为单位、一步步完成具体事情

面向对象:以对象为单位,通过调度组合不同的对象来完成具体事情

二、类与对象

1、什么是类?

1、类是:分类、类别。

2、通过分类、我们可以区分不同的事物种类。

3、类具有一种相同特性(属性)与行为(方法)的事物集合。

2、类与对象的关系

1、类表示一个共性的产物:是一个综合的特性,而对象是一个个性的产物,是一个个体的特征。

2、类由属性和方法组成:

属性:就相当于一个个特征。

方法:就相当于人的一个个的行为,例如:吃饭、唱歌、睡觉。

3、类和对象的定义格式

在Java语句中可以使用以下语句定义一个类:

class类名称{
成员属性
成员方法
}
           

4、属性与方法

属性定义格式:

数据类型 属性名;

属性定义并赋值的格式:

数据类型 属性名 = 初始化值;

方法定义格式:

权限修饰符 返回值类型 方法名(形式参数列表){

//方法体

return 返回值;

}

5、对象的定义和使用

一个类要想真正的进行操作,则必须依靠对象,对象的定义格式如下:

类名称 对象名称 =new 类名称();

按照以上的格式就可以产生对象了

如果要想访问类中的属性或方法(方法的定义)则可以依靠以下的语法形式:

访问类中的属性:

对象 属性;

调用类中的方法:

对象 方法;

在Java中对象声明有两种含义

声明对象:Person person=null;

表示声明了一个对象,但是此对象无法使用,person没有具体的内存指向。

实例化对象:person=new Person

表示实例化了对象可以使用

通过对象调用方法: person.eat()

匿名对象调用方法: new Person().eat()

6、对象内存说明

1、new关键字表示创建一个对象

2、new关键字表示实例化一个对象

3、new关键字表示申请内存空间

注意:如果使用一个没有申请内存空间的对象,会报空指针异常

java.lang.NuIPpinterException

这里只作文字说明,可以自己网上搜索图解更好理解

(1)new关键字:表示向内存申请空间,也表示实例化一个对象,创建一个对象。

(2)一个对象在内存中的大小,由该对象的所有属性所占的内存大小的总和。引用类型变量在32位系统上占4个字节,在64位系统上占8个字节,加上而外的对象隐性数据所占的大小。

(3)相同的类型才可以赋值、字符串是引用类型变量、不是基本数据类型变量。

(4)不同的引用,指向同一个对象,任何一个引用改变对象的值,其它引用都会反映出来。

(5)编程时要注意的问题,在确定不使用对象时,要尽早释放对象:引用=null

(6)当一个堆中的对象没有被任何一个引用变量所指向时,该对象会被JVM的GC认为是垃圾对象,从而被回收。

三、封装性

一、 封装性的概念

1、封装性是面向对象思想的三大特征之一。

2、封装就是隐藏实现细节,仅对外提供访问接口。

封装有:属性的封装、方法的封装、类的封装、模块化封装、系统级封装…

二、封装的好处

1、模块化

2、信息隐藏

3、代码重用

4、插件化易于调试

5、具有安全性

封装缺点:

会影响执行效率

如果属性没有封装、那么在本类之外创建对象后,可以直接访问属性

private关键字:访问权限修饰符,public表示公有的,private表示私有的,私有的属性或方法 ,只能在本类中访问,公有的属性和方法,可以被类外部其它类访问,想要在类外部访问私有属性,我们需要提供公有的方法来间接访问。

通常一个类中,属性都私有化,并对外提供getter and setter方法。

三、成员变量和局部变量

1、在类中的位置不同

成员变量:在类中的定义

局部变量:在方法中定义或者方法的参数

2、在内存中的位置不同

成员变量:在堆内存(成员变量属于对象,对象进堆内存)

局部变量:在栈内存(局部变量属于方法,方法进栈内存)

3、生命周期不同

成员变量:随着对象的创建而存在,随着对象的销毁而消失

局部变量:随着方法的调用而存在,随着方法的调用完毕而消失

4、初始化值不同

成员变量:有默认初始化值,引用类型默认null

局部变量:没有默认初始化值,必须定义,赋值,然后才能使用

注意:局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则。

四、构造方法

什么是构造方法?

1、构造方法就是类构造对象时调用的方法,用于对象的初始化工作

2、构造方法是实例化一个类的对象时、也就是new的时候,最先调用的方法

构造方法的定义:

构造方法是在类中定义的,构造方法的格式:方法名称与类名称相同,无返回值类型的声明。

对象的实例化语法:

Dog dog = new Dog();

new Dog 后面有个括号,带括号表示调用了方法,此时调用的方法就是构造方法。

构造方法的重载

无参构造方法:
public Dog(){}
           
带一个参数的构造方法:

public Dog(String name){
     this.name = name;
}
           
带多个参数的构造方法:

public Dog(String name,int age){
      this.name = name;
      this.age = age;

}
           

(1)构造方法名称与类名称相同,没有返回值声明(包括void)

(2)构造方法用于初始化数据(属性)

(3)每一个类中都会有一个默认的无参构造方法

(4)如果类中有显示的构造方法,那么默认构造方法将会无效

(5)如果有显示的构造方法,还想保留默认构造方法,需要显示的写出来

(6)构造方法可以有多个但参数不一样,称之为构造方法重载

(7)在构造方法中调用另一个构造方法,使用this(…),该句代码必须在第一句

(8)构造方法之间的调用,必须要有出口

(9)给对象初始化数据可以使用构造方法setter方法,通常情况下两者都会保留

(10)一个好的编程习惯是保留默认构造方法(为了方便一些框架代码使用反射来创建对象)

(11)private Dog(){},构造方法私有化,当我们的需求是为了保证该类只有一个对象时。什么时候一个类只需要一个对象?比如,工具类(没有属性的类,只有行为)并且该对象被频繁使用,权衡只有一个对象与产生多个对象的内存使用,来确定该类是否要定义为只需要一个对象。

五、this关键字

在Java基础中,this关键字是一个最重要的概念,使用this关键字可以完成以下操作:

调用类中的属性

调用类中的方法和构造方法

表示当前对象this.类名来表示当前对象

在方法使用this调用类中的其它方法或属性,this可以省略,this前面可以使用当前的类名.this
           

六、static关键字

static关键字的作用:

1、使用static关键字修饰一个属性

声明为static的变量实质上就是全局变量。

2、使用static关键字修饰一个方法

通常、在一个类中定义一个方法static,那就是说,无需本类的对象即可调用此方法。

3、使用static关键字修饰一个类(内部类)

(1)静态变量或方法不属于对象、依赖类。

(2)静态变量是全局变量、生命周期从类被加载后一直到程序结束。

(3)静态变量只有存一份、在静态方法区中存储。

(4)静态变量是本类所有对象共享一份静态变量(全局变量)。

(5)建议不要使用对象名去调用静态数据,直接使用类名调用。

(6)static修饰一个方法,那么该方法属于类、不属于对象,直接用类名调用。

(7)静态方法不能访问非静态属性和方法、只能访问静态。

七、代码块

1、普通代码块,在方法中写的代码块。

直接写在方法中的代码块就是普通代码块

public class Demo1{

public static void main(String [ ] arge){

//普通代码块
String info="局部变量-1";
System.out.println(info);

}

String info = "局部变量-2";
System.out.println(info);

}

}
           

2、构造块,在类中定义的代码块,在创建对象时被调用,优于构造方法执行。

class Demo{
{   //构造块
System.out.println("构造块");

}

public Demo{
System.out.println("构造方法");
}

}
           

3、在类中使用static声明的代码块称为静态代码块、在第一使用时被调用(创建对象)只会执行一次,优于构造块执行。在项目开发中,通常会使用静态代码块来初始化只调用一次数据

class Demo{
{
System.out.println("构造快");
}
static{
System.out.println("静态代码块");
 }
public Demo{
System.out.println("构造方法");
}
}
           

重点使用顺序:静态代码块,普通代码块,同步代码块,构造代码块。

八、单例设计模式

保证一个类仅有一个实例,并提供一个访问它的全局访问点。

1、构造方法私有化

2、声明一个本类对象

3、给外部提供一个静态方法获取对象实例

两种实现方式:

1、饿汉式:在类被加载后,对象被创建,到程序结束后被释放。

(占用内存时间长,提高效率)

2、懒汉式,在第一次调用getInstance方法时,对象被创建,到程序结束后被释放。

(占用时间短,效率低(懒加载,延迟加载),在多线程访问时会有安全问题)

在项目中为什么要使用单例,单例有什么好处?

1、在设计一些工具类的时候(通常工具类、只有功能方法,没有属性)。

2、工具类可能被频繁调用(目的是为了节省重复创建对象所带来的内存消耗,从而来提高效率)。