1.下列说法正确的是( )
A.数组是一种对象
B.数组属于一种原生类
C.int number=[]={31,23,33,43,35,63}
D.数组的大小可以任意改变
A正确
B 原生类指的是java中的基本数据类型(数据类型分为基本数据类型和引用数据类型)
C 不能这样定义数组
D 数组是引用类型,在堆上分配内存,数组是定长的,不能任意改变大小。
//一维数组的定义方式
int arr[] = new int[5];
int[] arr = new int[5];
int[] arr = {1,2,3,4,5};
int[] arr = new int[]{1,2,3,4,5};
2.下面代码运行结果是()
public static int getValue(int i) {
int result = 0;
switch (i) {
case 1:
result = result + i;
case 2:
result = result + i * 2;
case 3:
result = result + i * 3;
}
return result;
}
A. 0 B. 2 C. 4 D. 10
没有加break,会导致3个case都执行,结果为10
3.以下关于final关键字说法错误的是() (两项)
A) final是java中的修饰符,可以修饰类、接口、抽象类、方法和属性
B) final修饰的类肯定不能被继承
C) final修饰的方法不能被重载
D) final修饰的变量不允许被再次赋值
答案是AC
A final不能修饰抽象类
C final修饰的类可以被继承和重载,但不能被重写
BD final修饰的变量不允许被修改,final修饰的类不能被继承
4.以下描述错误的有()
A) abstract 可以修饰类、接口、方法
B) abstract修饰的类主要用于被继承
C) abstract 可以修饰变量
D) abstract修饰的类,其子类也可以是abstract修饰的
C abstract 不能用于修饰变量
当使用abstract修饰类时, 表明这个类只能被继承;当使用 abstract修饰方法时, 表明这个方法必须由子类提供实现(即重 写)。
5.根据下面的代码,会抛出NullPointerException异常的有()。
String s = null;
A) if( (s!=null) & (s.length()>0) )
B) if( (s!=null) && (s.length()>0) )
C) if( (s==null) | (s.length()0) )
D) if( (snull) || (s.length()==0) )
AC
NullPointerException即空指针异常
String s=null;没有给s开辟任何空间,当执行length()方法时候,
因为没有具体指向的内存空间,所以报出NullPointerException没有指向的错误。
A &是与,位运算,两个都得执行,执行到s.length()自然就报错了。
B S!=null 结果为false 整体就为false ,&& 后面就不会执行。下面的同理。
6.关于求和函数,以下说法正确的是()
A sum返回表达式中所有数的总和,因此只能用于数字类型的列
B Avg返回表达式中所有数的平均值,可以用于数字型和日期型的列
C Max和Min可以用于字符型的列
D Count可以用于字符型的列
A SUM() 函数只能用于数字类型的列,不能够汇总字符,日期等其他数据类型
B 不可以用于日期型
C 不可以
D 不可以
7.下面代码运行结果是()
public class Demo {
public int add(int a, int b) {
try {
return a + b;
} catch (Exception e) {
System.out.println("catch 语句块");
} finally {
System.out.println("finally 语句块");
}
return 0;
}
按照常理我们知道,finally才是最后执行的那个,所以实际上应该输出finally语句块
然和人实际上的运行过程应该是,运行到return 方法之时,return方法会将返回的值,(在此题中是a+b)存储到一个临时栈中,然后程序不会立刻返回,而是执行finally{}中的程序,在执行完‘System.out.println(“finally 语句块”);后,再通知主程序请求返回了,这时候我们再将临时栈中的值返回
于是当我们调用上述代码,便会实现先输出finally中的部分,再输出return 中的部分
即
finally 语句块
a + b
public static void main(String[] args) {
Demo demo = new Demo();
System.out.println("和是:"+demo.add(9,34));
}
}
A) 编译异常
B) finally语句块 和是:43
C) 和是:43 finally语句块
D) catch语句块 和是:43
8.数据库做join操作时,至少要涉及到几张表?
A: 3 B:1; C: 2 D: 4
B 自连接只需要设计一张表
9.以下几种创建对象的⽅式中不会调用构造函数的有哪些() [两项]
A) ⽤new语句创建对象,这是最常见的创建对象的⽅法。
B) 运⽤反射⼿段,调⽤java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例⽅法。
C) 调⽤对象的clone()⽅法
D) 运⽤反序列化⼿段,调⽤java.io.ObjectInputStream对象的 readObject()⽅法。
AB都明显调用了构造函数
C是在内存上对已有的对象的影印,所以不会调用构造函数
D是从文件中还原类的对象,也不会调用构造函数
10.下面哪些不是Thread类的方法()
A start() B run() C exit() D getPriority()
exit() 属于system
1.下面代码运行结果是()
public static void main(String[] args) {
Integer f1 = 100, f2 = 100;
Integer f3 = 150;
Integer f4 = 150;
System.out.println(f1 == f2);
System.out.println(f3 == f4);
}
A:true,true B: true, false C: false,true D: false,false
基本类型通过==比较的是他们的值的大小,而引用类型比较的是他们的引用地址
Integer 用 == 比较的时候往往非常容易出错
当interger赋予的int数值在-128-127的时候,直接从cache中获取,这些cache引用对Integer对象地址是不变的,但是不在这个范围内的数字,则new Integer(i) 这个地址是新的地址,不可能一样的
故选B
12.SQL 语句中修改表结构的命令是()
A MODIFY TABLE
B MODIFY STRUCTURE
C ALTER TABLE
D ALTER STRUCTURE
答案为C
modify是vfp的命令
13.SQL 查询语句中 WHERE 、 GROUP BY 、 HAVING 这些关键字区别和用法总结错误的是()
A HAVING在查询语句中必须依赖于GROUP BY
B WHERE子句用来限制SELECT语句从表中指定选取的行
C GROUP BY子句用来分组WHERE子句的输出结果集
D HAVING子句用来从分组的结果中筛选列
答案为D
HAVING子句用来从分组的结果中筛选行
14.有三个关系 R 、 S 和 T 如下: 则由关系 R 和 S 得到关系 T 的操作是()
A 自然连接 B 交 C 除 D 并
D
15.语句 SELECT IF(-1,5,2) 的返回值是:
A 2 B 6 C -1 D 5
if(条件,表达式1,表达式2);
这里,如果条件为真(非0),则返回表达式1,条件为假(0)返回表达式2.
答案是5
16.final, finally, finalize的区别。
final是关键字,修饰符,finalize是方法,用于清理内存,finally通常用语try catch中来捕捉异常
17.abstract class和interface有什么区别?
不同
抽象类:
1.抽象类中可以定义构造器
2.可以有抽象方法和具体方法
3.接口中的成员全都是public的
4.抽象类中可以定义成员变量
5.有抽象方法的类必须声明为抽象类,而抽象类未必要有抽象方法
6.抽象类中可以包含静态方法
7.一个类只能继承一个抽象类
接口:
1.接口中不能定义构造器
2.方法全都是抽象方法
3.抽象类中的成员可以是private,默认,protected,public
4.接口中定义的成员变量实际上是常量
5.接口中不能有静态方法
6.一个类可以实现多个接口
18.什么是Java的多态?
多态指不同的子类继承同一个父类后,可以有不同的行为
19.请写代码实现下面问题
1)有一对兔子,从出生后第三个月起每个月都生一对兔子,小兔子倡导第三个月后每个月又生一对兔子,假如兔子都不死,问第n个月的兔子对数为多少?,假如兔子都不死,问第n个月的兔子对数为多少?
思路:F(0)=0,F(1)=1,F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)
#include<stdio.h>
int main()
{
int a[24]={1,1};
int i,j,sum=0;
for(i=0;i<24;i++)
{
if(i>=2)
{
a[i] = a[i-1]+a[i-2];
}
printf(“第%d个月%d对兔子\n”,i+1,a[i]);
}
return 0;
}
public static boolean isPalindrome(int x) {
// 这里是上面分析的特殊不是回文的情况
// 如上所述,当 x < 0 时,x 不是回文数。
// 同样地,如果数字的最后一位是 0,并且这个数字不是0,则表示不是回文
if (x < 0 || (x % 10 == 0 && x != 0)) {
return false;
}
//这里设置一个数值用来拆分这个整数
int rn = 0;
//这里如果前半部分小于后半部分,肯定拆解过半了,不用再继续了
while (x > rn) {
//用来获取这个整数的最后一位,放到置换的数字中
rn = rn * 10 + x % 10;
//每次来获取最新要拆分的整数
x /= 10;
}
// 当数字长度为奇数时,我们可以通过 rn/10 去除处于中位的数字。
// 例如,当输入为 12321 时,在 while 循环的末尾我们可以得到 x = 12,rn = 123,
// 由于处于中位的数字不影响回文(它总是与自己相等),所以我们可以简单地将其去除。
return x == rn || x == rn / 10;
}
public static boolean isPalindrome(int x) {
if (x < 0 || (x % 10 == 0 && x != 0)) {
return false;
}
int rn = 0;
while (x > rn) {
rn = rn * 10 + x % 10;
x /= 10;
}
return x == rn || x == rn / 10;
}