Java知识点总结九篇_第1页
Java知识点总结九篇_第2页
Java知识点总结九篇_第3页
Java知识点总结九篇_第4页
Java知识点总结九篇_第5页
已阅读5页,还剩57页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java知识点总结(2)

Java知识点总结(2)「篇一」

4.1定义一个类

*使用class关键字定义类,注意类名大写

*成员属性:成员属性不赋值会有默认值(默认值规则参考PPT)

*成员方法

*构造方法:没有任何返回值,名字与类名一样,构造方法的本意是用来初始

化对象(初始化对象的属性值)

4.2实例化对象:Students=newStudent

*使用new+构造方法实例化对象

*new在堆中开辟了对象的空间,并且给属性赋上默认值

*接下来调用构造方法,执行构造方法中的代码

*最后返回对象的引用

4.3区分引用类型与基本数据类型

*引用类型的变量在内存中有两块区域,一块是引用本身.另一块是引用所指

向的对象

*基本数据类型在内存中只有一块空间:里面存着值

4.4如何操作对象:使用.操作符

*使用对象名.属性操作对象的属性(如:slu.age=18;)

*使用对象名.方法调用对象的方法(如:stu.study);

*this:每个对象都有this,this是指向本身的引用,代表本身

4.5.必须能够独立写出Point3D的代码(题目在PPT±)

5.访问控制,方法定义与调用,重载,方法篁写5・1访问控制5.L1

package包的使用

*使用package定义包:package只能放在代码的第一行

"import:导包,可以到入包下所有importjava.io.*;可以导入具体的一个

类importjava.io.Reader;

*包的作用:1,分类:2,隐藏(封装的作用),3,便于管理

*java本身提供了一些包:java,lang(核心类,此包如需要引

入),java.util(集合框架以及其他常用类),java,io(输入输

出),java,awt,javax.swing(图形)

5.1.2继承(简单概念):使用extends关键字表示继承

*子类继承父类的所有属性

*子类继承父类除private(非同包的时候也除默认的方法)外的所有方法

*子类对象拥有super引用,表示父类的引用,可以使用super明确的调用父类

的方法或属性

5.1.3四个访问级别,从大到小:public,protected,默认,private

*注意访问级别是针对类来讲的,不是针对对象!

*注意类的访问修饰符只能使用public或默认

*学了访问控制后:类的属性都写private,通过set/get方法对属性进行赋

值,取值

5.2重载与重写

1.判断是否是重载,或者是否是重写,如果不是重写或者重载,就不受重写重

载规则的约束

5.2.1重载;一个类当中,有方法名相同,参数不同的方法,称为重载

*不能只改返回值:不能根据方法的返回进行重载

5.2.2重写:在继承当中,子类将父类的方法重新写了一遍:重写的方法与被

重写的方法拥有相同的方法签名(返回值类型,方法名,参数列数)

礼重写的方法能够改变被重写的方法的访问级别,注意只能是相等或者扩大

礼重写的方法不能抛出比被重写方法更多的异常,注意只能缩小异常的范围

礼如果被重写的方法是具体的,重写之后不能改为abstract

5.3类与对象的生命周期

5.3.1类与对象的初始化过程:

*静态属性先初始化,而且仅仅初始化•次

*首先给静态属性进行声明,并赋默认值,然后代码从上往下执行静态代码块

或静态赋值

*每创建一个对象,就先实例化成员属性:首先给成员属性声明,赋默认值,

然后.执行赋值语句

*成员属性初始化后再调用构造方法

5.3.2垃圾回收机制

*java虚拟使用垃圾回收机制进行垃圾回收

*垃圾回收本身是一个线程(当内存不够用的时候,一般会进行垃圾回收)

*垃圾回收不能通过程序来调用,仅仅能够通过System,gc建议虚拟机进行垃

圾回收

*当进行垃圾回收时,会调用对象的finalize方法

5.4单例模式:一个类仅仅能有一个实例(设计模式的一种)

*构造方法必须为私有的

*提供静态的方法来获得对象

*提供静态的属性,该属性是该类的一个对象

6.继承,抽象类,接口

6.1继承:

6.1.1继承的语法:使用extends关键字表示继承

*子类继承父类所有的属性

*私有方法不能被继承

*super关键字表示父类的引用,可以用super来调用父类的方法或属性

6.2.2继承中的构造方法:了解下面的知识点以及实例化对象时代码的执行过

*了•类的构造过程必须调用其基类的构造方法

*子类可以在自己的构造过程中使用super(arg」ist)来调用基类的构造方法

*如果调用super,必须写在子类构造方法的第一行

*可以使用this(argument」ist)调用本类的另外的构造方法

*如果子类的构造方法中没有显示的调用基类的构造方法,系统默认调用基类

无参数的构造方法

*如果子类构造方法中既没有显式的调用基类构造方法,基类中又没有无参数

的构造方法,编译出错

6.3.3对象的转型

*一个基类的引用类型变量可以指向其子类的对象

*一个基类的引用不可以访问其子类对象新增的成员

本可以使用instanceof关键字来判断一个引用类型变量所指向的对象是否是

制定的类型

*子类的对象可以当作基类的对象来使用称作向上转型,反之称为向下转型

*子类可以当成父类来使用,无需显示转换

*父类引用转换为子类引用要进行强制转换

*注意:不兼容的类型之间不能进行相互转换(只有具有直接或间接父子关系的

类才是兼容的类型),否则编译时会报错

*注意:兼容类型之间的转换要看对象的实际类型,因此向卜转化时最好先用

instanceof来判断是否是某个类型,在转换,以免报报错

6.4.4多态:也称运行时绑定:一般是指父类的引用指向子类对象,通过父类

