Java综合试题1及答案
看了面试题1,居然网上没答案,就自己做了下
一、基础:
1、 请解释System.out,println()的意思。
System 是一个类,out是一个static PrintStream 对象。由于它是“静态”的,所以不需要我们创建任何东西,所以只需直接用它即可。
println()的意思是“把我给你的东西打印到控制台,并用一个新行结束”。所以在任何Java 程序中,一旦要把某些内容打印到控制台,就可条件反射地写上System.out.println("内容")。
2、 什么是关键字?请列出几个关键字。
- 关键字是电脑语言中预先定义有特殊意义的标示符,也叫保留字
Java关键字对于对于编译器有特殊意义,他们可以表示一中数据类型(int String),也可以表示程序结构(for),关键字不能做为变量和常量等java标示符
- Java有51关键字,其中goto,const没有被建议使用
3、 什么是标识符?请列出几个有效的标识符。
标示符是常量、变量、类名、方法名等要素的字符序列
而java中标示符是由大小写字母、下划线(_)、美元符号($)、数字组成,区别大小写,且不能用数字开头
$test Tset _int
4、当程序需要检测时,最长出现语法错误和语意错误,请分别描述两种错误的发生情形,并尝试说明如何避免这两种错误。
1: 语法错 违反语法规范的错误称为语法错(syntax error), 这类错误通常是在所以又可以称为是编译错误.引起语法错误的主要有:标识符未声明,表达式中的运算符与操作数类型不兼容,变量赋值时的类型与声明的类型不 匹配,括号不匹配,语句末尾缺少分号等等.
2:语义错 语义错误是指程序在语法上正确,但是在语义上存在错误,这样的错误就是语义错误(semantic error),语义错误是不被系统发现的,只,语义错误的程序称为运行错误(run-time error)Java 解释器在运行时能够发现语义错,一旦发现语义错Java将停止程序运行,并给出错误的位置和性质. 引起语义错误的主要有:输入数据的格式错,除数为0错,给变量赋予超出其范围的值等..
3:逻辑错 如果程序通过编译,可以运行,但是运行的结果不是我们所期望的,那么这类错误就被称为逻辑错误(logic error). 引起这类错误的主要是: 循环条件不正确 循环次数不对 . 由于系统无法找到逻辑错,所以逻辑错误是很难以确定和排除的.
语法错就必须仔细,而且相关的编译器会自动提示出必须修改,比如myeclipse中出现语法错,就会在哪一行报红叉,而且有写io打开未关闭时用try catch抛出就可以了
语义错就仔细编写代码,报错就追本溯源
二、数据类型:
5、 java的数据类型有几种?基本数据类型有几种?请分别列出。
- 两种,基本数据类型和引用数据类型
- 基本数据类型有 四类八种
- 1.1基本数据类型(boolean,char,byte,short,int,long,float,double)
1.2引用数据类型(String,Map等)
6、 请写出将整数强制转换为浮点数的方法。
- 容量小的自动转换为容量大
Int I = 5; double j = I; 就直接将i转换为浮点型
- 用int的包装类 Integer
Intger I = new Intger(12);
Double j = i.doubleValue(); 就直接返回浮点
7、 请写出五种字符串转换成数值类型的method。
- new Integer("12")
- Integer.getInteger("12")
- Integer.decode("#12") //将 String 解码为 Integer。接受通过以下语法给出的十进制、十六进制和八进制数字:
- Integer.parseInt("12")//将字符串参数作为有符号的十进制整数进行解析。
//除了第一个字符可以是用来表示负值的 ASCII 减号 '-' ('\u002D') 外,字符串中的字符都必须是十进制数字。返回得到的整数值
- Integer.valueOf("12")
三、运算符:
8、“&&”和“||”的意义为何?请举例说明。
1. &&和 ||、!是逻辑运算符,根据逻辑关系生成一个布尔值(true,false),其中&& 是一个与运算,必须判断都为真则为真,而“||”判断一个为真就为真例如(
if(true && false){
System.out.println("&& 是一个与运算,必须保证判断都为真才为真");
}
2.与按位与“&”,按位或“|”不同的是,逻辑与或是有“短路”,即一旦能够明确无误确定整个表达式的值,就不在计算表达式余下部分,而按位运算符不会,所以用逻辑运算符判断提高性能
9、请将^、=、/、()、++、==、|、!等运算符按照运算优先级的顺序做排列。
(),++,!,/,==,^, | , =
10、请举例说明三元运算符的语法和语意。
条件?返回值1:返回值2
三元运算符与if …else类似功能,但比起执行效率高而简便,但缺点是代码的可读性差
如果条件为真,执行返回值1,为假,执行返回值2
四、程序结构语句:
11、请写出各类结构语句(if、for、while、do-while、switch),并画图(线条和箭头)说明运行流程。
略
12、请画图说明break和continue的区别。
简述:
break 当 break 语句用于 while 或 for 语句时,导致退出程序循环。
continue 当 continue 语句用于 while 或 for 语句时,使程序循环移动到下一个迭代。
五、数组
13、请声明定义一个元素个数为5的整型一维数组,并进行初始化。
Int[] I = new int[5]
14、请声明定义一个二维字符串数组,并对其第二行第三列元素赋值为空。
String i[][] = new String[4][4];
i[1][2] = null;
15、请在声明定义一个二维整型数组的时候对其做部分初始化工作。
int[][] i = new int[][]{{1,2,3},{3},{5,6}}
六、类
16、请问类有哪些成员?并编写一个最简单的类进行说明。
在JAVA类里只能包含属性方法构造器static初始化块内部类和枚举类等六种成员也包含了接口
public class demo{
public static void main(String[] arg){
int I ;
System.out.println(“11”);
}
}
17、静态成员是什么意思?如何定义?
静态成员包含:静态属性与静态的方法,“静态成员是属于类的,由该类的全体对象共享”, “无论你建立了多少个该类的对象,静态成员在内存上只有一个”
Static int I;方法也只需要加static在方法上就可以
18、请分别编写无返回值(无自变量、有一个自变量)、有返回值(有一个自变量、有两个自变量)共四种方法。请问这四种方法可以同名吗?
Public void test1()
{}
public void test2(long I )
{}
Public int test2(int i)
{ return i};
public int test4(int I,int j)
{return i+j;}
可以同名,这区别于重载(重载的方法名是相同的,但参数列表必须不同,返回值也可以相同也可以不同),判断方法重载:看参数列表(即个数与类型)
注意:因为自定义方法,所以可能在第二与第三方法中,参数列表相同,就不符合重载中参数列表不同原则,而就不是重载,就不能同名
19、什么是重载?何谓多态?
方法重载是指多个方法享有相同的名字,但是这些方法的参数必须不同,或者是参数的个数不同,或者是参数类型不同。返回类型不能用来区分重载的方法。
多态,是指把类中具有相似功能的不同方法使用同一个方法名来实现,从而可以使用相同的方式来调用这些具有不同功能的同名方法。面向对象程序设计中的多态可以通过子类对父类方法的覆盖或在同一个类中定义多个同名的不同方法亦即重载来实现。
20、权限修饰赋有几种?请分别阐述其各自含义。
四种(public,private,protected,default)
Public 任何包都可以用
Private 该类内用
Protected 不同包的子类,同包类内都可以用
Default 同一包类内都可以
21、如何编写一个类的构造方法,请举例说明。
public class demo{
public static void main(String[] arg){
Test t = new Test("string");
System.out.println(t.getValueStr());
Test t1 = new Test(12);
System.out.println(t1.getValueInt());
}
}
class Test{
private String name;
private int age;
public Test(int age){
this.age = age;
}
public Test(String name){
this.name = name;
}
public String getValueStr(){
return this.name;
}
public int getValueInt(){
return this.age;
}
}
22、构造方法在一个类内如何互相调用?子类如何调用父类构造方法?子类于父类之间的构造方法之间的隐含调用关系是什么?请编写代码并图示说明。
1. public class demo{
public static void main(String[] arg){
A a = new A(4);
System.out.println("递归型");
}
}
class A{
float y;
public A(int a){
this(a,0);
}
public A(int a,int b){
this(a);
y=b;
}
}
2. public class demo{
public static void main(String[] arg){
B b = new B();
}
}
class A{
private String name;
public A(){
System.out.println("-----隐式父类调用-------");
}
public A(String name){
this.name = name;
System.out.println("-----显示父类-------");
}
}
class B extends A{
public B(){
//当需要给父类传参时,就必须用 super(“run”);
//不需要,则就隐式调用,不用super()
}
}
23、请准确说明区别出类变量、类方法、实例变量、实例方法、类类型变量五个概念的含义。
实例变量是类实例化后,系统为其创建的一个类的实例变量的拷贝,即一个实例拥有一个实例变量。
类变量则是用static声明,系统为每个类变量分配一次存储空间。即所有的实例共享一个类变量。
实例方法:属于每个对象个体的方法
类方法:方法中加了static,属于与类相关的,公共的方法
类类型变量指的是由类声明的对象。
24、请编写一个内部类。
public class Demo{
static class D{
int i = 1;
}
public static void main(String[] arg){
D d = new D();
System.out.println(d.i);
System.out.println("创建一个静态内部类");
}
}
25、请写出继承的语法。通过什么关键字可以明确访问父类的变量或方法。
1. class Father{
//父类
}
class Son extends Father{
//继承父类的方法与变量,可重写
}
2. 通过super关键字不但可以调用父类的构造方法,也可以访问父类的变量和方法,其格式如下:
下面通过一段程序来讲解访问父类的变量和方法,其代码如下:
class NeiOne
{
int a;
}
class NeiOne1 extends NeiOne
{
int a;
NeiOne1(int x,int z)
{
super.a=x;//调用父类被子类隐藏的变量
a=z;
}
void print()
{
System.out.println(""+super.a);
System.out.println(""+a);
}
}
class text
{
public static void main(String args[])
{
NeiOne1 a1=new NeiOne1(1,2);
a1.print();
}
}
26、final的功能是什么?什么情况下会用到它?
1. final 修饰类 :表示该类不能被继承,是顶级类。
修饰方法:表示不能重写。
修饰变量:表示不能修改,可在构造方法中赋值。
2.当类不需要继承,当方法不能被重写,当使用常量时
27、Java语言中所有类的根类是什么类?它有哪些方法?请说明各自的意义?
1.java.lang.Object类
2.常用方法
hashCode()返回该对象的哈希码值。
toString()返回该对象的字符串表示。
wait() 导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法。
equals() 指示某个其他对象是否与此对象“相等”
七、抽象类
28、请编写代码说明如何定义一个抽象类;同时说明什么是抽象方法?
1. 用abstract class 类名就可以定义一个抽象类
2.抽象方法是在抽象类里的,首先,一个子类如果是继承一个抽象类,如果该子类是非abstract类,就必须实现基类中的所有抽象方法;而如果该子类是abstract类,则可以实现.继承一个抽象类,抽象方法,可以有不同的实现.这是它的优点.是相对于接口而言的.抽象方法本身没什么用.
29、可否在抽象类中定义构造方法?抽象类可否被实例化?为什么?
可以在抽象类中定义构造方法,抽象类不可以被实例化
30、请编写代码定义一个接口、同时扩展该接口,并说明接口和抽象类的区别。
public class Demo{
public static void main(String[] arg){
B b = new B();
b.run();
}
}
interface Car{
public void run();
}
interface Benz extends Car{
public void run();
public void getC();
}
class B implements Benz{
public void run(){
System.out.println("-------run--------");
}
public void getC(){
System.out.println("------getC------");
}
}通过继承来扩展接口
2.接口和抽象的区别:特殊的抽象类,抽象类中可以有非抽象的方法和成员变量,而接口只能有抽象的方法有常量
31、一个类如何实现一个接口?如何实现多个接口?请分别编写代码说明。
1. interface Benz {
public void run();
public void getC();
}
class B implements Benz{
public void run(){
System.out.println("-------run--------");
}
}
2. interface A{
public int getA();
}
//B接口
interface B{
public int getB();
}
//实现了某个接口必须实现其全部的方法
public class ImpAB implements A,B{
public int getA() {
return 0;
}
public int getB() {
return 0;
}
}
32、包的关键字是什么?包的功能是什么?如何声明一个包?如何引入一个包?
1.package
2. 其实就是使全球唯一,在各个程序都可以使用,java为每个类都创建类字节码.class,类名与文件相同,因此同名的类可能发生冲突,为了解决这个,就使用了包来管理类名空间;
3.package com.wu.Test
4.import + 完整类名 (如 import java.util.*;)