01java基础面向对象

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_39823114/article/details/78551119
一、
    1. 面向对象的思想 OO :面向过程,面向对象是两种分析方法,对我们比较熟悉的领域一般使用面向过程,不熟悉的领域开发使用面向对象  ,不过在面向对象的属性方法里面具体实现还是面向过程。万物皆对象!

     2.  一门与平台无关的语言  一次编译,处处运行(既有编译,也有解释) 源文件编译成字节码文件,然后不同的平台有不同的虚拟机,从而实现跨平台。

           3、 源文件      编译          字节码文件        运行                                                                     跨平台原因
            .java    ------------>        .class    ------------------> JVM (类装载器---->字节码校验器-------->解释器-------->OS)
javac:负责的是编译的部分,当执行javac时,会启动java的编译器程序。对指定扩展名的.java文件进行

编译。 生成了jvm可以识别的字节码文件。也就是class文件,也就是java的运行程序。

java:负责运行的部分.会启动jvm.加载运行时所需的类库,并对class文件进行执行

二、数据类型:

1):基本数据类型:byte、short、int、long、float、double、char、boolean

2):引用数据类型: 数组、类、接口。

级别从低到高为:byte,char,short(这三个平级)-->int-->float-->long-->double

三、数组:同一种类型数据的集合。其实数组就是一个容器,数组长度是固定的。

1、 int[] a=new int[2];

2、int[] d={1,2,3};

         NullPointerException 空指针异常

         ArrayIndexOutOfBoundsException 索引值越界

         3、内存结构:栈内存,堆内存,寄存器,方法区:静态成员、构造函数、常量池、线程池,本地方法区:window系统占用

     栈:存储的都是局部变量 ( 函数中定义的变量,函数上的参数,语句中的变量 );


只要数据运算完成所在的区域结束,该数据就会被释放。


堆:用于存储数组和对象,也就是实体。啥是实体啊?就是用于封装多个数据的。


1:每一个实体都有内存首地址值。


2:堆内存中的变量都有默认初始化值。因为数据类型不同,值也不一样。


3:垃圾回收机制。

四、面向对象:( 函数(方法)以及变量(属性))
1、实例变量又称成员变量: 
  
成员变量定义在类中,在整个类中都可以被访问
  
成员变量随着对象的建立而建立,随对象的消失而消失,存在于对象所在的对内存中
  
成员变量有默认初始值

2、局部变量:
  
定义在方法中或方法的参数列表(或者语句中)
  
存在于栈内存中,作用的范围结束,变量空间自动释放
  
默认没有初始化值,使用时需要进行初始化

3、静态变量又称类变量:用static修饰
  
存储在方法区中
  
随着类的加载而存在,随着类的消失而消失
  
可以由类名或对象调用

4、构造函数和一般函数有什么区别

1:两个函数定义格式不同。

2:构造函数是在对象创建时,就被调用,用于初始化,而且初始化动作只执行一次。

一般函数,是对象创建后,需要调用才执行,可以被调用多次。

 Person p = new Person();在内存中做了哪些事情。
(1)将Person.class文件加载进内存中。
(2)如果p定义在主方法中,那么,就会在栈空间开辟一个变量空间p。
(3)在堆内存给对象分配空间。
(4)对对象中的成员进行默认初始化。
(5)对对象中的成员进行显示初始化。
(6)调用构造代码块对对象进行初始化。(如果没有就不执行)
(7)调用构造方法对对象进行初始化。对象初始化完毕。
(8)将对象的内存地址赋值给p变量,让p变量指向该对象。

5、封 装(面向对象特征之一):是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。

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

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

this:代表对象。就是所在函数所属对象的引用。

this到底代表什么呢?哪个对象调用了this所在的函数,this就代表哪个对象,就是哪个对象的引用。

6、继 承(面向对象特征之一)

①好处:

1:提高了代码的复用性。

2:让类与类之间产生了关系,提供了另一个特征多态的前提。

父类的由来:其实是由多个类不断向上抽取共性内容而来的。

java中对于继承,java只支持单继承。java虽然不直接支持多继承,但是保留了这种多继承机制,进行改良。

单继承:一个类只能有一个父类。

多继承:一个类可以有多个父类。

②为什么不支持多继承呢?

因为当一个类同时继承两个父类时,两个父类中有相同的功能,那么子类对象调用该功能时,运行哪一个呢?因为父类中的方法中存在方法体。

但是java支持多重继承。A继承B B继承C C继承D。

多重继承的出现,就有了继承体系。体系中的顶层父类是通过不断向上抽取而来的。它里面定义的该体系最基本最共性内容的功能。

③什么时候使用继承呢?

当类与类之间存在着所属关系时,才具备了继承的前提。a是b中的一种。a继承b,所属关系:" is a "

④子父类中的成员关系
A:成员变量
在子类方法中使用一个变量时:
首先,在方法的局部变量中找这个变量,有则使用。
否则,在本类中找成员变量,有则使用。
否则,在父类中找成员变量,有则使用。
否则,报错。
B:成员方法
用子类对象使用一个方法时。
首先,在子类中找这个方法,有则使用。
否则,在父类中找这个方法,有则使用。
否则,报错。

⑤重写和重载的区别?
重载:在同一类中。方法名相同,参数列表不同。重载可以改变返回类型。
重写:在不同类中(子父类中)。
     方法声明相同(返回类型,方法名,参数列表均相同)。
重写需要注意:
子类方法的访问权限要大于等于父类方法的访问权限。
静态只能重写静态。但是这种情况一般不会出现。