的引用调用被子类重写的方法,这个时候执行的是子类的方法

*一句话总结多态:对象实际是什么类型就调用什么类型的方法

*多态成立的条件:1,要有继承。2,要有重写。3,必须有父类引用指向子类

对象。

6.2抽象类:用abstract修饰的类称为抽象类(抽象的本意是不具体)

1.抽象方法不能有方法体

2.抽象类不能被实例化。

3.含有抽象方法的类必须被声明为抽象类。

4.子类继承抽象类,必须被重写父类的抽象方法,否则本身也必须被声明为抽

象类

5.抽象类中的方法和属性没有其他规则来约束,抽象类中没有抽象的方法是可

以的,抽象类中可以有非抽象的方法和属性

6.3static:静态关键字

6.3.Istalic属性:在类中,用sialic申明的成员变量叫静态变量,他为该

类的公用变量,在第一使用时被初始化,对于该类的所有对象来说,static成员

变量只有一份

6.3.2sialic方法:用static声明的方法为静态方法,在调用该方法时,不

会将对象的引用传递给它,所以static方法中不可以访问非static的成员。

*静态方法中不能访问非静态成员

*静态成员方法没有this引用

*可以通过类名(不需要实例化)或对象引用来访问静态成员

6.4final关键字:

final表示最终的意思

*final的变量的值不能够被改变

"final的成员变量

"final的局部变量(形参)

*final的方法不能够被重写

*final的类不能够被继承

6.5接口:interface

1.使用interface定义一个接口,使用implements实现一个接口

2.接口中的属性只能为publicstaticfinal类型(静态常量)

3.接口中的方法只能为publicabslracl类型

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

5.接口也可以继承接口

7.异常处理

java的异常处理机制

异常的关键字Exception

try,catch,finally,throw,throws关键字

7.1什么是异常,为什么要引入异常

*java程序运行时已错,java就抛出异常,程序立即终止(也可以说程序崩溃)

*java将错误信息封装在异常对象里抛出

*学会查看异常的信息:异常的名字,异常的信息、,程序抛异常的位置

*java引入异常处理机制,是防止程序出错崩溃

7.2java的异常的分类

*java的抛出的错误用异常类来表示,java拥有一个异常体系(有许多异常类,

并旦相互之间具有关系;

*java里面的所有异常都是Throwable的了•类

*java虚拟机的异常是Error的子类,一般不需进行处理(因为没法进行史理)

*除Error之外还有Exception,Exception分为两类:RuntimeException(运

行时异常),被检查异常(除了RuntimeException都是被检查异常)

"RuntimeException(运行时异常,可以不捕获或声明抛出,编译不会报错,一

般是控制不当造成的),可检查异常(必须捕获或声明抛出,这类异常通常需要检测

并处理,一般使用资源时造成的)

*几个常见的异常:NulIPointerException(空指

针),IndcxOutOfBoundsExccption(索引越界),SQLExccption(数据库异

常),lOException(文件异常)

7.3异常的处理方式

*使用try,catch,finally进行处理

*不处理,使用throws,throw交给别人来处理

7.4try,catch,finally中程序的运行过程

*尝试执行try里面的语句

*一次运行当中最多执行一个catch块,如果没有抛出异常,catch块不执行

/finally总会执行,不管有没有抛出异常

*如果try块里面有return语句,finally也会执行

7.5区分RuntimeException与被检查异常

*F^untimcException不需要捕获或声明抛出(但是如果你捕获或声明抛出也不

会有错)

*被检查异常必须要捕获或者声明抛出

Java知识点总结(2)「篇二」

1对象的初始化

(1)非静态对象的初始化在创建对象时,对象所在类的所有数据成员会首先进

行初始化。基本类型::nt型,初始化为0。如果为对象:这些对象会按顺序初始

化。※在所有类成员初始化完成之后,才调用本类的构造方法创建对象。构造方法

