JAVAOO知识点

                        JAVA OO(面向对象)

面向对象:万物皆对象,对象因我关注而产生.

数据的封装形成对象

对象是存在的具体实体,具有明确定义的特征和行为

面向对象:一种认识事物的方式,注重对事物整体的认知,最符合人类自然的思维习惯

OOP:面向对象编程

OOA:面向对象分析

OOD:面向对象设计

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

一、 结构化和OO的区别

在结构化编程中,程序围绕着要解决的任务来设计;

扫描二维码关注公众号,回复: 7523529 查看本文章

面向对象编程中,程序围绕着问题域中的对象来设计。

面向过程:优点 性能比面向对象高,因为类

属性是名词 , 行为是动词
  属性是指对象身上的特性,行为是指对象产生的一系列动作。

二、

类:是具有相同属性和行为的一组对象的集合

类是对象的抽象,对象是类的实例。

Java中数据类型分为基本数据类型和引用数据类型

基本数据类型的变量中存放的是具体的数据。而引用数据类型变量中存放的是对象引用(地址)              

基本数据类型有8种:byte、short、int、long、float、double、char、Boolean;

整型和整型运算,至少是int类型。

+=(有+=包含了类型转换);x +=y(等于x =(int)(x+y))

引用数据类型有3种:类、数组、接口

成员变量和静态变量的区别:

1、 成员变量包含在对象值中,每一个对象都有独立的成员变量。一个对象成员变量的改变,不会影响别的对象。静态变量独立在对象之外,所有的对象共享静态变量。静态变量值的改变,会影响所有变量。

2、 成员变量跟随对象存放在堆空间中,静态变量存放在数据段中。

3、 静态变量在类加载时产生,产生在对象之前。成员变量随对象产生而产生,,随对象销毁而销毁。

4、 、静态变量可以通过对象.和类名.的方式访问。而成员变量只能通过对象.的方式访问。

垃圾回收机制:是内存中没有被变量引用,同时没有被使用的对象。

Null表示在引用类型变量中,没有存放任何对象的引用。对null值调用属性和方法,会抛出空指针异常。(java.lang.NullPoiinterException(出现这个表示))

 

堆中存放new出来的对象    特点:随着对象产生而产生,随对象销毁而销毁。

栈中存放的局部变量    特点:当方法和语句块一结束,空间马上释放 先进后出的释放

数据段中存放的是类变量、常量     特点:长驻内存,创建好以后,不会消失

代码段中存放的是方法的定义     特点:在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等          

在一个包(package)如果要使用另一个包中的类,那么需要通过import导入该类。本包中的类和java. Lang 包中的类无需导入就可使用。

包的作用:

1、 可以组织相关的类

2、 可以做到信息的隐藏

方法:

成员方法和静态方法的区别:

1、 成员方法可以通过对象.的方式调用,静态方法可以通过对象.和类名.的方式访问。

2、静态方法在类加载时加载,不能直接访问成员变量和成员方法。

成员方法在产生对象时加载,可以直接访问成员变量,成员方法,静态变量,静态方法。

 在方法之间传递和返回对象,传递和返回的是对象的引用

  

方法重载:方法发生在同一个类中,两个方法的方法名相同,参数列表不同(类型、个数、顺序),根据调用方法的实参,来决定执行哪个重载方法。

构造方法(构造器):构造方法的方法名和类名相同,没有返回类型(包括void)。构造方法主要用于产生对象。(如果一个类声明为public,那么该类的类名与文件名必须一致)

构造方法的作用:

1、 为对象在堆空间中分配空间。   ((静态变量在类加载时,完成初始化)知道就好 ,)

2、 初始化成员变量。

3、 返回对象的引用。

如果一个类没有定义构造方法,虚拟机会默认分配一个共有的无参构造方法。如果该类中定义了构造方法,默认的无参构造方法就会消失。

构造方法不能继承,但是,子类需要在子类的构造方法中调用父类构造方法产生父类对象。