⑥this和super的区别
this:代表本类对象的引用。
super:代表父类的存储空间。

⑦final关键字(重点)
(1)最终的意思,可以用于修饰类,方法,变量。
(2)final修饰的类不能被继承。
  final修饰的方法不能被重写。
  final修饰的变量是一个常量。只能被赋值一次。
  内部类只能访问被final修饰的局部变量。

⑧抽象类(重点)

(1)多个类有相同的方法声明,但是方法体不一样。这个时候,我们考虑把方法声明进行抽取。
  让子类继承后,自己去实现方法体。没有方法体的方法,我们需要用抽象标志下。
  抽象的关键字是:abstract。
(2)抽象类:
该方法称为抽象方法,包含抽象方法的类就是抽象类。
(3)抽象类的特点:
A:抽象类和抽象方法都要用abstract进行修饰
B:抽象类不能被实例化
C:抽象类中不一定有抽象方法,但是,有抽象方法的类一定是抽象类。
(4)抽象类中数据的特点
A:成员变量
抽象类中可以有变量,也可以有常量。
B:成员方法
抽象类中可以有抽象方法,也可以有非抽象方法。
C:构造方法
抽象类是一个类,所以,它有构造方法。
虽然本身不能实例化。但是可以给子类实例化使用。
(5)抽象类中的问题
A:抽象类中是否有构造方法?能不能被实例化?如果不能,为什么有构造方法?
 抽象类有构造方法。
         抽象类不能被实例化。
 抽象类中的构造方法供子类实例化调用。
B:抽象关键字abstract不可以和哪些关键字共存?
 **private:
私有内容子类继承不到,所以,不能重写。
但是abstract修饰的方法,要求被重写。两者冲突。
         **final
final修饰的方法不能被重写。
而abstract修饰的方法,要求被重写。两者冲突。
 **static
假如一个抽象方法能通过static修饰,那么这个方法,就可以直接通过类名调用。
而抽象方法是没有方法体的,这样的调用无意义。所以,不能用static修饰。
C:抽象类中可不可以没有抽象方法?如果可以,这样的类有什么用吗?
 抽象类可以没有抽象方法。
 抽象类中没有抽象方法的作用,只是为了不让别的类建立该抽象类对象。这个在awt中有体现。

7、、接口interface

(1)当一个类中的方法都是抽象的时候,java提供了另一种表示方式,叫接口。
  用interface关键字表示。类与接口关系用implements表示。
(2)接口的成员特点
A:成员变量
是常量,默认修饰 public static final
B:成员方法
都是抽象的,默认修饰 public abstract
(3)关系
A:类与类的关系
是继承关系。类与类只能单继承,可以多重继承。
B:类和接口的关系
是实现关系。类可以多实现接口。
类在继承一个类的同时,可以实现多个接口。
C:接口和接口的关系
是继承关系。接口可以多继承接口。
(4)接口的特点
A:是对外暴露的规则
B:是功能的扩展
C:接口的出现降低耦合性。
耦合(类与类之间的关系)
内聚(类完成功能的能力)
编程规范:低耦合,高内聚。
D:接口可以多实现。如:CPU和主板、笔记本的USB插口、插座
(5)接口和抽象类的区别
A:抽象类只能被单继承
  接口可以多实现,接口的出现避免了多继承的局限性。
B:抽象类中的数据特点:
成员变量:可以是变量,也可以是常量
成员方法:可以是抽象方法,也可以是非抽象方法
构造方法:
有构造方法
  接口中的数据特点:
成员变量:是常量。默认修饰 public static final
成员方法:都是抽象方法。都有默认修饰 public abstract
构造方法: 没有构造方法
C:抽象类中定义的是继承体系中的共性功能。
  接口中定义的是继承体系中的扩展功能。
D:抽象类被继承是"is a"关系:xx是yy的一种
  接口被实现是"like a"关系:xx像yy的一种
接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”。
接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成。这样将功能的定义与实现分离,优化了程序设计。
请记住:一切事物均有功能,即一切事物均有接口。

8、多态:

(1)同一个对象,在程序不同时刻的多种运行状态。举例:动物,狗是狗,狗是动物。水(气态,液态,固态)
(2)多态前提
A:存在着继承或者实现关系
B:有方法的重写
C:父类(接口)引用指向子类(实现)对象
(3)多态的好处和弊端:
好处:多态的存在提高了程序的扩展性和后期可维护性
弊端:虽然可以预先使用,但是只能访问父类中已有的功能,运行的是后期子类的功能内容。
     不能预先使用子类中定义的特有功能。
(4)多态中对象调用成员的特点
Fu f = new Zi();

A:成员变量
编译看左边,运行看左边
B:成员方法 
编译看左边,运行看右边
C:静态方法
编译看左边,运行看左边
(5)多态的思想
指挥同一批对象做事情。举例:带兵打仗,下课等。

(6)最终多态体现为:父类引用变量可以指向子类对象。
多态的前提是必须有
子父类关系 或者 类实现接口关系 ,否则无法完成多态。
在使用多态后的父类引用变量调用方法时,会调用子类重写后的方法。
父类 变量名 = new 子类();
如:	class Fu {}
	class Zi extends Fu {}
	//类的多态使用
Fu f = new Zi();
接口 变量名 = new 接口实现类();
如: interface Fu {
		     public abstract void method();
}
class Zi implements Fu {
		     public void method(){
              System.out.println(“重写接口抽象方法”);
}
}
//接口的多态使用
Fu fu = new Zi();
















猜你喜欢

转载自blog.csdn.net/qq_39823114/article/details/78551119