的作用就是初始化。(2;静态对象的初始化程序中主类的静态变量会在main方法

执行前初始化。不仅第一次创建对象时,类中的所有静态变量都初始化,并且第一

次访问某类(注意此时未创建此类对象)的静态对象时,所有的静态变量也要按它们

在类中的顺序初始化。

2继承时,对象的初始化过程

(1)主类的超类由高到低按顺序初始化静态成员,无论静态成员是否为

privateo(2)主类静态成员的初始化。(3)主类的超类由高到低进行默认构造方

法的调用。注意,在调用每一个超类的默认构造方法前,先进行对此超类进行非静

态对象的初始化。(4)主类非静态成员的'初始化。(5)调用主类的构造方法。

3关于构造方法

(1)类可以没有构造方法,但如果有多个构造方法,就应该要有默认的构造方

法,否则在继承此类时,需要在子类中显式调用父类的某一个非默认的构造方法

了。(2)在一个构造方法中,只能调用一次其他的构造方法,并且调用构造方法的

语句必须是第一条语句。

4有关public>private和protected

(1)无public修饰的类,可以被其他类访问的条件是:a.两个类在同一文件

中,b.两个类在同一文件夹中,c.两个类在同一软件包中。(2)protected:继承

类和同一软件包的类可访问。(3)如果构造方法为private,那么在其他类中不能

创建该类的对象。

5抽象类

(1)抽象类不能创建对象。(2)如果一个类中一个方法为抽象方法,则这个类

必须为abstract抽象类。(3)继承抽象类的类在类中必须实现抽象类中的抽象方

法。(4)抽象类中可以有抽象方法,也可有非抽象方法。抽象方法不能为

privatco(5)间接继承抽象类的类可以不给出抽象方法的定义。

6final关键字

(1)一个对象是常量,不代表不能转变对象的成员,仍可以其成员进行操作。

(2)常量在使用前必须赋值,但除了在声明的同时初始化外,就只能在构造方法中

初始化。(3)final修饰的方法不能被重置(在子类中不能出现同名方法)。

(4)如果声明一个类为final,则所有的方法均为final,无论其是否被

final修饰,但数据成员可为final也可不是。

7接口interface(用implements来实现接口)

(1)接口中的所有数据均为static和final即静态常量。尽管可以不用这两

个关键字修饰,但必须给常量赋初值。(2)接口中的方法均为public,在实现接

口类中,实现方法必须可public关键字。(3)如果使用public来修饰接口,则接

口必须与文件名相同。

8多重继承

(1)一个类继承了一个类和接口,那么必须将类写在前面,接口写在后面,接

口之间用逗号分隔。(2:接口之间可多重继承,注意使用关键字extends。(3)一

个类虽只实现了一个接口,但不仅要实现这个接口的所有方法,还要实现这个接口

继承的接口的方法,接口中的所有方法均须在类中实现。

9接口的嵌入

(1)接口嵌入类中,可以使用private修饰。此时,接口只能在所在的类中实

现,其他类不能访问。12)嵌入接口中的接口一定要为public。

10类的嵌入

(1)类可以嵌入另一个类中,但不能嵌入接口中。(2)在静态方法或其他方法

中,不能直接创建内部类对象,需通过手段来取得。手段有两种:classA{class

B{}BgetB(Bb=newBreturnb;}}staticvoidm{Aa=new

AA.Bab=a.getB//或者是A.Bab=a.newB}(3)一个类继承了另一个类的内

部类,因为超类是内部类,而内部类的构造方法不能自动被调用,这样就需要在子

类的构造方法中明确的调用超类的构造方法。接上例:classCextends

A.B{C{newAsuper//这一句就实现了对内部类构造方法的调

用。}}构造方法也可这样写:C(Aa){a.super}〃使用这个构

造方法创建对象,要写成Cc=newC(a);a是A的对象。

11异常类

JAVA中除了RunTincException类,其他异常均须捕获或抛出。

Java知识点总结(2)「篇三」

java概述:

1991年Sun公司的JamesGosling(詹姆斯♦高斯林)等人开始开发名称为

Oak的语言,希望用于控制嵌入在有线电视交换盒、PDA等的微处理器;

1994年将Oak语言更名为Java;

Java的三种技术架构:

JAVAEE:JavaPlatformEnterpriseEdition,开发企业环境卜的应用程序,

主要针对web程序开发;

JAVASE:JavaPlatformStandardEdition,完成桌面应用程序的开发,是其

它两者的基础:

JAVAME:JavaPlatformMicroEdition,开发电子消费产品和嵌入式设备,

如手机中的程序;

RJDK:JavaDevelopmentKit,java的开发和运行环境,java的开发工具

和jre<>

2>JRE:JavaRuntimeEnvironment,java程序的运行环境,java运行的所

需的类库+JVM(java虚拟机)0

3、配置环境变量:让javaJdkin目录下的工具,可以在任意目录下运行,原

因是,将该工具所在目录告诉了系统,当使用该工具时,由系统帮我们去找指定的

目录。

环境变量的配置:

1):永久配置方式:JAVA_HOME=%安装路径%Javajdk

path=%JAVAJIOME%m

2):临时配置方式:setpath=%path%;C:ProgramFilesjavajdkin

特点:系统默认先去当前路径下找要执行的程序,如果没有,再去path中设

置的路径下找。

classpath的配置:

1):永久配置方式:classpath=;c;e:

2):临时配置方式:setclasspath=;c;e:

注意:在定义classpath环境变量时,需要注意的情况

如果没有定义环境变量classpath,java启动jvm后,会在当前目录下查找要

运行的类文件;

如果指定了classpath,那么会在指定的目录下查找要运行的类文件。

还会在当前目录找吗?两种情况:

1):如果classpath的值结尾处有分号,在具体路径中没有找到运行的类,

会默认在当前目录再找一次。

2):如果classpath的值结果出没有分号,在具体的路径中没有找到运行的

类,不会再当前目录找。

一般不指定分号,如果没有在指定目录下找到要运行的类文件,就报错,这样

可以调试程序。

4、javac命令和java命令做什么事情呢?

要知道java是分两部分的:一个是编译,一个是运行。

javac:负责的是编译的部分,当执行javac时,会启动java的编译器程序。

对指定扩展名的.java文件进行编译。生成了jvm可以识别的字节码文件。也就

是class文件,也就是java的运行程序。

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

进行执行。

一个文件要被执行,必须要有一个执行的起始点,这个起始点就是main函数。

java语法基础:

1、关键字:其实就是某种语言赋予了特殊含义的单词。

保留字:其实就是还没有赋予特殊含义,但是准备日后要使用过的单词。

2、标示符:其实就是在程序中自定义的名词。比如类名,变量名,函数名。

包含0-9、a-z、$、—;

注意:

1),数字不可以开头。

2),不可以使用关键字。

3、常量:是在程序中的不会变化的数据。

4、变量:其实就是内存中的一个存储空间,用于存储常量数据。

作用:方便于运算。因为有些数据不确定。所以确定该数据的名词和存储空

问。

特点:变量空间可以重复使用。

什么时候定义变量?只要是数据不确定的时候,就定义变量。

变量空间的开辟需要什么要素呢?

1、这个空间要存储什么数据?数据类型。

2、这个空间叫什么名字啊?变量名称。

3、这个空间的第一次的数据是什么?变量的初始化值。

变量的作用域和生存期:

变量的作用域:

作用域从变量定义的位置开始,到该变量所在的那对大括号结束:

生命周期:

