网上看到的一篇java语法笔试题总结,总结的很好

转载地址:http://wenku.baidu.com/view/f1ffc97101f69e31433294fd.html

作者:outpainfo

相比总结一。后面加了一些,都是我笔试过来认为最重要的

1

class Something {

final int i;

public void doSomething() {

System.out.println("i = " + i);

}

}

和上面一题只有一个地方不同,就是多了一个final。这难道就错了吗?

答案: 错。final int i是个final的instant variable (实例变量,或叫成员变量)。final的instant variable没有default value,必须在constructor(构造器)结束之前被赋予一个明确的值。可以修改为"final int i = 0;"。

2

此处,Something类的文件名叫OtherThing.java

class Something {

private static void main(String[] something_to_do) {

System.out.println("Do something ...");

}

}

这个好像很明显。

答案: 正确。从来没有人说过Java的Class名字必须和其文件名相同。但public class的名字必须和文件名相同。

3、

java myprog good morning

public class myprog{

public static void main(String argv[])

{

System.out.println(argv[2])

}

}

4) Exception raised:"java.lang.ArrayIndexOutOfBoundsException: 2"

4

7. String s1=new String("Hello")

String s2=new String("there");

String s3=new String();

下面哪条是正确的。 1是对的输出:hellothere

1) s3=s1 + s2; 2) s3=s1-s2; 3) s3=s1 &s2; 4) s3=s1 && s2;

5

12. public int bbb(){

static int i=0; // error

i++;

return i;

}

常量,静态变量不能在方法中定义,切记切记

6

14. public class Test {

public static void main(String[] args) {

String s ;

Test test = new Test();

test.f(s); //error

}

public void f(String s){

s="1223";

System.out.println(s);

}

}

error: The local variable s may not havebeen initialized

即使初始化了输出为: 1223

7

class CtorBase {

CtorBase(int k) {System.out.println("Base Created");}

}

public class Complex extends CtorBase {

Complex(int k) {System.out.println("Complex Created");}   //error

public static void main(String args[]) {

Complex a = new Complex(10);

}

}

error: Implicit super constructorCtorBase() is undefined. Must explicitly invoke another constructor

Rule1:编译器总是确保类至少有一个构造函数;如果类没有构造函数,编译器会为它构造一个无参的构造函数。Rule2:如果类已经有了一个构造函数,不管它是有参函数还是无参函数,编译器都不会再为它构造一个构造函数。

  在这过程中,编译器会去调用其父类的无参构造函数,如果其父类没有默认(无参)的构造函数,则构造过程出错,编译不能通过。

8

下面哪个声明是合法的

1) int abc-xy; 2)int 8xe; 3)int abc xyz; 4)int x = 0;float f = 2.3;

4是合法的,其它的都是不合法的。

9

public class javaTest {

public static void main(String[] args) {

floata = 14.7;

floatb = 3f;

floatc = 4.1f;

System.out.println(a+""+b+" "+c);

}

}

编译出错:float a = 14.7;14.7是double不能把它转换成float;

10

public class javaTest {

public static void main(String[] args) {

finalint i = 1;

i= 1;

//System.out.println(i);

}

} 编译出错:无法为常量指定值。

11

public class javaTest {

public static void main(String[] args) {

bytea = 1;

byteb = 2;

bytec = a + b; //error

byted = 1+2;

bytee = 2+a; //error

inti = 2L+3; //error

}

}

编译错误:a+b (2+a)为int ,要不能转化为byte精度损失。 但byte d = 1+2;因为 1 2 是整数,不是整数变量。

注:整数变量的运算结果至少是int类型。

如果有一个整数变量是long类型,那么运算结果是long类型。

浮点数运算的类型是最大的浮点数类型。

12

public class javaTest {

public static void main(String[] args) {

intn = 3;

intm = 4;

System.out.println("compareresult is "+((n>m)&&(++n)>m));

System.out.println(n)

}

}

输出为compare result isfalse

3

n为3而不是4.因为n>m为false ,因此整个表达式为false,程序不再计算(++n)>m.

13

class A {

inti = 1;

voidfunc(){

System.out.println("funin a");}

}

public class B1 extends A {

inti = 2;

voidfunc(){

System.out.println("funin b");

}

publicstatic void main(String args[]){

B1b = new B1();

Aa = new A();

b.func();

a.func();

System.out.println("b.i="+b.i);

System.out.println("a.i="+a.i);

Ax = new B1();

x.func();

System.out.println("x.i="+x.i);

}

}