在方法中访问变量,会优先访问局部变量。如果局部变量不存在,那么,再访问成员变量或静态变量。 {this表示当前对象,this.访问的是当前对象的属性或方法。}

注释:

1、 单行注释和多行注释用于方法或语句块中,给某一行或某一段代码的说明。

2、 文档注释用于类、方法、属性前面。

JDK中bin下,有一个javadoc.exe文件,用于产生帮助文档

继承:

继承是一种代码重用的方式。

子类通过继承父类,可以重用父类中定义的属性和方法。

另外,在子类中,还可以定义子类特有的属性和方法。  继承采用关键字extends、

继承使用的原则:

1、 观察要使用的类,确定他们之间共同的和特有的特征和行为,将这些共性数据迁移到父类里。便于子类中进行方法和属性的重用。

2、 对于不同的特征和行为,在子类里可以重新定义。

在java,一个类只能有一个类,一个类不能继承两个父类。

所以的类都直间或间接都继承Object类 。

GUI(Graphics User Interface):是图形用户界面.

awt:awt是使用操作系统本身提供组件风格来构建java的gui组件。所以在跨平台时,显示风格不一致。

Swing:弥补了awt类包的不足,有自己的显示风格,这样在跨平台时,显示风格会保持一致。

GUI窗体中加入组件的步骤:

1、 设置布局管理器

2、 创建GUI组件对象

3、 将GUI组件对象加入窗体

JavaGUI组件遵循先进先出,后进后出的原则。

多态:允许使用父类变量指向子类对象,允许使用接口变量指向实现类对象。但反过来不行。

多态调用时,父类变量指向子类变量,只能调用父类中定义的属性和方法,不能调用子类特有的属性和方法。相同的行为,不同的实现。    多态具体体现为重载和重写。

多态主要应用于多态参数和多态集合。

多态总结:

1、 使用父类类型的引用指向子类的对象。

2、 该引用只能调用父类中定义的方法,不能调用子类中独有的方法。

3、 如果子类中重写了父类中的一个方法,那么在调用该方法的时候,将会调用父类中的所有方法。

4、 在多态中,子类可以调用父类中所有的方法。

5、 多态主要体现为重载和重写,相同的行为不同的实现方式。

6、 多态主要应用为多态参数和多态集合。

封装:按照信息隐藏的原则,将数据组织在一起。封装有两个特点:信息隐藏,信息集合。

子类对象构建时,会先调用父类的构造方法,产生父类对象。然后,在父类对象基础上,拓展子类特有的属性和方法。所以,子类对象中包含一个完整的父类对象,可以重用父类中定义的属性和方法。

Super表示父类对象,子类构造方法第一句,必须书写为super(),调用父类构造方法产生父类对象。如果没有写,虚拟机默认执行super()。但是如果父类中没有定义无参构造方法,子类构造方法必须显式调用。

重写:重写发生在父类和子类之间,子类方法名和父类相同,参数类型相同,返回类型也相同。在调用方法时,优先调用子类重写的方法。

子类重写父类的方法,要求访问修饰符要大于或等于父类方法。抛出的异常要小于或等于父类方法

@override叫(注解),可以强制检测子类方法是否重写了父类方法。如果该子类方法没有重写父类方法,那么编译错误。

Final 可以修饰类、方法、变量。

1、修饰类,该类不能被继承。

2、修饰方法,表示该方法不能被子类重写。

3、修饰变量,表示该变量的值不能改变。

基本数据类型变量声明为final,表示该变量的值不能改变。引用数据类型变量声明为final,表示该变量不能引用别的对象。

输入值调用2个方法 ,优先选择更小的类型。

访问修饰符:

1、 public (公开):本类、同包、不同包各个的子类和非子类均可访问。

2、 protected():本类和同包中子类和非子类可以访问和不同包中的子类。

3、 默认(无):本类和同包中子类和非子类均可访问。

4、 Private(私有):只有本类之中可以访问。默认会加上final修饰符, 不能被子类重写