变量从定义的位置开始就在内存中活了;

变量到达它所在的作用域的时候就在内存中消失了;

数据类型:

1):基本数据类型:byte、shortsini、long、float、double>char、

boolean

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

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

>double

自动类型转换:从低级别到高级别,系统自动转的;

强制类型转换:什么情况下使用?把一个高级别的数赋给一个别该数的级别低

的变量;

运算符号:

1)、算术运算符。

+-*/%机任何整数模2不是。就是1,所以只要改变被模数就可以实现开

关运算。

+:连接符。

++,一

2)、赋值运算符。

=+=-=*=/=%=

3)、比较运算符。

特点:该运算符的特点是:运算完的结果,要么是true,要么是false。

4)、逻辑运算符。

&|!&&|

逻辑运算符除了!外都是用于连接两个boolean类型表达式。

&:只有两边都为true结果是true。否则就是false。

I:只要两边都为false结果是false,否则就是true

八:异或:和或有点不一样。

两边结果一样,就为false。

两边结果不一样,就为true。

&和&&区别:&:无论左边结果是什么,右边都参与运算。

&&:短路与,如果左边为false,那么右边不参数与运算。

I和II区别:I:两边都运算。

II:短路或,如果左边为true,那么右边不参与运算。

5)、位运算符:用于操作二进制位的运算符。

&r

«»>〉>(无符号右移)

练习:对两个变量的数据进行互换。不需要第三方变量。

inta=3,b=5;—>b=3,a=5;

a=a+b;a=8:

b=a-b;b=3:

a=a-b;a=5:

a=a八b;//

b=a-b;//b=a八b-b=a

a=a"b;//a=a"b"a=b;

练习:高效的算出2*8=2«3;

5、语句。

Ifswitchdowhiewhilefor

这些语句什么时候用?

1)>当判断固定个数的值的时候,可以使用if,也可以使用switch。

但是建议使用switch,效率相对较高。

switch(变量){

case值:要执行的语句;break;

default:要执行的语句;

)

工作原理:用小括号中的变量的值依次和case后面的值进行对比,和哪个

case后面的值相同了

就执行哪个case后面的语句,如果没有相同的则执行default后面的语句;

细节:1):break是可以省略的,如果省略了就一直执行到遇到break为

止;

2):switch后面的小括号中的变量应该是byte,char,short,int四种类型中

的一种;

3):default可以写在switch结构中的任意位置;如果将default语句放在

了第一行,则不管expression与case中的value是否匹配,程序会从default开

始执行直到第一个break出现。

2)、当判断数据范围,获取判断运算结果boolean类型时,需要使用if,

3)、当某些语句需要执行很多次时,就用循环结构。

while和for可以进行互换。

区别在于:如果需要定义变量控制循环次数。建议使用for。因为for循环完

毕,变量在内存中释放。

break:作用于switch,和循环语句,用于跳出,或者称为结束。

break语句单独存在时,下面不要定义其他语句,因为执行不到,编译会失

败。当循环嵌套时,break只跳出当前所在循环。要跳出嵌套中的外部循环,只要

给循环起名字即可,这个名字称之为标号。

continue:只作用于循环结构,继续循环用的。

作用:结束本次循环,继续下次循环。该语句单独存在时,下面不可以定义语

句,执行不到。

6、函数:为了提高代码的复用性,可以将其定义成一个单独的功能,该功能

的体现就是java中的函数。函数就是体现之」

java中的函数的定义格式:

修饰符返回值类型函数名(参数类型形式参数1,参数类型形式参数1,)(

执行语句;

return返回值;

当函数没有具体的.返回值时,返回的返回值类型用void关键字表示。

如果函数的返回值类型是void时;return语句可以省略不写的,系统会帮你

自动加上。

return的作用:结束函数。结束功能。

如何定义一个函数?

函数其实就是一个功能,定义函数就是实现功能,通过两个明确来完成:

1)、明确该功能的运算完的结果,其实是在明确这个函数的返回值类型。

2)、在实现该功能的过程中是否有未知内容参与了运算,其实就是在明确这

个函数的参数列表(参数类型&参数个数)。

函数的作用:

1)、用于定义功能。

2)、用于封装代码提高代码的复用性。

注意:函数中只能调用函数,不能定义函数。

主函数:

1)、保证该类的独立运行。

2)、因为它是程序的入口。

3)、因为它在被jvm调用。

函数定义名称是为叶么呢?

答:1)、为了对该功能进行标示,方便于调用。

2)、为了通过名称就可以明确函数的功能,为了增加代码的阅读性。

重载的定义是:在一个类中,如果出现了两个或者两个以上的同名函数,只要

它们的参数的个数,或者参数的类型不同,即可称之为该函数重载了。

如何区分重载:当函数同名时,只看参数列表。和返回值类型没关系。

7、数组:用于存储同一类型数据的一个容器。好处:可以对该容器中的数据

进行编号,从0开始。数组用于封装数据,就是一个具体的实体。

如何在java中表现一个数组呢?两种表现形式。

1)、元素类型口变量名二new元素类型[元素的个数];

2)、元素类型口变量名={元素1,元素2.};

元素类型口变量名二new元素类型□{元素1,元素2.};

Java知识点总结(2)「篇四」

1.Java中的原始数据类型都有哪些,它们的大小及对应的封装类是什么?

bvte---1byte----Bvte

short---2bytes---Short

int---4bytes----Integer

long-----8bytes-----Long

float-----4bytes-----Float

double-----8bytes-----Doub1e

char-----2bytes-----Character

boolean

boolean数据类型非true即false。

这个数据类型表示1bit,但是它的大小并没芍精确定义。

《Java虚拟机规范》中如是说:“虽然定义了boolean这种数据类型,但是

