黑马程序员技术交流社区

标题: JAVA语言第二阶段基础知识学习简洁总汇 [打印本页]

作者: LTaoo    时间: 2018-1-25 22:46
标题: JAVA语言第二阶段基础知识学习简洁总汇
一 static 关键字

(1)static静态的概述

当我们在定义类时会定义相应的属性和方法。而这些属性和方法都是需要通过创建本类个体对象来进行调用的。假如该类的某个属性或方法该类所有的对象共同拥有的,为了减少代码块的重复性,这时我们就可以通过static关键字来修饰这个属性和方法。static它是静态修饰符,一般用来修饰类中的成员。被static修饰的成员变量或方法属于类,而不再属于这个类的某个对象。其最终的效果是该属性(或方法)被该类的所有对象共享。


(2)静态的优缺点

优点:对对象的共享数据提供单独空间进行存储,没有必要每一个对象都存储一份,节省空间;可以直接被类名调用,不用在堆内存创建对象,使用便捷;

弊端:访问出现局限性。(静态虽好,但只能访问静态)


二 代码块

代码块主要有局部代码块,构造代码块,静态代码块三种;


(1)局部代码块

局部代码块是定义在方法或语句中;以”{}”划定的代码区域,存在于方法中,其作用是控制变量的生命周期(作用域);

(2)构造代码块

构造代码块是定义在类中成员位置的代码块;优先于构造方法执行,构造代码块用于执行所有对象均需要的初始化动作,每创建一个对象均会执行一次构造代码块。

(3)静态代码块

静态代码块是定义在成员位置,使用static修饰的代码块;它优先于主方法执行、优先于构造代码块执行,当以任意形式第一次使用到该类时执行。

该类不管创建多少对象,静态代码块只执行一次。可用于给静态变量赋值,用来给类进行初始化。


三 继承

(1)继承的概述

在程序中,继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系。在形成这一关系体系时,需要使用extends关键字。

继承的使用场景:当多个类有共同的成员变量和成员方法时,这时可以将这些共同点抽取到另外一个类中(父类),再让多个类去继承这个父类,我们的多个类就可以获取到父类中的成员了。

(2)继承的特点

在Java中,类只支持单继承,不允许多继承,但允许多层继承;

方法的重写:在子父类当中,子类的方法和父类的完全一样,子类重写了父类的方法(覆盖),当子类重写了父类的方法之后,使用子类对象调用的就是子类的方法;

方法重写的应用场景:当父类的方法不能完全满足子类使用的时候,既可以保留父类的功能(沿袭、传承),还可以有自己特有的功能;

(3)继承的优缺点

A:优点

提高了代码的复用性

提高了代码的可维护性

B:缺点:

类的耦合性增强了;

开发的原则:高内聚低耦合

内聚:就是自己完成某件事情的能力

耦合:类与类的关系


四 抽象类

(1)抽象类的概述

有的时候,某个父类只是知道子类应该包含怎么样的方法,但是无法准确知道子类如何实现这些方法。分析事物时,发现了共性内容,就出现向上抽取。会有这样一种特殊情况,就是方法功能声明相同,但方法功能主体不同。那么这时也可以抽取,但只抽取方法声明并使用abstract修饰,不抽取方法主体。那么此方法就是一个抽象方法;拥有抽象方法的类就是抽象类。

(2)抽象类的概述

抽象类的特点:

抽象方法只能在抽象类里面;

抽象类和抽象方法必须被abstract修饰;

抽象类不能创建对象(不能实例化);

抽象类中可以有非抽象的方法;

抽象类和类的关系也是继承;

一个类继承了抽象类要么重写所有的抽象方法,要么他自己是抽象类。

五 多态

(1)多态的概述

多态是继封装、继承之后,面向对象的第三大特性。

现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的同学张三既是学生也是人,即出现两种形态。 

Java作为面向对象的语言,同样可以描述一个事物的多种形态。如Student类继承了Person类,一个Student的对象便既是Student,又是Person。

(2)多态成员的特点

成员变量:编译看左边,运行看左边;

成员方法:编译看左边,运行看右边;

静态方法:编译看左边,运行看左边;

(3)多态的优缺点

优点:提高程序可维护性,提高代码的可扩展性;

缺点:无法直接访问子类特有的成员;


六 内部类

将类写在其他类的内部,可以写在其他类的成员位置和局部位置,这时写在其他类内部的类就称为内部类。其他类也称为外部类。

内部类主要有三种:成员内部类,局部内部类,匿名内部类;

(1)成员内部类

定义在外部类中的成员位置。与类中的成员变量相似,可通过外部类对象进行访问;

成员内部类可以使用的修饰符: private, public, procted, final, static, abstract ;

(2)局部内部类

局部内部类,定义在外部类方法中的局部位置。与访问方法中的局部变量相似,可通过调用方法进行访问;




(3)匿名内部类

匿名内部类即没有名字的内部类;作用:匿名内部类是创建某个类型子类对象的快捷方式。


七 Object类和日期相关类