记住:“域是什么”在编译时确定的,“方法是什么”是在运行时确定的。

编程程序只进行“字面”上的检查所以编译时,它认为x.i是父类A的域,因为x的类型是A。

14

class A {

inti = 1;

}

public class B1 extends A {

inti = 2;

voidfunc(){

System.out.println("funin b");

}

publicstatic void main(String args[]){

Ax = new B1();

x.func();

System.out.println("x.i="+x.i);

}

}

这个程序编译时会出错是,x.func()因为编译时检查类A中没有此方法。所以编译错误。。

15

package mypack.lib2;

public class TestExtend {

int x;

public static void main(String[] args){

int i,j,k,l=0;

k = l++;

j=++k;

i = j++;

System.out.println(i+" "+j+" "+k);

}

}

输出为I ,j k 分别为1 2 1。

总结i++,++i.

I++是先不加前赋值给左边的,++i是先加完再赋值给左边的,运行完i++的值还是会加的。I=i++;这个i的值没有加。

16>

int x = 0,y = 1,z;

if(x)

z= 0;

不能编译成功,因为if只能赋值为boolean.

17>

public class TestExtend {

int x;

public static void main(String[] args){

boolean a = false;

if(a=true)

System.out.println("helloe");

else

System.out.println("GOOLDA");

}

}

输出为helloe。。a=true是赋值,不是a==true这是判断。注意区别

17

public class TestExtend {

int x;

public static void main(String[] args){

boolean flag = true;

switch(flag){

case true:System.out.println("true");

}

}

}

编译错误

Switch 里的不能为boolean类型。

18》

public class TestExtend {

public static void main(String[] args){

int m = 0,j;

while(m++<2)

System.out.println(m);

}

}

输出为 12

局部变量要初始化才能输出,否则编译错误。

19。

不能在静态的方法中使用super 和 this 关键字。。切记

20

方法的重写Overriding和重载Overloading是Java多态性的不同表现。

注意,Java的方法重载要求同名的方法必须有不同的参数表,仅有返回类型不同是不足以区分两个重载的方法。

class Test{

void show(){

System.out.println("test");

}

}

public class TestExtend extends Test{

static show(){

System.out.pritln("");

}

public static void main(String[] args){

new TestExtend();

}

编译错误,无法覆盖。要完全一样。或者参数不一样。就不是重写了。都可以编译通过。

21

public class TestExtend {

public static void main(String[] args){

String test= "abc";

test= test+test;

System.out.println(test);

}

}

输出为abcabc

22

类的继承关系中,其中 parent代表父类,son代表子类。

Parent = son; 但是parent不能强制转化为son,如果强制转化,可以骗过编译器,但执行时会出错。

23

Static final可以在静态区中初始化。但不能在构造方法中初始化。

1>

访问控制:

Public : 对于public描述符,你只需要记住一条,你在哪都可以访问。

Private: private描述符表示该成员只能在该类的内部使用,我们需要重点理解的是“在该类的内部”,意思是只要是在定义该成员的类的内部(类的内部是一个空间范围名词,只要是在{}之间的代码都算作是在类的内部).

Protected 无访问控制:至于protected描述符和package-private,则只要是在该类所在包内部,也可以随便使用。

注:比package-private作用范围更强一点,protected描述符修饰的字段还能够被其他包中它的子类所访问,一定要注意在“类的内部被访问”和“被类使用”的区别,被其他包中它的子类使用,表明该成员只能被子类使用,而不是在该子类中使用,而一旦继承,父类也不能访问自己的protected成员.

方法:在重置方法时,子类的方法不能比超类的方法存取范围小。

2

Final 修饰的变量一定要初始化,当然可以在构造方法初始化,但不能在方法内初始化。

但是如果常量是静态的,那么就不能在构造方法中初始化,必须在定义它的时候初始化或者在静态块中初始化。

3

Abstract 类里面也可能有main函数,而且可以运行。

实现接口的类必须在类中给出接口中所有的方法定义,因为接口中的方法都是public,所以,必须在实现方法时加上public关键字

抽象类可以实现接口,可以实现也可以不实现其中的方法。

异常:

(1)除o会抛出异常,但浮点数除零,那么就不会产生异常了。

(2)局部变量一定要初始化,但成员变量不要。

你可能感兴趣的:(java)