只对它提供了非常有限的支持。在Java虚拟机中没有任何供boolean值专用的字

节码指令,Java语言表达式所操作的boolean值,在编译之后都使用Java虚拟机

中的int数据类型来代替,而boolean数组将会被编码成Java虚拟机的byte数

组,每个元素boolean元素占8位”。这样我们可以得出boolean类型单独使用是

4个字节,在数组中又是1个字节。

那虚拟机为什么要用int来代替boolean呢?为什么不用byte或short,这

样不是更节省内存空间吗?

实际上,使用int的原因是,对于当下32位的CPU来说,一次进行32位的数

据交换更加高效。

综上,我们可以知道:官方文档对boolean类型没有给出精确的定义,《Java

虚拟机规范》给出了“单独时使用4个字节,boolean数组时1个字节”的定义,

具体还要看虚拟机实现是否按照规范来,所以1个字节、4个字节都是有可能的。

这其实是一种时空权衡。boolean类型的封装类是Boolean。

2.谈一谈”="与"equals〃的区别。

《ThinkinJava))中说:“关系操作符生成的是一个boolean结果,它们计

算的是操作数的值之间的关系”。〃二二〃判断的是两个对象的内存地址是否一样,

适用于原始数据类型和枚举类型(它们的变量存储的是值本身,而引用类型变量存

储的是引用);equals是Object类的方法,Object对它的实现是比较内存地址,

我们可以重写这个方法来自定义“相等”这个概念。比如类库中的String、Date

等类就对这个方法进行了重写。综上,对于枚举类型和原始数据类型的相等性比

较,应该使用〃==〃:对于引用类型的相等性比较,应该使用equals方法。

3.Java中的四种引用及其应用场景是什么?

强引用:通常我们使用new操作符创建一个对象时所返回的引用即为强引用

软引用:若一个对象只能通过软引用到达,那么这个对象在内存不足时会被回

收,可用于图片缓存中,内存不足时系统会自动回收不再使用的Bitmap

弱引用:若一个对象只能通过弱引用到达,那么它就会被回收(即使内存充

足),同样可用于图片缓存中,这时候只要Bitmap不再使用就会被回收

虚引用:虚引用是Java中最“弱”的引用,通过它甚至无法获取被引用的对

象,它存在的唯一作用就是当它指向的对象回收时,它本身会被加入到引用队列

中,这样我们可以知道它指向的对象何时被销毁。

4.object中定义了哪些方法?

cloncequalshashCodctoStringnotifynotifyAllwaitfinalizcgctClass

5.hashCode的作用是什么?

请参见散列表的基本原理与实现

6.ArrayList,LinkedList,Vector的区别是什么?

ArrayList:内部采用数组存储元素,支持高效随机访问,支持动态调整大小

LinkedList:内部采用链表来存储元素,支持快速插入/删除元素,但不支持

高效地随机访问

Vector:可以看作线程安全版的ArrayList

7.String,StringBuilder,StringBuffer的区别是什么?

String:不可变的字符序列,若要向其中添加新字符需要创建一个新的

String对象

StringBuilder:可变字符序列,支持向其中添加新字符(无需创建新对象)

StringBuffer:可以看作线程安全版的StringBuilder

8.Map,Set,List,Queue>Stack的特点及用法。

Map:Java中存储键值对的数据类型都实现了这个接口,表示“映射表”,支

持的两个核心操作是get(Objectkey)以及pul(Kkey,Vvalue),分别用来获取

键对应的值以及向映射表中插入键值对。

Set:实现了这个接口的集合类型中不允许存在重复的元素,代表数学意义上

的“集合”。它所支持的核心操作有add(Ee),remove(Objecto),

contains(Object。),分别用于添加元素,删除元素以及判断给定元素是否存在于

集中。

List:Java中集合框架中的列表类型都实现了这个接口,表示一种有序序

列。支持get(intindex),add(Ee)等操作。

Queue:Java集合框架中的队列接口,代表了“先进先出”队列。支持add(E

element),remove等操作。

Stack:Java集合框架中表示堆栈的数据类型,堆栈是一种“后进先出”的数

据结构。支持push(Eitem),pop等操作。

更详细的说明请参考官方文档,对相关数据结构不太熟悉的同学可以参考《算

法导论》或其他相关书籍。

9.HashMap和HashTable的区别

HashTable是线程安全的,而HashMap不是

HashMap中允许存在null键和null值,而HashTable中不允许

10.HashMap的实现原理

简单的说,HashMap的底层实现是“基于拉链法的散列表”。

详细分析请参考深入解析HashMap>HashTable

11.ConcurrentHashMap的实现原理

ConcurrentHashMap是支持并发读写的HashMap,它的特点是读取数据时无需

加锁,写数据时可以保证加锁粒度尽可能的小。由于其内部采用“分段存储”,只

需对要进行写操作的数据所在的“段”进行加锁。关于ConcurrentHashMap底层实

现的详细分析请参考Java并发编程:并发容器之ConcurentHashMap

12.TreeMap,LinkedHashMap,HashMap的区别是什么?

HashMap的底层实现是散列表,因此它内部存储的元素是无序的;

TreeMap的底层实现是红黑树,所以它内部的元素的有序的。排序的依据是自

然序或者是创建TreeMap时所提供的比较器(Comparator)对象。

LinkedHashMap可以看作能够记住插入元素的顺序的HashMapo

13.Collection与Collections的'区别是什么?

Collection是Java集合框架中的基本接口;

Collections是Java集合框架提供的一个工具类,其中包含了大量用于操作

或返回集合的静态方法。

