欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-06-09 22:37:07
...

转载地址: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)局部变量一定要初始化,但成员变量不要。