访问修饰符

本类

本包

不同包

 

 

子类

非子类

子类

非子类

Public

均可访问

Protected

这些可以访问

 

默认

这些可以访问

 

 

Private

仅此而已

 

 

 

 

 

私有属性·加get/set方法和共有属性的区别。

1、私有属性不能再在别的·类中直接访问。只能通过get方法进行访问,通过set方法进行设置。所以,可以通过删除set或get方法,将属性做出只读或只写属性。公有属性做不到。2、私有属性可以在set方法中,进行属性值合法性的验证。公有属性做不到。

静态初始化块static{  },只在类加载时执行一次。

·实例初始化块{   },在产生对象时执行,在super()之后执行。

内部类:在一个类中,再定义一个类,称为内部类。内部类相当于外部类的属性,内部类对象的产生需要依赖于外部对象。

局部变量存放在栈空间中,只能用final或默认修饰。不能用public、private、static、protected修饰。

内部类class文件的命名规则:外部类类名$内部类类名.class。

抽象类:如果一个方法只有定义,但是没有具体的内容,那么该方法称为抽象方法。拥有抽象方法的类,叫做抽象类。用关键字abstract定义。

抽象类不能直接实例化。抽象类变量只能指向子类对象。

如果一个类继承抽象类,那么必须重写抽象类中定义的所有抽象方法,否则该类只能是抽象类。         (抽象方法方便进行多态调用)

接口:(多态的实现方式之一)  

1、 接口可以看作抽象类的特例。抽象类中可以定义抽象方法,可以定义具体方法。但在接口中,只能定义抽象方法。

2、 接口可以看作行为的抽象。

3、 定义接口用关键字interface,实现接口用关键字implements,一个类实现一个接口必须重写接口中定义的抽象方法。

4、 接口中定义的方法都是公共的、抽象的(public abstract)。Public abstract修饰符可以省去。不能用private protected修饰接口方法(私有的不能用)。、

5、 接口中定义的变量修饰符为public static final。

6、 接口可以继承接口,还可以多继承(继承多个)接口,一个类实现接口,不但要实现接口中定义的抽象方法,还有实现该接口的父接口中定义的抽象方法。

如果一个方法的参数为父类变量,那么可以传递任何一个子类对象。如果一个方法的参数为接口变量,那么可以传递任何一个实现类对象。

抽象类和接口的区别和联系:

1、 抽象类和接口都不能直接实例化。抽象类变量只能引用子类对象,接口变量只能引用实现类对象。

2、 接口中只能定义抽象方法,不能定义具体方法,但在抽象类中可以定义抽象方法,可以定义具体方法。

3、 接口中定义的变量是公共的静态的常量,而抽象类中定义的变量是普通属性。

4、 一个类只能继承一个类,但是可以实现多个接口。

事件添加的步骤:

1、 确定事件源

2、 确定监听器

3、 注册,建立事件源和监听器的联系。

异常(exception):异常是描述出错信息的对象。

异常的API结构:

Throwable是父类,有两个子类,Error和Exception。其中Error表示错误,崩溃级别的出错信息,可以捕获,但不能处理。Exception表示异常,是普通出错信息,可以捕获,可以处理。

Error是所有错误类的父类;exception是所有异常类的父类。

异常的执行顺序,先从try块开始执行,顺序执行。如果有异常发生转到catch块执行,同时中止try块中的其他代码。无论是否有异常发生,都会执行finally语句块·。 try……catch结束后,继续执行异常块之后的代码。

如果一个try块和多个catch块联用,在异常发生时,只会执行第一个和异常对象匹配的catch块,其余的catch块全部忽略。

如果有一段代码不管是否发生异常抛出都有被执行,我们使用关键字finally。

由于finally语句块,在无论是否有异常时都会执行。所以一般用于资源清理工作,比如:

流的关闭,数据库的关闭。

在try块或catch块中,有return语句,finally语句块也会在方法返回之前被执行。