14.对于i(try-catch-finallyw,若try语句块中包含“return”语句,

finally语句块会执行吗?

会执行。只有两种情况finally块中的语句不会被执行:

调用了System.exit方法;

JVM“崩溃”了。

15.Java中的异常层次结构

Java中的异常层次结构如下图所示:

我们可以看到Throwable类是异常层级中的基类。

Error类表示内部错误,这类错误使我们无法控制的;Exception表示异常,

RuntimeException及其子类属于未检查异常,这类异常包括

ArrayTndexOutOfBoundsExceptionsNulIPointerException等,我们应该通过条

件判断等方式语句避免未检查异常的发生。lOExccption及其子类属于已检查异

常,编译器会检查我们是否为所有可能抛出的已检查异常提供了异常处理器,若没

有则会报错。对于未检查异常,我们无需捕获(当然Java也允许我们捕获,但我

们应该做的事避免未检查异常的发生)。

16.Java面向对象的三个特征与含义

三大特征:封装、继承、多态。详细介绍请戳Java面向对象三大特性

17.Override,Overload的含义与区别

Override表示“重写”,是子类对父类中同一方法的重新定义

Overload表示“重载”,也就是定义一个与己定义方法名称相同但签名不同

的新方法

18.接口与抽象类的区别

接口是一种约定,实现接口的类要遵循这个约定;

抽象类本质上是一个类,使用抽象类的代价要比接口大。

接口与抽象类的对比如下:

抽象类中可以包含属性,方法(包含抽象方法与有着具体实现的方法),常

量;接口只能包含常量和方法声明。

抽象类中的方法和成员变量可以定义可见性(比如public、private等);而

接口中的方法只能为public(缺省为public)。

一个子类只能有一个父类(具体类或抽象类);而一个接口可以继承一个多个

接口,一个类也可以实现多个接口。

子类中实现父类中的抽象方法时,可见性可以大于等于父类中的;而接口实现

类中的接口方法的可见性只能与接口中相同(public)0

19.静态内部类与非静态内部类的区别

静态内部类不会持有外围类的引用,而非静态内部类会隐式持有外围类的一个

引用。

20.Java中多态的实现原理

所谓多态,指的就是父类引用指向子类对象,调用方法时会调用子类的实现而

不是父类的实现。多态的实现的关键在于“动态绑定”。详细介绍请戳Java动态

绑定的内部实现机制

21.简述Java中创建新线程的两种方法

继承Thread类(假设子类为MyThread),并重写run方法,然后new一个

MyThread对象并对其调用start即可启动新线程。

实现Runnable接口(假设实现类为MyRurmable),而后将MyRunnable对象

作为参数传入Thread构造器,在得到的Thread对象上调用start方法即可。

22.简述Java中进行线程同步的方法

volatile:JavaMemoryModel保证了对同一个volatile变量的写happens

before对它的读;

synchronized:可以来对一个代码块或是对一个方法上锁,被“锁住”的地方

称为临界区,进入临界区的线程会获取对象的monitor,这样其他尝试进入临界区

的线程会因无法获取monitor而被阻塞。由于等待另一个线程释放monitor而被阻

塞的线程无法被中断。

ReentrantLock:尝试获取锁的线程可以被中断并可以设置超时参数。

Java知识点总结(2)「篇五」

1)、保证该类的独立运行。

2)、因为它是程序的入口。

3)、因为它在被jvm调用。

函数定义名称是为叶么呢?

答:1)、为了对该功能进行标示,方便于调用。

2)、为了通过名称就可以明确函数的功能,为了增加代码的阅读性。

重我的定义是:在一个类中,如果出现了两个或者两个以上的同名函数,只要

它们的参数的个数,或者参数的类型不同,即可称之为该函数重载了。

如何区分重载:当函数同名时,只看参数列表。和返回值类型没关系。

7、数组;用于存储同一类型数据的一个容器。好处;可以对该容器中的数据

进行编号,从0开始。数组用于封装数据,就是一个具体的实体。

如何在java中表现•个数组呢?两种表现形式。

1)、元素类型口变量名=new元素类型[元素的个数];

2)、元素类型口变量名=(元素1,元素2.);

元素类型口变量名=new元素类型口{元素1,元素2.};

〃二分查找法。必须有前提:数组中的元素要有序。

