第一篇:《JAVA基础》基本概念总结
《JAVA基础》基本概念总结
1、在JAVA中所有万物皆对象,所有的代码都要写在一个类中,在类中只能包含属性(变量)和方法(函数),其它代码必须写在某一个方法中,方法与方法之间是平行的,不能在方法中定义方法。
2、如果一个类名使用了public修饰符,则包含该类的JAVA文件名必须该类名一样,一个JAVA文件中只能有一个类前面可以用public修饰符。
3、类是客观实体的抽象,包含属性(该类的数据),和对属性进行操作的方法,为了避免用户对类的属性进行误操作,我们一般把类的属性定义为私有的,并提供相应的get与 set方法去引用和修改这些属性。
4、类的属性与方法可以使用static修饰符,用static修饰的属性与方法是该类的所有对象所共享的,它们可以直接通过类名去引用,在静态方法中只能引用该类的静态变量与静态方法,因为非静态的属性与方法在该类没有被实例化之前是不存在的,即没有相应的执行空间,为了使用的方便,我们可以把不依赖于类的属性(即在方法中不对类的属性进行操作)的方法定义为静态的。
5、构造函数是当一个类被实例化时执行的一段代码,它决定了该类被实例化后的状态,其名称与相应的类名一样,并且不写返回值的类型,我们一般在构造函数中对类的属性进行初始化。当不写构造函数时,系统会给我们提供一个不带参数的空构造函数,如果我们写了一个带参的构造函数,系统就不再提供不带参的构造构数了。
6、为了引用一个类中定义的非静态属性与方法,我们需要实例化一个该类的对象,通过该对象去引用相应的方法。(这是我们实例化一个类的最直接的原因)
7、继承可以实现代码的复用,当子类继承了父类之后,子类就拥有了父类中定义的非私有属性与方法。
8、子类对象可以直接赋值给父类变量,但赋值后就不能通过父类对象去引用在子类中定义的方法了。如果子类覆盖了父类中的方法,则当子类对象赋值给父类后,通过父类去引用该方法时,执行的是子类中该方法的代码。
9、为了强制子类覆盖父类中的某一方法,可以在父类中将该方法定义为抽象的,如果一个类中含有抽象方法,则该类必须被定义为抽象的,抽象类不能被实例化。
10、接口是一种特殊的抽象类,在接口中定义方法全是抽象的,它定义了一种上层规则或协议,使实现该接口的不同类之间可以交互。
11、接口与抽象类可以定义变量,可以作为函数的参数,但传递给它的只能是实现该抽象类或接口中所有抽象方法的类的对象。
12、在JAVA中一个类一次只能继承一个类,但可以实现多个接口,这是接口存在的一个非常重要的原因。
13、在程序中,有些代码是不安全的,即在执行的过程中有可能会产生错误,为了处理这些错误,在JAVA中引入了异常处理机制,异常的处理分为抛出(throws)和处理(try…catch..),我们一般在写给其它地方用的方法中将有可能产生的异常抛出,而在main方法中,或实际使用时进行处理。
14、异常是一种带有强制性的业务规则,当一个方法将异常抛出后,我们在使用该法时就必须处理该异常,使用try…catch…可以将我们处理正常业务规则的代码与处理错误(即异常)的代码分割开来,使程序的结构更加清晰。写在try语句中的代码都是受保护的。
第二篇:java基本概念总结
小结
1、对象的初始化
(1)非静态对象的初始化
在创建对象时,对象所在类的所有数据成员会首先进行初始化。
基本类型:int型,初始化为0。
如果为对象:这些对象会按顺序初始化。
※在所有类成员初始化完成之后,才调用本类的构造方法创建对象。
构造方法的作用就是初始化。
(2)静态对象的初始化
程序中主类的静态变量会在main方法执行前初始化。
不仅第一次创建对象时,类中的所有静态变量都初始化,并且第一次访问某类(注意此时
未创建此类对象)的静态对象时,所有的静态变量也要按它们在类中的顺序初始化。
2、继承时,对象的初始化过程
(1)主类的超类由高到低按顺序初始化静态成员,无论静态成员是否为private。
(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)抽象类中可以有抽象方法,也可有非抽象方法。抽象方法不能为private。
(5)间接继承抽象类的类可以不给出抽象方法的定义。
6、final关键字
(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修饰。此时,接口只能在所在的类中实现,其他类不
能访问。
(2)嵌入接口中的接口一定要为public。
10、类的嵌入
(1)类可以嵌入另一个类中,但不能嵌入接口中。
(2)在静态方法或其他方法中,不能直接创建内部类对象,需通过手
段来取得。
手段有两种:
class A {
class B {}
B getB(){
B b = new B();
return b;
}
}
static void m(){
A a = new A();
A.B ab = a.getB();// 或者是 A.B ab = a.new B();
}
(3)一个类继承了另一个类的内部类,因为超类是内部类,而内部类的构造方法不能自动
被调用,这样就需要在子类的构造方法中明确的调用超类的构造方法。
接上例:
class C extends A.B { C(){
new A().super();// 这一句就实现了对内部类构造方法的调用。
}
}
构造方法也可这样写:
C(A a){
a.super();
} // 使用这个构造方法创建对象,要写成C c = new C(a);a是A的对象。
11、异常类
JAVA中除了RunTimeException 类,其他异常均须捕获或抛出。JAVA一直是很多人喜爱的一种编程语言,在这里北大青鸟徐东校区的老师希望各位努力并快乐的学习这门语言。学习JAVA需要多看SUN公司提供我们的资料信息,了解常用类的属性和方法。我发现我们有很多同学在用常用类的时候,经常会把类里面的方法和自定义的方法搞混。记得有一位老师说过“学习要抱有一种钻研的态度”。我对这句话的理解是当我们学习到一个新的知识点的时候,需要不断理解和消化。这可能是一个长期的过程,不能抱有一种急于求成的态度。以下内容是北大青鸟老师整理的一些JAVA基础:
一、SDK和JDK的区别 SDK是软件开发工具包,JDK是SDK的一种,其实它是JAVA SDK。JDK在早期的版本中也是叫SDK,在1.2版本以后才叫JDK。
二、J2EE、J2SE、J2ME区别
J2EE:JAVA2平台的企业版,主要应用于WEB和大型企业的开发。
J2SE:JAVA2平台的标准版,学习和一般的开发。它包含于J2EE。
J2ME:JAVA2平台的微缩版,主要应用于电子设备(手机)方面,它包含有J2SE的核心部分之外,还有一个专业的类。
三、JVM的运行机制类加载→类校验→类执行
四、JAVA、JAVAC、用法
JAVA:JAVA解释器用于执行JAVA字节码。它所执行的是一个类并不是一个文件,所以后面类的名字区分大小写。
JAVAC:JAVAC解释器用于将JAVA源代码编译字节码。
五、JAVA标识符
1、标识符由数字、字母下划线“_”或“$”符号组成。
2、标识符必须以字母、下划线“_”或“$”符号开头。
3、不能使用JAVA关键字。
4、字母区分大小写
六、数据类型原始数据类型数值类型
l BYTE
l 整型:SHORT、INT、INT l 浮点:FLOAT、DOUBLE 2 BOOLEAN类型引用数据类型数组类接口
七、变量
变量可分为类变量、局部变量、方法变量。
类变量在定义时就有默认值,数值类型的默认为0,CAHR的默认a,BOOLEAN默认FALSE。
方法变量中没有默认值,需要赋值才能使用。
八、类和对象的区别
类是对象的模板,对象是类的特例
类是抽象的,客观上并不存在的对象是具体的,是客观存的九、类的构造方法
构造方法具有和类相同的名字,它是一个没有返回值的方法。有隐式
构造方法和自定义构造方法两种。JVM在没有自定义造构方法时提供一个没有参数也没有方法主体的默认构造方法。但是如果有自定义的构造方法时,JVM不再提供默认的构造方法。如果在类的实例化是需要用默认构造方法时,必须显示的定义。
十、方法的重载
可以对构造方法或者自定义的方法进行重载,对方法的重载必须满足以下三个条件:
1、参数个数不同
2、参数类型不同
3、参数顺序不同
十一、面向对象的特性
1、封装
2、继承
3、多态
十二、继承的特性
继承允许重用现有的类来构造新类的机制。在继承中具有如下特性:
1、默认继承Object
2、单继承,只能有一个父类
3、子类继承父类除private以外的全部成员和方法。
十三、方法的重写
构成方法重写的条件:
1、两个继承关系的类里
2、方法名、返回值、参数必须一致。
十四、静态(变量、方法、块)
静态类型的变量或方法都是属于类的,并不是属某个具体对象的。所以也称类变量和类方法,所有对象共享一份类变量。定义类变量或类方法的关键字是static。静态块是在类第一次 加载时执行。它的作用是初始化类变量成员。
十五、抽象类
抽象类是具体抽象方法的、不可以实例化对象的类。构成抽象类的条件:
a)具有一个以上的抽象方法。
b)继承一个抽象类,但没有实现全部的抽象方法。
c)继承一个接口,没有实现全部的抽象方法。
十六、异常
Error:内部错误,不期望用户捕获的一种错误。
try语句:try句子里面主要是放置要监控的程序句子
catch:以合理的方式捕获和处理异常,主有try语句出错才会执行。
finally:释放资源,不管try里面的语句是否出错都要执行。
throw:手动引发异常
throws:由方法引发的异常
多层捕获:异常子类一定要位于异常父类之前。最后一个catch块要用Exception捕获,以便捕获到所有异常。执行其中一条catch语句之后,其它的catch将被忽略。
《JAVA基础》基本概念总结
1、在JAVA中所有万物皆对象,所有的代码都要写在一个类中,在类中主要包含属性(变量)和方法(函数),其它代码必须写在某一个方法中,方法与方法之间是平行的,不能在方法中定义方法。
2、如果一个类名使用了public修饰符,则包含该类的JAVA文件名必须该类名一样,一个JAVA文件中只能有一个类前面可以用public修饰符。
3、类是客观实体的抽象,包含属性(该类的数据),和对属性进行操作的方法,为了避免用户对类的属性进行误操作,我们一般把类的属性定义为私有的,并提供相应的get与 set方法去引用和修改这些属性。
4、类的属性与方法可以使用static修饰符,用static修饰的属性与方法是该类的所有对象所共享的,它们可以直接通过类名去引用,在静态方法中只能引用该类的静态变量与静态方法,因为非静态的属性与方法在该类没有被实例化之前是不存在的,即没有相应的执行空间,为了使用的方便,我们可以把不依赖于类的属性(即在方法中不对类的属性进行操作)的方法定义为静态的。
5、构造函数是当一个类被实例化时执行的一段代码,它决定了该类被实例化后的状态,其名称与相应的类名一样,并且不写返回值的类型,我们一般在构造函数中对类的属性进行初始化。当不写构造函数时,系统会给我们提供一个不带参数的空构造函数,如果我们写了一个带参的构造函数,系统就不再提供不带参的构造构数了。
6、为了引用一个类中定义的非静态属性与方法,我们需要实例化一个该类的对象,通过该对象去引用相应的方法。(这是我们实例化一个类的最直接的原因)
7、继承可以实现代码的复用,当子类继承了父类之后,子类就拥有了父类中定义的非私有属性与方法。
8、子类对象可以直接赋值给父类变量,但赋值后就不能通过父类对象去引用在子类中定义的方法了。如果子类覆盖了父类中的方法,则
当子类对象赋值给父类后,通过父类去引用该方法时,执行的是子类中该方法的代码。
9、为了强制子类覆盖父类中的某一方法,可以在父类中将该方法定义为抽象的,如果一个类中含有抽象方法,则该类必须被定义为抽象的,抽象类不能被实例化。
10、接口是一种特殊的抽象类,在接口中定义方法全是抽象的,它定义了一种上层规则或协议,使实现该接口的不同类之间可以交互。
11、接口与抽象类可以定义变量,可以作为函数的参数,但传递给它的只能是实现该抽象类或接口中所有抽象方法的类的对象。
12、在JAVA中一个类一次只能继承一个类,但可以实现多个接口,这是接口存在的一个非常重要的原因。
13、在程序中,有些代码是不安全的,即在执行的过程中有可能会产生错误,为了处理这些错误,在JAVA中引入了异常处理机制,异常的处理分为抛出(throws)和处理(try…catch..),我们一般在写给其它地方用的方法中将有可能产生的异常抛出,而在main方法中,或实际使用时进行处理。
14、异常是一种带有强制性的业务规则,当一个方法将异常抛出后,我们在使用该法时就必须处理该异常,使用try…catch…可以将我们处理正常业务规则的代码与处理错误(即异常)的代码分割开来,使程序的结构更加清晰。写在try语句中的代码都是受保护的。
第三篇:JAVA基础总结
JAVA基础总结
转眼间,已经来到这里学习半年了,而现在我们对于JAVA学习才算是真正的开始。一开始接触的时候我发现这个和C语言的基本语法几乎一模一样的,老师说:JAVA语言本来就是C 语言发展过来的,而C 是从C语言发展来的,C C 还有JAVA虽然是不同的三种语言,但是其实他们的基本语法是一样的,但是它们却有巨大的区别,这个区别主要是体现在思想上。
都说C语言是面向过程的语言,C C#和JAVA是面向对象的编程,其实就是思维方式稍微改了一下子,面向过程的语言主要是着重于算法,面向对象着重于逻辑而已。
这个教我们的老师是张成峰老师,张成峰是个很负责的老师,虽然JAVA基础其实和C语言基础差不多,但是仔细学学还是能找出很多不同的细节的,于是大家的问题就很多,张老师几乎就是手把手的教我们,所以整体来说JAVA基础学得挺扎实的。
我在这本书的学习不是挺好,联系得少了,所以对代码也不是特别熟悉。而且JAVA是一门重概念的书,对于我来说,概念是我的要害,理论知识也是我最怕学习的,所以学习这本书对我来说很是艰难,听了很久的课,代码写得出来,但是理论知识几乎一点也不明白,结果就造成了这次笔试考的不好。
笔试考的不好,机试也因为我的粗心没有考好,所以这次的成绩不好。
学习JAVA基础后,还要在学习的过程中对每个知识都要用心和细心,当然最该注重的地方就是应该提高我对理论知识的学习,要多看书,也要多敲敲代码,这些就是提高学习知识全面的方法。
下一本书学习的是JAVAOO算是JAVA的一个重要的内容了,这才会真正的接触JAVA的核心课程,在这本书里我要好好的理解理论知识,仔细的学习每个知识。
第四篇:Java基础总结
基本数据类型
变量单元直接存放数据
赋值和传参的方式:传值,即传递副本
比较相等使用关系运算符“==”
引用数据类型
变量单元存放引用即对象地址,而数据(对象)在另一内存区域存放。
赋值和传参的方式:传引用(传递对象的地址),即传递对象本身。
使用关系运算符“==”比较两个引用类型变量,比较的是地址,如果比较结果为
真,说明两个变量引用了同一对象。
比较两个对象是否相等应使用equals方法
Java是面向对象的语言,开发Java程序就是开发Java类,Java的变量定义、方法(函
数)和语句都必须在类中书写,“无类即无Java”。
类的实例成员
属性(成员变量):直接定义在类体中的变量(注:在方法或语句块中定义的变量不是属性)
方法:直接定义在类体中的方法。
类成员:直接定义在类体中的内部类,即类成员。
注:对象的成员是从属于对象的,必须通过对象访问,在Java中不存在脱离对象和类而独立存在的属性和方法。
类、方法、语句三者的关系:
类中包含方法,方法中包含语句;方法中不能嵌套方法;语句不能直接写在类体中。
变量的作用域
局部变量-方法的参数、方法体中定义的变量、语句块中定义的变量,仅在所定义的方法体或语句块中有效。
属性-在整个类体中有效。
公有的属性-其它类可以本类对象访问。
私有的属性-仅限本类内访问
局部变量(无论基本类型还是引用类型)在栈内存中,对象在堆内存中。注:引用类型的局部变量内存放是对象的引用(即地址),而对象在堆内存中。
方法的重载-在同一类中多个方法同名的语法现象,方法重载应符合以下条件:
方法同名
参数有所不同(即类型、个数和顺序三者至少有一个不同)
注:方法是否重载不考虑返回类型等其它方面。
包和访问修饰符
包-类的目录结构,主要用途是方便类的管理。
类的简称:不含包名的类名
类的全限定名称(类的全称):带包名的类名。
访问修饰符
private-仅限本类内访问
public-任何类都能够访问
默认-限本包的类访问
protected--限本包的类访问和子类的访问
类的成员(属性、方法和成员内部类)可以使用四种访问修饰符,顶级外部类仅能
使用public和默认两种修饰符。
数组
基本类型的数组的元素放的是数据
对象数据的元素放的是对象的引用
二维数组实际上是一个维数组,而其每个元素又是一个一维数组。
构造方法-与类名同名并且无返回类型的方法
构造方法的作用是创建对象,仅能通过new关键字调用。
类中未显式定义构造方法时,类中会有默认的构造方法(即一个public、无参的构
造方法);类中一旦定义显式定义构造方法,将不再产生默认的构造方法。
构造方法可以重载
构造方法只能可以使用四个访问修饰符,不可以使用其它修饰符(如static、final
等)。
this关键字
this表示本对象或对象自身的引用
通过this可以调用本类的成员方法和属性
通过this可以调用本类的构造方法,this调用构造方法的语句必须写在构造方法的第一句。
实例成员和静态成员
类的成员(属性、方法和成员类)可划分为静态成员和实例成员。
实例成员是属于对象的,随着对象的创建而存在,随着对象的销毁而销毁。 静态成员是属于类的,随着类的加载而存在,随着类的销毁而销毁。
使用static修饰的成员是静态成员,未使用static修饰的成员是实例成员。 静态成员内不能使用this关键字。
this表示当前对象的引用。
对象的初始化
第一:实例属性赋默认值
第二:实例属性赋初值
第三:执行对象初始化块
第四:执行构造方法
类的初始化
第一:静态属性赋默认值
第二:静态属性赋初值
第三:执行静态块
继承的基本概念
Java仅支持单继承
如果一个类没有显式继承任何类,则隐式继承java.lang.Object类 子类拥有父类的一切,子类对象由两部分构成:父类对象部分和子类个性化的部分。 子类并不能访问父类的一切: 子类可以访问父类的public成员和protected成员 子类不可以访问父类的private成员 仅当子类与父类同在一包时,子类方可以访问父类的默认访问控制的成员。继承与类和对象的初始化 构造子类对象时,首先构造父类对象,其次构造子类个性化部分,两者共同构成完整的子类对象,即首先进行父类对象的初始化,在初始化子类对象(个性化)部分。 子类构造方法的执行首先调用父类的构造方法。 若在子类构造方法中无显式调用父类构造方法的语句,则系统默认调用父类中可访问的无参的构造方法,如果这时候父类中恰好没有这样的构造方法,则编译出错。 在子类的构造方法中可以通过super关键字调用父类构造方法。这样的调用语句只能出现在子类构造方法的第一句。 关于初始化的顺序 初始化父类 初始化子类 初始化父类对象 初始化子类对象 继承与类型转换 子类型对象可以自动转型为父类型 父类型引用某个子类型对象时,可以强制转化为这个具体的子类型 方法重写 在继承的情况下,子类的实例方法与父类的实例方法的方法名称、参数、返回类型、throws声明完全一致,并且该子类方法的访问权限不低于父类方法的访问权限,即方法重写(子类方法重写了父类方法),也称方法覆盖。 方法重写仅存在于父子类中的实例方法,静态方法没有重写的概念。 当通过子类型对象执行重写方法时,将始终表现为子类的行为,而且无论引用对象的变量是父类型还是子类型,也无论是直接调用还是通过父类型其它方法间接调用,都将如此。 final修饰的方法不可以被重写 final修饰的类不可以被继承 隐藏成员变量 如果子类和父类中定义了同名称的成员变量,则称子类隐藏了父类的成员变量 通过父类方法访问隐藏的成员变量时,将获得父类成员变量 通过子类方法访问隐藏的成员变量时,将获得子类成员变量 通过父类型的引用直接访问隐藏的成员变量时,将获得父类成员变量 通过子类型的引用直接访问隐藏的成员变量时,将获得子类成员变量 super关键字
super仅能用于子类中表示本对象的父对象部分
super可以调用父类型的构造方法
Super可以调用父类的成员
Super不可以使用在静态上下文中
Super不可以做为参数传递,不可以做为返回值返回。
当方法重写时,或父类成员变量被隐藏时,子类中只能通过super访问父类方法和
父类成员变量
final关键字
用于变量,表示变量的值不可改变
用于类,表示类不可被继承
用于方法,表示方法不可以被重写
关于final变量的初始化时机
局部变量:声明的时候初始化
实例成员变量:声明、对象初始化块和构造方法三处之一
静态成员变量:声明、静态块两处之一
抽象类
抽象类可以包含抽象方法,也可以不包含抽象方法
含有抽象方法的类必须定义为抽象类
抽象类有构造方法
抽象类不能够实例化
通过抽象类可以调用其静态成员
抽象类是需要由子类继承的,因此抽象类不允许是final类
抽象方法
抽象方法没有方法体,包括一对空的大括号也不允许有
抽象方法必须是实例方法,抽象方法不允许是final的 抽象类与继承
抽象类可以被继承
若抽象类的子类是非抽象类,则该子类必须实现(重写)其父类的所有抽象方法 若抽象类的子类也是抽象类,则该子类可以不实现(重写)其父类的全部或部分抽象
方法。
接口
接口也是数据类型,可以将其理解为“纯”抽象类
接口不是类,也没有构造方法,不能够实例化
接口中的属性一律是public、static、final的,并可以省略这三个关键字
接口的方法一律是public、abstract的,并且可以省略这两个关键字
接口中可以不包含任何属性和方法
接口与实现
接口不是类,因此接口与类的关系不是“继承”关系,而是“实现”关系,我们可
以将实现理解为继承(尽管这并不恰当)
如果接口的实现类是抽象类,则该实现类可以不实现接口的全部或部分方法 如果接口的实现类是非抽象类,则该实现类必须实现接口的全部方法
一个类可以实现多个接口
接口与继承
接口之间可以相互继承
一个接口可以继承多个接口
接口与类型转换
接口的的子类型对象可以自动向上转型为接口类型
接口的子类型指:是接口的实现类或者接口的子接口
如果变量引用的对象实际是某个接口的实现类对象,而变量的类型不是这个接口的子类型,那么则可以强制转换为这个接口类型。
异常的类层次结构
Throwable错误类,表示不可恢复的致命错误
Exception运行时异常,此类异常可以不做显式处理
非运行时异常catch
声明抛出 在方法头通过throws声明可能抛出的异常类型
异常机制的五个关键字
try catch finally throw throws
如何使用
try-catch
try-catch-finally注:只要try执行,其对应的finally块才必然执行
try-finally注:只要try执行,其对应的finally块才必然执行
throw 主动抛出一个异常
throws 用在方法声明头部,声明方法可能抛出异常
finally代码块多用于书写资源回收代码
Java集合类(集合框架)
Collection接口
List接口 允许重复元素,元素有索引序号,并按放入元素的次序编号
ArrayList 线性表结构,查找快,增删慢
LinkedList 链表结构,查找慢,增删快
Vector 同步,查找、增删性能都不高。
Set接口 不允许重复元素,元素无索引编号
HashSet 元素散列存放
TreeSet元素按自然顺序排序(即从小到大排序)
Map接口
HashMap
允许null值和null键
不同步
Hashtable <--Properties
不允许null值和null键
同步
内部类
第五篇:Java学习_基础总结
现在学习JAVA的人越来越多!但是学的好的,能用到工作中去的却很少很少,下面就是我为大家总结归纳的一些JAVA学习基础,希望大家少走弯路,尽快投入到工作中去!
Java 学习基础总结归纳!
1、作用域public,private,protected,以及不写时的区别
答:区别如下:
作用域
当前类
同一package
子孙类
其他package public
√
√
√
√
protected
√
√
√
×
friendly
√
√
×
×
private
√
×
×
×
不写时默认为friendly
2、Anonymous Inner Class(匿名内部类)是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)
答:匿名的内部类是没有名字的内部类。不能extends(继承)其它类,但一个内部类可以作为一个接口,由另一个内部类实现
3、Static Nested Class 和 Inner Class的不同
答:Nested Class(一般是C 的说法),Inner Class(一般是JAVA的说法)。Java内部类与C 嵌套类最大的不同就在于是否有指向外部的引用上。注: 静态内部类(Inner Class)意味着1创建一个static内部类的对象,不需要一个外部类对象,2不能从一个static内部类的一个对象访问一个外部类对象
4、&和&&的区别
答:&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)
5、Collection 和 Collections的区别
答:Collection是集合类的上级接口,继承与他的接口主要有Set 和List.Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作
6、什么时候用assert
答:assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。一般来说,assertion用于保证程序最基本、关键的正确性。assertion检查通常在开发和测试时开启。为了提高性能,在软件发布后,assertion检查通常是关闭的
7、String s = new String(“xyz”);创建了几个String Object
答:两个,一个字符对象,一个字符对象引用对象
8、Math.round(11.5)等於多少? Math.round(-11.5)等於多少
答: Math.round(11.5)==12;Math.round(-11.5)==-11;round方法返回与参数最接近的长整数,参数加1/2后求其floor
9、short s1 = 1;s1 = s1 1;有什么错? short s1 = 1;s1 = 1;有什么错
答:short s1 = 1;s1 = s1 1;(s1 1运算结果是int型,需要强制转换类型)short s1= 1;s1 = 1;(可以正确编译)
10、Java有没有goto
答:java中的保留字,现在没有在java中使用
11、数组有没有length()这个方法? String有没有length()这个方法
答:数组没有length()这个方法,有length的属性。String有有length()这个方法
12、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型
答:方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型
13、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别
答:Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等 equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值
14、给我一个你最常见到的runtime exception
答:常见的运行时异常有如下这些ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException
15、error和exception有什么区别 答:error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况 exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况
16、List, Set, Map是否继承自Collection接口
答: List,Set是,Map不是
17、abstract class和interface有什么区别
答:声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口
18、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized
答:都不能
19、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)
答:接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数
20、构造器Constructor是否可被override
答:构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading
21、是否可以继承String类
答:String类是final类故不可以继承
22、try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后
答:会执行,在return前执行
23、用最有效率的方法算出2乘以8等於几 答:2 << 3
24、两个对象值相同(x.equals(y)== true),但却可有不同的hash code,这句话对不对
答:不对,有相同的hash code
25、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递
答:是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的
26、swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上
答:witch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、short、char 或者 byte。long,string 都不能作用于swtich
27、ArrayList和Vector的区别,HashMap和Hashtable的区别
答:就ArrayList与Vector主要从二方面来说.一.同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的二.数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半就HashMap与HashTable主要从三方面来说。一.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现二.同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的三.值:只有HashMap可以让你将空值作为一个表的条目的key或value
28、char型变量中能不能存贮一个中文汉字?为什么? 答:是能够定义成为一个中文的,因为java中以unicode编码,一个char占16个字节,所以放一个中文是没问题的
29、GC是什么? 为什么要有GC
答:GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。
30、float型float f=3.4是否正确?
答:不正确。精度不准确,应该用强制类型转换,如下所示:float f=(float)3.4
31、介绍JAVA中的Collection FrameWork(包括如何写自己的数据结构)?
答:Collection FrameWork如下: Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └Set Map ├Hashtable ├HashMap └WeakHashMap Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)Map提供key到value的映射
32、抽象类与接口?
答:抽象类与接口都用于抽象,但是抽象类(JAVA中)可以有自己的部分实现,而接口则完全是一个标识(同时有多重继承的功能)。JAVA类实现序例化的方法是实现java.io.Serializable接口 Collection框架中实现比较要实现Comparable 接口和 Comparator 接口
33、String与StringBuffer的区别。
答:STRING的长度是不可变的,STRINGBUFFER的长度是可变的。如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法
34、谈谈final, finally, finalize的区别
答:final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载 finally—再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)finalize—方法名。Java 技术允许使用 finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize()方法以整理系统资源或者执行其他清理工作。finalize()方法是在垃圾收集器删除对象之前对这个对象调用的
35、面向对象的特征有哪些方面
答:主要有以下四方面:
1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。
2.继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。
3.封装:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。4.多态性:多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。
36、String是最基本的数据类型吗
答:基本数据类型包括byte、int、char、long、float、double、boolean和short。java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类
37、int 和 Integer 有什么区别
答:Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。原始类型封装类
booleanBoolean,charCharacter,byteByte,shortShort,intInteger,longLong,floatFloat,doubleDouble 引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关
38、运行时异常与一般异常有何异同
答:异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。
39、说出ArrayList,Vector, LinkedList的存储性能和特性
答:ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
40、HashMap和Hashtable的区别
答:HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。
41、heap和stack有什么区别
答:栈是一种线形集合,其添加和删除元素的操作应在同一段完成。栈按照后进先出的方式进行处理。堆是栈的一个组成元素
42、Java的接口和C 的虚类的相同和不同处
答:由于Java不支持多继承,而有可能某个类或对象要使用分别在几个类或对象里面的方法或属性,现有的单继承机制就不能满足要求。与继承相比,接口有更高的灵活性,因为接口中没有任何实现代码。当一个类实现了接口以后,该类要实现接口里面所有的方法和属性,并且接口里面的属性在默认状态下面都是public static,所有方法默认情况下是public.一个类可以实现多个接口。
43、Java中的异常处理机制的简单原理和应用
答:当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况。一种是JAVA类库内置的语义检查。例如数组下标越界,会引发IndexOutOfBoundsException;访问null的对象时会引发NullPointerException。另一种情况就是JAVA允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用throw关键字引发异常。所有的异常都是java.lang.Thowable的子类。
43、垃圾回收的优点和原理。并考虑2种回收机制
答:Java语言中一个显著的特点就是引入了垃圾回收机制,使c 程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清楚和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。
44、你所知道的集合类都有哪些?主要方法?
答:最常用的集合类是 List 和 Map。List 的具体实现包括 ArrayList 和 Vector,它们是可变大小的列表,比较适合构建、存储和操作任何类型对象的元素列表。List 适用于按数值索引访问元素的情形。Map 提供了一个更通用的元素存储方法。Map 集合类用于存储元素对(称作“键”和“值”),其中每个键映射到一个值。
45、描述一下JVM加载class文件的原理机制?
答:JVM中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoader 是一个重要的Java运行时系统组件。它负责在运行时查找和装入类文件的类。
46、排序都有哪几种方法?请列举
答: 排序的方法有:插入排序(直接插入排序、希尔排序),交换排序(冒泡排序、快速排序),选择排序(直接选择排序、堆排序),归并排序,分配排序(箱排序、基数排序)快速排序的伪代码。/ /使用快速排序方法对a[ 0 :n-1 ]排序从a[ 0 :n-1 ]中选择一个元素作为m i d d l e,该元素为支点把余下的元素分割为两段left 和r i g h t,使得l e f t中的元素都小于等于支点,而right 中的元素都大于等于支点递归地使用快速排序方法对left 进行排序递归地使用快速排序方法对right 进行排序所得结果为l e f t m i d d l e r i g h t
47、JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?
答:Java通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。在Java中,每个异常都是一个对象,它是Throwable类或其它子类的实例。当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并进行处理。Java的异常处理是通过5个关键词来实现的:try、catch、throw、throws和finally。一般情况下是用try来执行一段程序,如果出现异常,系统会抛出(throws)一个异常,这时候你可以通过它的类型来捕捉(catch)它,或最后(finally)由缺省处理器来处理。用try来指定一块预防所有“异常”的程序。紧跟在try程序后面,应包含一个catch子句来指定你想要捕捉的“异常”的类型。throw语句用来明确地抛出一个“异常”。throws用来标明一个成员函数可能抛出的各种“异常”。Finally为确保一段代码不管发生什么“异常”都被执行一段代码。可以在一个成员函数调用的外面写一个try语句,在这个成员函数内部写另一个try语句保护其他代码。每当遇到一个try语句,“异常”的框架就放到堆栈上面,直到所有的try语句都完成。如果下一级的try语句没有对某种“异常”进行处理,堆栈就会展开,直到遇到有处理这种“异常”的try语句。
48、一个“.java”源文件中是否可以包括多个类(不是内部类)?有什么限制?
答:可以。必须只有一个类名与文件名相同。
49、java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?
答:字节流,字符流。字节流继承于InputStream OutputStream,字符流继承于InputStreamReader OutputStreamWriter。在java.io包中还有许多其他的流,主要是为了提高性能和使用方便。
50、java中会存在内存泄漏吗,请简单描述。
答:会。自己实现堆载的数据结构时有可能会出现内存泄露,可参看effective java.51、java中实现多态的机制是什么?
答:方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。
52、垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收
答:对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是“可达的”,哪些对象是“不可达的”。当GC确定一些对象为“不可达”时,GC就有责任回收这些内存空间。可以。程序员可以手动执行System.gc(),通知GC运行,但是Java语言规范并不保证GC一定会执行。
53、静态变量和实例变量的区别? 答:static i = 10;//常量 class A a;a.i =10;//可变
54、什么是java序列化,如何实现java序列化?
答:序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。
55、是否可以从一个static方法内部发出对非static方法的调用?
答:不可以,如果其中包含对象的method();不能保证对象初始化.56、写clone()方法时,通常都有一行代码,是什么?
答:Clone 有缺省行为,super.clone();他负责产生正确大小的空间,并逐位复制。
57、在JAVA中,如何跳出当前的多重嵌套循环?
答:用break;return 方法。
58、List、Map、Set三个接口,存取元素时,各有什么特点?
答:List 以特定次序来持有元素,可有重复元素。Set 无法拥有重复元素,内部排序。Map 保存key-value值,value可多值。
59、说出一些常用的类,包,接口,请各举5个
答:常用的类:BufferedReader BufferedWriter FileReader FileWirter String Integer 常用的包:java.lang java.awt java.io java.util java.sql 常用的接口:Remote List Map Document NodeList