虚拟机关闭时,System .exit(0);   finally块不会执行。

异常的分类:

编译期异常(检查异常):开发者必须处理,否则无法通过编译。

运行期异常(非检查异常):开发者可以处理,也可以不处理,即使不处理也可以通过编译。

所有的运行期异常都是Runtime Exception的子类。

异常的抛出:       主动抛出一个异常。

Throw new Exception();     创建异常对象,并抛出。

 Throw和throws的区别:

Throw是语句,表示显示抛出异常对象。

Throws是方法修饰符,表示该方法可能会抛出某种异常。那么,在调用该方法时,必须处理该方法抛出的异常。

自定义异常:

1、 创建一个类继承与Exception

2、 添加构造方法和普通方法。

3、 在一个方法中抛出异常

4、 在另一个方法中捕获并处理异常。

正则表达式:

正则表达式是使用特定的符号来描述字符串的一种方法。是数据验证的主要手段。

正则表达式本身也是字符串,可以验证指定的字符串,是否匹配该正则表达式描述的格式。

正则表达式使用String的matches()进行匹配。

[ ]:匹配[ ]中描述的任意字符。

表达式

描述

[013]

单个数字0,1,或3

[0-9][0-9]

任意两位数00到99

A[0-4]b[0-5]

由四个字符组成的字符串,第一个字符是A,第二个字符是一个之间的数字,第三字符是b。最后一个字符是0或者5之间

{ }:描述前一个规则可以出现的次数。

表达式

描述

X{N , M}

规则X,最少出现N次,最多出现M次

X{N ,}

规则X,最少出现N次,没有上限限制

X{N}

规则X,只能出现N次,不能多不能少

匹配汉字:\u4e00-\u9fa5;

表达式

描述

+

等价于{1,},最少出现一次,没有上限限制

*

等价于{0,},可以不出现,也可以出现多次

.

匹配任意字符

等价于{0,1},可以不出现,要出现只能出现一次

\d(\D)

等价于[0-9]可匹配数字。\D非数字

\w(\W)

等价于[a-zA-Z0-9].匹配合法标识符。\w为非法标识符

\s(\S)

匹配空格或者回车。\S为非空格和回车

String a =”abc”   和String a = new String(“abc”)的区别:

String a =”abc”,a变量引用的是数据段中的字符串常量对象。

String a = new String(“abc”) ,a变量引用的是堆中的字符串对象。在堆中产生字符串对象,需要以常量池中的字符串常量对象作为模板,将内容拷贝到堆中。

字符串具有不可改变的特性,当对字符串进行添加、删除、替换时,不会更改字符串的内容,而是产生新的字符串对象。

Z字符串操作类StringBuffer,该类允许内容改变。

StringBuffer(缓冲区) :会在缓冲区中开辟一个空间,当对StringBuffer的内容作连接、替换、删除等操作时,不会产生新对象。

如果需要对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法即可。

StringBuilder是StringBuffer的轻量版,Buffer有的方法Builder基本都有

StringBuilder是线程不安全的,StringBuffer是线程安全的。

性能:  StringBuilder >StringBuffer>String.

@Deprecated  标识使方法过时 但是方法还可以用的。

·用户可以通过调用System.gc(),通知虚拟机加快垃圾回收的速度。但不能控制垃圾回收。回收对象之前会调用finalize()方法做一些清理工作。

Final ,finally ,finalist的区别:

Final是修饰符。修饰类,表示该类不能继承,修饰方法,表示该方法不能被重写,修饰变量,表示该变量的值不能改变。

Finally是语句块,和try联用,表示无论是否有异常发生都会执行的语句块,通常用于流的关闭,数据库的关闭。

Finalist 是方法。在object中定义,表示垃圾回收该对象之前,调用该方法完成资源清理操作。

包装类的应用:

包装类允许在对象中描述基本数据类型的数据。由于包装类变量是引用数据类型,所以,可以给包装类变量赋值为null。

包装类对象中包含的数据,不能在允许期间改变。