publicstaticinthalfSeach_2(int[]arr,intkey){

intmin,max,mid;

min=0;

max=arr.length-1;

mid=(max+min)»1;//(max+min)/2;

while(arr[mid]!=key){

if(key>arr[mid])(

min=mid+1;

)

elseif(key

max=mid-1;

if(max

return-1;

mid=(max+min)»1;

)

returnmid;

}

java分了5片内存。

1:寄存器。2:本地方法区。3:方法区。4:栈。5:堆。

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

量);

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

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

的。

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

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

3:垃圾回收机制。

三:面向对象:★★★★★

特点:1:将复杂的事情简单化。

2:面向对象将以前的过程中的执行者,变成了指挥者。

3:面向对象这种思想是符合现在人们思考习惯的一种思想。

过程和对象在我们的程序中是如何体现的呢?过程其实就是函数;对象是将函数

等一些内容进行了封装。

匿名对象使用场景:

1:当对方法只进行一次调用的时候,可以使用匿名对象。

2:当对象对成员进行多次调用时;不能使用匿名对象。必须给对象起名字。

在类中定义其实都弥之为成员。成员有两种:

1:成员变量:其实对应的就是事物的属性。

2:成员函数:其实对应的就是事物的行为。

所以,其实定义类,就是在定义成员变量和成员函数。但是在定义前,必须先

要对事物进行属性和行为的分析,才可以用代码来体现。

privateintage;//私有的访问权限最低,只有在本类中的访问有效。

注意:私有仅仅是封装的一种体现形式而己。

私有的成员:其他类不能直接创建对象访问,所以只有通过本类对外提供具体

的访问方式来完成对私有的访问,可以通过对外提供函数的形式对其进行访问。

好处:可以在函数中加入逻辑判断等操作,对数据进行判断等操作。

总结:开发时,记住,属性是用于存储数据的,直接被访问,容易出现安全隐

患,所以,类中的属性通常被私有化,并对外提供公共的访问方法。

这个方法一般有两个,规范写法:对于属性xxx,可以使用setXXXgelXXX对

其进行操作。

类中怎么没有定义主函数呢?

注意:主函数的存在,仅为该类是否需要独立运行,如果不需要,主函数是不

用定义的。

主函数的解释:保证所在类的独立运行,是程序的入口,被jvm调用。

成员变量和局部变量的区别:

1:成员变量直接定义在类中。

局部变量定义在方法中,参数上,语句中。

2:成员变量在这个类中有效。

局部变量只在自己所属的大括号内有效,大括号结束,局部变量失去作用域。

3:成员变量存在于堆内存中,随着对象的产生而存在,消失而消失。

局部变量存在于栈内存中,随着所属区域的运行而存在,结束而释放。

构造函数:用于给对象进行初始化,是给与之对应的对象进行初始化,它具有

针对性,函数中的一种。

特点:

1:该函数的名称和所在类的名称相同。

2:不需要定义返回值类型。

3:该函数没有具体的返回值。

记住:所有对象创建时,都需要初始化才可以使用。

注意事项:一个类在定义时,如果没有定义过构造函数,那么该类中会自动生

成一个空参数的构造函数,为了方便该类创建对象,完成初始化。如果在类中自定

义了构造函数,那么默认的构造函数就没有了。

一个类中,可以有多个构造函数,因为它们的函数名称都相同,所以只能通过

参数列表来区分。所以,一个类中如果出现多个构造函数。它们的存在是以重载体

现的。

构造函数和一般函数有什么区别呢?

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

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

行一次。

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

什么时候使用构造函数呢?

分析事物时,发现具体事物一出现,就具备了一些特征,那就将这些特征定义

到构造函数内。

构造代码块和构造函数有什么区别?

构造代码块:是给所有的对象进行初始化,也就是说,所有的对象都会调用一

个代码块,只要对象一建立,就会调用这个代码块。

构造函数:是给与之对应的对象进行初始化,它具有针对性。

aPersonp=newPersonn

创建一个对象都在内存中做了什么事情?

1:先将硬盘上指定位置的Person,class文件加载进内存。

2:执行main方法时,在栈内存中开辟了main方法的空间(压栈-进栈),然后

在main方法的栈区分配了一个变量p。

3:在堆内存中开辟一个实体空间,分配了一个内存首地址值。new

4:在该实体空间中进行属性的空间分配,并进行了默认初始化。

5:对空间中的属性进行显示初始化。

6:进行实体的构造代码块初始化。

7:调用该实体对应的构造函数,进行构造函数初始化。

8:将首地址赋值给p,p变量就引用了该实体。(指向了该对象)

封装(面向对象特征之一):是指隐藏对象的属性和实现细节,仅对外提供公

共访问方式。

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

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

法对其访问。

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

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

象,就是哪个对象的引用。

开发时,什么时候使用this呢?

在定义功能时,如果该功能内部使用到了调用该功能的对象,这时就用this

来表示这个对象。

this还可以用于构造函数间的调用。

调用格式:this(实际参数);

this对象后面跟上.调用的是成员属性和成员方法(一般方法);

this对象后面跟上调用的是本类中的对应参数的构造函数。

注意:用this调用构造函数,必须定义在构造函数的第一行。因为构造函数

是用于初始化的,所以初始化动作一定要执行。否则编译失败。

static:★★★关键字,是一个修饰符,用于修饰成员(成员变量和成员函

数)。

特点;

1、想要实现对象中的共性数据的对象共享,可以将这个数据进行静态修饰。

2、被静态修饰的成员,可以直接被类名所调用。也就是说,静态的成员多了

一种调用方式。类名.静态方式。

3、静态随着类的加载而加载,而且优先于对象存在。

弊端:

1、有些数据是对象特有的数据,是不可以被静态修饰的。因为那样的话,特

有数据会变成对象的共享数据。这样对事物的描述就出了问题。所以,在定义静态

时,必须要明确,这个数据是否是被对象所共享的。

2、静态方法只能访问静态成员,不可以访问非静态成员。

因为静态方法加载时,优先于对象存在,所以没有办法访问对象中的成员。

3、静态方法中不能使用this,super关键字。

因为Ihis代表对象,而静态在时,有可能没有对象,所以this无法使用。

4、主函数是静态的。

什么时候定义静态成员呢?或者说:定义成员时,到底需不需要被静态修饰呢?

成员分两种:

1、成员变量。(数据共享时静态化)

该成员变量的数据是否是所有对象都一样:

如果是,那么该变量需要被静态修饰,因为是共享的数据。

如果不是,那么就说这是对象的特有数据,要存储到对象中。

2、成员函数。(方法中没有调用特有数据时就定义成静态)

如果判断成员函数是否需要被静态修饰呢?

只要参考,该函数内是否访问了对象中的特有数据:

如果有访问特有数据,那方法不能被静态修饰。

如果没有访问过特有数据,那么这个方法需要被静态修饰。

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

1、成员变量所属于对象,所以也称为实例变量。

静态变量所属于类,所以也称为类变量。

2、成员变量存在于堆内存中。

静态变量存在于方法区中。

3、成员变量随着对象创建而存在,随着对象被回收而消失。

静态变量随着类的加载而存在,随着类的消失而消失。

4、成员变量只能被对象所调用。

静态变量可以被对象调用,也可以被类名调用。

所以,成员变量可以称为对象的特有数据,静态变量称为对象的共享数据。

静态的注意:静态的生命周期很长。

静态代码块:就是一个有静态关键字标示的一个代码块区域,定义在类中。

作用:可以完成类的初始化,静态代码块随着类的加载而执行,而且只执行一

次(new多个对象就只执行一次)。如果和主函数在同一类中,优先于主函数执行。

Public:访问权限最大。

static:不需要对象,直接类名即可。

void:主函数没有返回值。

Main:主函数特定的名称。

(String[]args):主函数的参数,是一个字符串数组类型的参数,jvm调用

main方法时,传递的实际参数是newString[。]。

jvm默认传递的是长度为0的字符串数组,我们在运行该类时,也可以指定具

体的参数进行传递。可以在控制台,运行该类时,在后面加入参数。参数之间通过

空格隔开。jvm会自动将这些字符串参数作为args数组中的元素,进行存储。

静态代码块、构造弋码块、构造函数同时存在时的执行顺序:静态代码块d

构造代码块a构造函数;

生成Java帮助文档:命令格式:javadoc-d文件夹名-auther-version

*.java

〃/格式

*类描述

*@author作者名

*@version版本号

*/

/

*方法描述

*@param参数描述

*@return返回值描述

*/

设计模式:解决问题最行之有效的思想。是一套被反复使用、多数人知晓的、

经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码

更容易被他人理解、保证代码可靠性。

Java知识点总结(2)「篇六」

java基本知识点总结

Java编程语言是面向对象的,处理的最小的完整单元为对象。而现实生活中

具有共同特性的对象的油象就称之为类。以下是java基本知识点总结,欢迎阅

读。

1.Java是什么?java的运行机制

Java是由SunMicrosystems公司于1995年5月推出的高级程序设计语言。

是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以

理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。

Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许

程序员以优雅的思维方式进行复杂的编程。

Java具有简单性、面向对象、分布式、健壮性、安全性、平台的独立与可移

植性、多线程、动态性等特点。Java可以编写桌面应用程序、Web应用程序、分

布式系统和嵌入式系统应用程序等。

关于java名字的由来还有一个小趣闻,java创建之初的一天,几位Java成

员组的会员正在讨论给这个新的语言取什么名字,当时他们正在咖啡馆喝着

Java(爪哇)咖啡,有一个人灵机一动说就叫Java怎样,这个提议得到了其他人的

赞同,于是,Java这个名字就这样传开了。原来看SUN的JAVA标识没去多想,现

在看看,这不就是一杯正冒着热气的咖啡吗?

JVM作为Java运行的基础,很难相信对于JVM一点都不了解的人可以把Java

语言吃得很透。对于刚刚接触Java的人来说,JVM相关的知识不一定需要理解很

深,对此里面的概念有一些简单的了解即可。不过对于一个有着3年以上Java经

验的资深开发者来说,不会JVM几乎是不可接受的。

在JVM这个大类中,我认为需要掌握的知识有:

1.JVM内存模型和结构

2.GC原理,性能调优

3.调优:ThreadDump,分析内存结构

4.class二进制字节码结构,classloader体系,class加载过程,实

例创建过程

5.方法执行过程

6.Java各个大版本更新提供的新特性(需要简单了解)

2.java变量

在Java语言中,所有的变量在使用前必须声明。声明变量的基本格式如下:

Java语言支持的变量类型有:

类变量:独立于方法之外的变量,用static修饰。

实例变量:独立于方法之外的变量,不过没有static修饰。

局部变量:类的方法中的变量。

3.数据类型

这条没有什么好多说的,无非就是Java中的基本类型和对象类型的掌握。可

以再了解一些JDK如何自动转换方面的知识,包括装箱拆箱等,还要注意避免装箱

之后的类型相等的判断

主要知识点:

基本类型:int,long,float,double,boolean

对应的对象类型:Integer等类型到基本类型的转换,装箱和拆箱

Object类型;equals,hashcode

String类型的特点

4.运算符

Java的运算符,分为四类:

算数运算符、关系运算符、逻辑运算符、位运算符。

算数运算符(9):+-*/%++—

关系运算符(6):==!=>>=<<=

逻辑运算符(6):&&||!'&|

位运算符(7):&|~->><<>»

逻辑运算符除了!外都是用于连接两个boolean类型表达式。

5.数据类型转换

在实际的使用中,经常需要在不同类型的值之间进行操作,这就需要一种新的

语法来适应这种需要,这个语法就是数据类型转换。

Java语言中的数据类型转换有两种:

自动类型转换:编译器自动完成类型转换,不需要在程序中编写代码。

强制类型转换:强制编译器进行类型转换,必须在程序中编写代码。

由于基本数据类型中boolean类型不是数字型,所以基本数据类型的转换是

出了boolean类型以外的其它7种类型之间的转换。下面来具体介绍两种类型转

换的规则、适用场合以及使用时需要注意的问题。

自动类型转换

自动类型转换,也称为隐式类型转换,是指不需要书写代码,由系统自动完成

的类型转换,由于实际开发中这种类型转换很多,所以java语言在设计时,没有

为该操作设计语法,而是由JVV自动完成。

转换规则:从存储范围小的类型到存储范围大的类型。

具体规则为:byte->short(char)fini->longffloal-double

也就是说byte类型的变量可以自动转换为short类型,示例代码:

shortsh=b;这里在赋值时,JVM首先将b的值转换为short类型,然后

再赋值给sho

在类型转换时可以跳跃。示例代码:

注意问题:在整数之间进行类型转换时,数值不发生改变,而将整数类型,特

别是

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论