1、在JAVA中, 下列标识符合法的是()
正确答案:C
A 3kyou
B @163
C name
D while
题解:
合法标识符:三不能
1.不能以数字开头
2.不能是关键字
3.不能包含除了$和_以外的其他字符
2、Web客户端的编程语言JavaScript源自Java,其功能是Java SE的子集。
正确答案:B
A 对
B 错
题解:
1、雷锋(java)和雷锋塔(javascript)。雷锋塔(javascript)不是雷锋(java)的。
2、 几和几把的关系,有个几把关系
3、关于类的叙述正确的是()。
正确答案:B
A 在类中定义的变量称为类的成员变量,在别的类中可以直接使用
B 局部变量的作用范围仅仅在定义它的方法内,或者是在定义它的控制流块中
C 使用别的类的方法仅仅需要引用方法的名字即可
D 只要没有定义不带参数的构造函数,JVM都会为类生成一个默认构造函数
题解:
1、 答案:B A,类是一个封装,类的成员只能在类内部使用,外部需要 “对象名.变量名” 来引用。 B,正确,局部变量只在定义它的代码块或者函数内部可见 C,跟类的成员变量一样,需要指定对象才能引用 D,如果类没有构造方法,JVM会生成一个默认构造方法,如果定义了任意类型的构造方法,编译器都不会自动生成构造方法。
2、 d感觉是个文字游戏。反过来想,类只定义了无参构造方法,jvm当然不会为它生成默认的构造方法。
4、设int x=1,float y=2,则表达式x/y的值是:()
正确答案:D
A 0
B 1
C 2
D 以上都不是
题解:
1、本题的意义在于两点,明白这两点之后题会不会本身就不重要了:①float x = 1;与float x = 1.0f,这两种对于float类型的变量来说定义的方式都是正确的,也是比较常见的笔试题里面考察类型转换的例子,当第一种情况时,是将低精度int向上转型到float,是由于java的特性导致而不需要进行强制转换,而第二种情况则是比较正式的对于float变量的定义,由于这种类型本身在工作项目中并不常见,常用的带小数的数字我们一般都直接使用double类型,而double类型直接定义是没有问题的:double x = 1.0。而由于float的精度没有double类型高,因此必须对其进行显示的格式书写,如果没有这个f,就默认是double类型了。当然double x = 1.0d也是正确的命名,不信你可以尝试,虽然这是一个令人窒息的操作。②当多个精度的数字同时进行运算时,最终结果以最高精度为准。在多数情况下,整数和小数的各级混合运算中,一般结果都是double类型的。但就本题而言,结果是float类型的,因为x,y两个数字精度最高的就是float,所以最终结果是0.5,并且这个0.5是float类型的。为什么说不是double类型呢,当然如果你这样处理:double m = x/y,当然m是double类型的,也不会报错,而如果你写成int m = x/y,编译器报错提示的时候就会让你转换成float或者进行强制转换成int,他是不会提示你转换成double的,尽管这么写并没有报错,原因就是① 中所说的向上强转。float转换成double不需要任何提示。
2、 正解:0.5 x/y= (float)1.0/(float)2.0=0.5 (float类型的)
3、 不同基本数据类型转化与运算byte-short-int-long-float-double,float=1转化为float=1.0
4、int/float相比先转化为同一类型即float(1.0)/float(2.0)=0.5
5、执行下面的程序段,语句3的执行次数为() for (i=0; i<=n-1; i++) (1) for (j=n; j>i; j–) (2) state; (3)
正确答案:C
A n(n+2)/2
B (n-1)(n+2)/2
C n(n+1)/2
D (n-1)(n+2)
题解:
1、 选c,外循环有n次,当i=0
2、内循环为n次
3、当i=1
4、内循环为n-1次
5、当i=2时,内循环为n-2次,以此类推,总次数为n+(n-1)+(n-2)+…+2+1
6、就是个等差数列,等于n(n+1)/2。
6、指出下列程序运行的结果: public class Example{
String str=new String(“tarena”);
charch={‘a’,‘b’,‘c’};
public static void main(String args){
Example ex=new Example();
ex.change(ex.str,ex.ch);
System.out.print(ex.str+" and ");
System.out.print(ex.ch);
}
public void change(String str,char ch){
//引用类型变量,传递的是地址,属于引用传递。
str=“test ok”;
ch0=‘g’;
}
}
正确答案:B
A tarena and abc
B tarena and gbc
C test ok and abc
D test ok and gbc
题解:
1、string和char数组都是引用类型,引用类型是传地址的,会影响原变量的值,但是string是特殊引用类型,为什么呢?因为string类型的值是不可变的,为了考虑一些内存,安全等综合原因,把它设置成不可变的; 不可变是怎么实现的?Java在内存中专门为string开辟了一个字符串常量池,用来锁定数据不被篡改,所以题目中函数中的str变量和原来的str已经不是一个东西了,它是一个局部引用,指向一个testok的字符串,随着函数结束,它也就什么都没了,但是char数组是会改变原值的
2、 其实前面有几个答案说的已经很清楚了,足够我们理解这一道题。有一些东西可能还不是很清楚,导致这种题容易发生混乱。记住几点就可以了:1.为什么string字符串的值是不可变的?当我们new一个字符串,给它赋值之后,那么当前对象的值就固定了,永远不会改变。比如String str=new String(“test”),那么str的值就是test,这是因为在String源码当中是用char数组来按顺序存储字符串中的每一个字符的,并且这个char数组是用final修饰的,这意味着一旦我们给字符串赋值之后,这个对象的值就永远不会改变。2.可是当我们在一个类当中的某个方法里面,给这个对象str赋值了一个新的字符串,它这时候的值是多少呢?比如这时str=“good”,str的值就是good,(你可以在这个方法里面写输出语句,输出这个引用,就知道怎么回事了)可不是说引用的值不可以改变么?这里改变的不是引用的值,而是引用str指向的常量不一样了而已,而这个引用的生命周期和当前方法的一样的,也就是方法结束,引用被杀死,也结束了,那么它刚才指向good的这个引用,就结束了,所以在这个方法结束之后,再输出引用str的值,自然就是引用str之前指向的值了,也就是test。
3、 以下几点如有误请大家指正: 1.java中只有值传递。 2.方法exchange接收的参数是引用的副本。即都是地址的复制值。
7、关于final说法正确的是? ( )
正确答案:B
A final类的方法肯定不能被同一个包的类访问
B final类的方法能否被同一个包的类访问不是由final决定
C final方法等同于private方法
D final对象本身的引用和值都不能改变
题解:
1、final变量,如果是基本数据类型,则其数值一旦初始化后就不能被改变。如果是引用类型的变量,则对其初始化后,便不能再指向另一个对象,但是其里面的值是可以改变的。引用变量所指向的对象中的内容是可以改变的。
2、 final 修饰符 final 变量: final 变量能被显式地初始化并且只能初始化一次。被声明为 final 的对象的引用不能指向不同的对象。但是 final 对象里的数据可以被改变。也就是说 final 对象的引用不能改变,但是里面的值可以改变。 final 修饰符通常和 static 修饰符一起使用来创建类常量。 final 方法 类中的 final 方法可以被子类继承,但是不能被子类修改。 声明 final 方法的主要目的是防止该方法的内容被修改。 如下所示,使用 final 修饰符声明方法。 final 类 final 类不能被继承,没有类能够继承 final 类的任何特性。
3、 能不能被一个包访问是和访问控制符有关系
8、下列哪种异常是检查型异常,需要在编写程序时声明?
正确答案:C
A NullPointerException
B ClassCastException
C FileNotFoundException
D IndexOutOfBoundsException
题解:
1、 1. 粉红色的是受检查的异常(checked exceptions)
2、其必须被 try{}catch语句块所捕获
3、或者在方法签名里通过throws子句声明.受检查的异常必须在编译时被捕捉处理
4、命名为 Checked Exception 是因为Java编译器要进行检查
5、Java虚拟机也要进行检查
6、以确保这个规则得到遵守. 2. 绿色的异常是运行时异常(runtime exceptions)
7、需要程序员自己分析代码决定是否捕获和处理
8、比如 空指针
9、被0除… 3. 而声明为Error的,则属于严重错误,如系统崩溃、虚拟机错误、动态链接失败等,这些错误无法恢复或者不可能捕捉,将导致应用程序中断,Error不需要捕捉。
:、 Java异常类层次结构图: 通常,Java的异常(包括Exception和Error)分为 可查的异常(checked exceptions)和不可查的异常(unchecked exceptions) 。 可查异常(编译器要求必须处置的异常): 正确的程序在运行中,很容易出现的、情理可容的异常状况 。 可查异常虽然是异常状况,但在一定程度上它的发生是可以预计的,而且一旦发生这种异常 状况,就必须采取某种方式进行处理。 除了RuntimeException及其子类以外,其他的Exception类及其子类都属于可查异常。这种异常的特点是Java编译器会检查它,也就是说,当程序中可能出现这类异常,要么用try-catch语句捕获它,要么用throws子句声明抛出它,否则编译不会通过。 不可查异常(编译器不要求强制处置的异常):包括运行时异常(RuntimeException与其子类)和错误(Error)。
9、在类Tester中定义方法如下, public double max(int x, int y) { // 省略 } 则在该类中定义如下哪个方法头是对上述方法的重载(Overload)?
正确答案:B
A public int max(int a
B int b) {}
C public int max(double a
D double b) {}
E public double max(int x
F int y) {}
G private double max(int a
H int b) {}
题解:
1、重载就是一句话:同名不同参,返回值无关。 覆盖/重写:同名同参
2、 Java 重载的规则: 1、必须具有不同的参数列表; 2、可以有不同的返回类型,只要参数列表不同就可以; 3、可以有不同的访问修饰符; 4、可以抛出不同的异常; 5、方法能够在一个类中或者在一个子类中被重载。 方法的重写: 1、在子类中可以根据需要对从基类中继承来的方法进行重写。 2、重写的方法和被重写的方法必须具有相同方法名称、参数列表和返回类型。 3、重写方法不能使用比被重写的方法更严格的访问权限。
3、 重载:OverLoad 1 同一个类中,方法名相同,参数列表不同的2个或多个方法构成方法的重载 2 参数列表不同指参数的类型,参数的个数,参数的顺序至少一项不同 3 方法的返回值类型,方法的修饰符可以不同。 重写:Override 1.父类中被final修饰的方法不能被重写 2.子类的重写方法不能比父类的被重写方法有更严格的访问级别,但可以更广泛。也就是 子类覆盖方法的访问权限必须大于等于 父类被重写方法的访问权限 3.方法名必须一样 4.参数列表必须一样。 5.返回值类型必须一样 6.重写方法不能抛出新的异常或者比被重写方法声明的检查异常更广的检查异常。但是可以抛出更少,更有限或者不抛出异常。 7.如果一个方法不能被继承,则不能重写它。最典型的例子为,被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。 8.如果想调用父类被覆盖的方法,用super关键字调用
10、运行代码,结果正确的是: Boolean flag = false;
if(flag = true){
System.out.println(“true”);
}else{
System.out.println(“false”);
}
正确答案:B
A 编译错误
B true
C false
D 什么也没有输出
题解:
1、输出的明明是true,而不是TRUE啊
2、 Java里只有boolean类型可以作为判断条件,其他类型必须通过操作反回boolean值
3、这里本来就是boolean类型,可以充当判断条件。 个人理解,有误的请指出。
4、 if(flag = true)的时候flag已经是true了,所以输出true; 要是为if(flag == true)输出才为false
答案汇总:
1、正确答案:C
2、正确答案:B
3、正确答案:B
4、正确答案:D
5、正确答案:C
6、正确答案:B
7、正确答案:B
8、正确答案:C
9、正确答案:B
10、正确答案:B
以上部分题解来自牛客评论区,感谢评论区大佬的解释。