(1)Object类

Object类是Java语言中的根类,即所有类的父类。它中描述的所有方法子类都可以使用。所有类在创建对象的时候,最终找的父类就是Object。

在Object类众多方法中,需着重了解equals方法与toString方法;

toString方法返回的结果是内存地址,在开发中,经常需要按照对象的属性得到相应的字符串表现形式,因此需要重写它。

equals方法,用于比较两个对象是否相同,它其实就是使用两个对象的内存地址在比较。Object类中的equals方法内部使用的就是==比较运算符。

在开发中要比较两个对象是否相同,经常会根据对象中的属性值进行比较,也就是在开发经常需要子类重写equals方法根据对象的属性值进行比较。

(2)日期相关类

日期相关类中主要有Data类和Calendar类;

Data类:

表示特定的瞬间,精确到毫秒,他可以通过方法来设定自己所表示的时间,可以表示任意的时间;

Calendar类:

Calendar是日历类,在Date后出现,替换掉了许多Date的方法。该类将所有可能用到的时间信息封装为静态成员变量,方便获取。


八 Collection集合类


在最顶层的父接口Collection中一定定义了所有子类集合的共同属性和方法,因此我们首先需要学习Collection中共性方法,然后再去针对每个子类集合学习它的特有方法;集合体系如下图所示:




集合的体系结构:

由于不同的数据结构(数据的组织,存储方式),所以JAVA为我们提供了不同的集合;

但是不同德集合他们的功能都是相似,不断的向上提取,将共性抽取出来,这就是集合体系结构形成的原因。

常见的数据结构有:数组,链表,栈,队列;

数组的特点:查询快,增删慢;

链表的特点:查询慢,增删快;

栈 :先进后出;

队 列:先进先出;


九 Map集合类

查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同,如下图。

A:Collection中的集合,元素是孤立存在的(理解为单身),向集合中存储元素采用一个个元素的方式存储

B:Map中的集合,元素是成对存在的(理解为夫妻)。每个元素由键与值两部分组成,通过键可以找对所对应的值。

C:Collection中的集合称为单列集合,Map中的集合称为双列集合。

需要注意的是,Map中的集合不能包含重复的键,值可以重复;每个键只能对应一个值。



十 异常

(1)异常的概述

什么是异常?Java代码在运行时期或编译时期发生的问题就是异常。

在Java中,把异常信息封装成了一个类。当出现了问题时,就会创建异常类对象并抛出异常相关的信息(如异常出现的位置、原因等)。

在Java中使用Exception类来描述异常。它的父类是Throwable。Throwable是Java 语言中所有错误或异常的超类,即祖宗类。在Throwable类中,能够发现与异常Exception平级的有一个Error,它是Throwable的子类,它用来表示java程序中可能会产生的严重错误。解决办法只有一个,修改代码避免Error错误的产生。

(2)异常的处理

异常的处理方式主要有两种:JVM默认处理方式和try...catch方式处理异常;

JVM默认处理方式:如果出现异常我们没有处理,jvm会帮我们进行处理,他会把异常的类型,原因还有位置显示在命令行并且还终止了程序,异常后面的代码将不在执行;

try...catch方式处理异常:捕获:Java中对异常有针对性的语句进行捕获,可以对出现的异常进行指定方式的处理。


十一 IO流

(1)File类

File类是File文件和目录路径名的抽象表示形式。即,Java中把文件或者目录(文件夹)都封装成File对象,这样就可以实现对文件或文件夹进行相关的操作;

其主要功能有:删除功能,判断功能,获取功能;相关方法可以查阅API文档;

(2)字符流与字节流

IO流按数据流向来分可以分为输入流和输出流;再根据数据类型来细分又可以分为字符流(Reader和Writer)和字节流(InputStream和OutputStream);

字符流在对文本文件进行简单的操作时较为快速便捷,但不能对相关的图片,声音等文件进行操作,此时只能用字节流来进行相关的操作;


十二 编码表

编码表:把计算机底层的二进制数据转换成我们能看到的字符

ASCII

GB2312---GBK

Unicode所有的字符都占2个字节

UTF-8长度可变的码表

ANSI:本地编码表gbk

Java中的字符串默认使用的ANSI(gbk)

乱码:编码保持前后一致即可解决



十三 多线程

(1)多线程的概述

A:进程:进程指正在运行的程序。确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能。

B:线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序。

C:简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程

什么是多线程呢?即就是一个程序中有多个线程在同时执行。

多线程与单线程相比,单线程效率低,但安全性较高,而多线程则是效率高,安全性相对较低;

(2)多线程的实现

线程的实现主要有两种方式:继承Thread类和实现Runnable接口;

继承Thread类由于采用的是继承,因此会产生较大局限性,为了解决这一大弊端,因此基本上都采用实现Runnable接口来完成多线程功能;

(3)多线程的安全性解决办法

在上面说过,多线程的特点是效率高,安全性较低,为了解决安全性低这一弊端,JAVA语言提供了synchronized关键词同步方法来进行解决。







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2