包装类常用的方法:、

XXXXValue()方法 -----------》显示包装类中封装的数据

包装类类名.parseXXX()方法 ----------》将字符串转化为基本数据类型。

在java中,可以重复利用的组件称为JavaBean。

在开发中,经常需要对对象进行数据的封装,以及对象数据的传输。这一类对象,通常只有属性的定义,没有行为的定义。这一类对象就是狭义的JavaBean。

在java中 ,狭义JavaBean的规范:

1、 Javabean必须包含一个无参数的公有构造方法。

2、 属性全部为私有属性,通过get/set方法对属性进行访问和设置。

3、 需要实现序列化接口。

·集合:

集合的特点:元素类型不同、集合长度可变、空间不固定。

Java中对一些数据结构和算法进行了封装即集合,集合也是一种对象,用于存储、检索、操作和传输对象。

JCF  (Java ………………………)集合框架。它提供了管理集合的接口和类。

集合框架包含三个部分:接口、实现类、算法

集合框架的接口:

Collextion分为两个子接口List和Set :List具有线性,元素可重复   Set的元素不重复

Map :   键值对,一个元素包含两个对象键对象不重复。

HashSet:指向set

实现类:ArrayList   Vector   LinkedList都指向List

算法:Iterator               Arrays                  Collection

      迭代算法接口         数组算法类              集合算法类

  

List接口实现类的选择:  (三种集合的特点:)

ArrayList:底层采用数组实现,遍历元素、追加元素速度快,中间插入和删除元素速度快,线程不安全。ArrayList使用最广泛,集合元素增加或删除操作不频繁时使用。最适合查询。

Vector:与ArrayList类似,底层也用数组实现。但Vector是线程安全的,性能要低于ArrayList。

LinkedList:采用双向链表实现,元素空间不连续。遍历元素速度慢,中间插入和删除元素速度快。一般用于需要在集合的中间位置,频繁增加或删除元素时使用。

HashMap:按键的hash码排列元素,允许键对象或值对象为null值,线程不安全。

Hashtable:按键的hash码排列元素,不允许键对象或值对象为null值,线程安全。

Properties指向Hashtable

TreeMap: 按键的自然顺序排列元素,键对象需要重写hashCode和equals方法。

’JAVA  IO流:

IO体系分为流式部分(IO的主体部分);

流的方向以内存作为参照物,当从数据源中将数据读取到内存中时,称为输入流,也叫读取流。

当从内存中将数据写入到数据源中,称为输出流,也叫写入流。

字节流有两个抽象父类

字符流有两个抽象父类

为什么这些的父类是抽象类?

不同的数据源读写数据的方式会有所不同,所以在字节流和字符流的父类中,预留了读写数据的抽象方法,不同的子类根据自己数据源的特点分别去实现。

输入流的使用步骤:
1、建立流。

2、操作流。

3、关闭流。

IO流操作的本质目的是,完成内存数据和数据源数据的转换。

按照传输内容分:

字节流 --------传输二进制字节数据

字符流---------传输字符数据

对象流 =======传输对象数据

写入流将数据写入数据源时,需要通过flush()刷新语句,才能将数据真正写入数据源。在流关闭时,会自动执行flush()刷新语句。所以,写入流在不关闭时,也不刷新的情况下,有可能写不进数据。

操作文件流时,如果文件不存在,会发生什么情况?

读取流会抛出文件未找到异常。而写入流会创建新文件(文件所在的目录必须存在)。

流操作完毕后,不关闭,会发生什么情况?

不关闭,不但浪费内存资源,而且写入流有可能写不进数据。

对象序列化:

在传输对象时,由于对象的数据庞大,无法直接传输。所以,在传输之前,先将对象打散成字节序列,以利于传输。这个过程,称为序列化过程。

在字节序列到达目的地以后,又需要将字节序列还原成对象。这个过程,称为反序列化过程。

猜你喜欢

转载自www.cnblogs.com/lh-lh/p/11710457.html