关于继承和实现说法正确的 是 ? ( )
A.类可以实现多个接口,接口可以继承(或扩展)多个接口
B.类可以实现多个接口,接口不能继承(或扩展)多个接口
C.类和接口都可以实现多个接口
D.类和接口都不可以实现多个接口
答案解析:1.类与类之间的关系为继承,只能单继承,但可以多层继承。 2.类与接口之间的关系为实现,既可以单实现,也可以多实现。 3.接口与接口之间的关系为继承,既可以单继承,也可以多继承。
以下JAVA程序的输出是什么()
public class HelloSogou{
public static synchronized void main(String[] a){
Thread t=new Thread(){
public void run(){Sogou();}
};
t.run();
System.out.print("Hello");
}
static synchronized void Sogou(){
System.out.print("Sogou");
}
}
A.HelloSogou
B.SogouHello
C.Hello
D.结果不确定
答案解析:这里调用 t.run(); 并没有启动一个新的线程,启动一个新线程要用t.start(); 所以执行顺序是先执行run(),再执行 System.out.print("HELLO");
建立Statement对象的作用是?
A.连接数据库
B.声明数据库
C.执行SQL语句
D.保存查询结果
答案解析:
Class.forName("com.mysql.cj.jdbc.Driver"); // 加载JDBC驱动,注意驱动类名可能已经更新
Connection con = DriverManager.getConnection(url, user, password); // 建立连接
Statement stmt = con.createStatement(); // 创建语句执行者
int updateCount = stmt.executeUpdate("sql语句"); // 执行SQL语句,比如创建、更新、删除等
ResultSet rs = stmt.executeQuery("sql查询语句"); // 执行查询SQL语句
下面哪些Java中的流对象是字节流?
A.FileInputStream
B.BufferedInputStream
C.PushbackInputStream
D.ByteArrayInputStream
答案解析:stream结尾都是字节流,reader和writer结尾都是字符流 两者的区别就是读写的时候一个是按字节读写,一个是按字符。 实际使用通常差不多。 在读写文件需要对内容按行处理,比如比较特定字符,处理某一行数据的时候一般会选择字符流。 只是读写文件,和文件内容无关的,一般选择字节流
有一个二维数组A[10][5],每个数据元素占1个字节,且A[0][0]的存储地址是1000,则A[i][j]的地址是多少 ?
A.1000+10i+j
B.1000+i+j
C.1000+5i+j
D.1000+10i+5j
答案解析:A[5][5]的地址为:5*100*2+5*2+10=1020,千万不要忘记基址是10,不是0
以下哪一项正则能正确的匹配网址: http://www.bilibili.com/video/av21061574 ()
A./^(https?:\/\/)?([a-zA-Z\d]+).bilibili.com\/?video\/av(\D{1,8})\/?$/
B./^(http:\/\/)?(\w+)\.bilibili\.com\/?video\/av(\d{1,8})\/?$/
C./^(https?:\/\/)?(\w+)\.bilibili\.com\/?\w*$/
D./^(http:\/\/)?([a-zA-Z\d]+).bilibili.com\/?video\/av\w*\/+$/
答案解析:
首先,^表示匹配输入的开始,$表示匹配输入的结束
每个选项从前向后看,http都能够严格匹配
?表示匹配某元素0次或1次,这里四个选项都没有问题,能够匹配0次或1次字符s
接下来:严格匹配,\/\/严格匹配两个//
接着往下看,[]表示字符集合,它用在正则表达式中表示匹配集合中的任一字符
A D 选项中的 [a-zA-Z\d] 表示匹配一个小写字母 或者 大写字母 或者 数字
B C 选项中的 \w 表示匹配字母数字或下划线(注意这里比A D中能多匹配下划线类型)
+表示匹配某元素1次或多次,到这里四个选项都能够完美匹配字符www
.可以匹配除了换行符\n \r外的任何字符
接下来我们看选项A,bilibili com video av都严格匹配,而 \D 表示匹配一个非数字字符而非数字字符,av后的数字是无法匹配成功的,A错误
B选项,\d匹配数字,{m,n}表示最少匹配m次,最多匹配n次,\/?能匹配末尾的0个或1个/字符,B正确
C选项,*表示匹配某元素0次或多次,但 \w 并不能匹配字符 /,C错误
D选项,前面都对,错在最后的\/+至少要匹配一个/,而原字符串最后并没有/
ServletConfig接口默认是哪里实现的?
A.Servlet
B.GenericServlet
C.HttpServlet
D.用户自定义servlet
答案解析:
下面关于面向对象的一些理解哪些是错误的( )
A.面向对象的最重要的特性是支持继承、封装和多态
B.系统设计应该遵循开闭原则,系统应该稳定不可修改,但应支持通过继承、组合等方式进行扩展
C.函数式的语言必然是面向对象的语言
D.面向对象设计时,每个类的职责应该单一,不要再一个类中引入过多的接口
E.过程式语言和面向对象的语言各有其优势,过程式语言更加灵活,面向对象语言更加强调抽象和封装
F.Java和C++都是静态类型的面向对象编程语言
答案解析:开闭原则确实要求系统对扩展开放,对修改关闭,意味着系统设计应该允许通过继承、组合等方式进行扩展,而不是通过修改已有代码来实现。但“系统应该稳定不可修改”这个表述容易引起误解,因为开闭原则并不反对修改,而是反对对已有代码的直接修改。
函数式编程语言和面向对象编程语言是两种不同的编程范式,它们可以独立存在,也可以结合在一起。有些语言是纯粹的函数式语言,如Haskell,而有些语言是纯粹的面向对象语言,如Smalltalk。还有一些语言,如Scala,结合了函数式和面向对象的特性。
关于 Socket 通信编程,以下描述错误的是:( )
A.服务器端通过new ServerSocket()创建TCP连接对象
B.服务器端通过TCP连接对象调用accept()方法创建通信的Socket对象
C.客户端通过new Socket()方法创建通信的Socket对象
D.客户端通过new ServerSocket()创建TCP连接对象
答案解析:
Socket套接字
就是源Ip地址,目标IP地址,源端口号和目标端口号的组合
服务器端:ServerSocket提供的实例
ServerSocket server= new ServerSocket(端口号)
客户端:Socket提供的实例
Socket soc=new Socket(ip地址,端口号)
public interface IService {String NAME="default";}
默认类型等价表示是哪一项:
A.public String NAME="default";
B.public static String NAME="default";
C.public static final String NAME="default";
D.private String NAME="default";
答案解析:接口中的变量默认是public static final 的,方法默认是public abstract 的
在Java中,关于HashMap类的描述,以下错误的是()?
A.HashMap能够保证其中元素的顺序
B.HashMap允许将null用作值
C.HashMap允许将null用作键
D.HashMap使用键/值得形式保存数据
答案解析:HashMap是基于哈希算法来确定元素的位置(槽)的,当我们向集合中存入数据时,它会计算传入的Key的哈希值,并利用哈希值取余来确定槽的位置,与存入的先后顺序无关,所以可以认定为HashMap是无序的。
关于下面的程序,说法正确的是:
1. class StaticStuff
2 {
3. static int x = 10;
4.
5. static { x += 5; }
6.
7. public static void main(String args[])
8. {
9. System.out.println(“x = ” + StaticStuff .x);
10. }
11. static
12. {x /= 3; }
13.}
A.第5行和12行不能编译,因为该方法没有方法名和返回值。
B.第12 行不能编译,因为只能有一个static初始化块。
C.代码编译并执行,输出结果x = 10.
D.代码编译并执行,输出结果 x = 5.
E.代码编译并执行,输出结果 x = 15.
答案解析:
执行顺序为:
-
父类静态代码块、静态变量 ps:按声明顺序执行
-
子类静态代码块、静态变量 ps:按声明顺序执行
-
父类局部代码块、成员变量 ps:按声明顺序执行
-
父类构造函数
-
子类局部代码块、成员变量 ps:按声明顺序执行
下面代码的运行结果是()
public static void main(String[] args){
String s;
System.out.println("s="+s);
}
A.代码编程成功,并输出”s=”
B.代码编译成功,并输出”s=null”
C.由于String s没有初始化,代码不能编译通过。
D.代码编译成功,但捕获到NullPointException异常
答案解析:类中实例变量可以不用初始化,使用相应类型的默认值即可;方法中的定义的局部变量必须初始化,否则编译不通过。
下列哪些语句关于 java 内存回收的说明是正确的?
A.程序员必须创建一个线程来释放内存
B.内存回收程序负责释放无用内存
C.内存回收程序允许程序员直接释放内存
D.内存回收程序可以在指定的时间释放内存对象
答案解析:程序回收,一般在堆不够内存时,会调用gc释放内存。程序不能在指定时间释放。程序员不需要也不能主动释放内存,程序员不能直接释放内存,只能调用gc运行,但这是间接释放内存,也就是告诉程序要释放内存但什么时候释放是不能控制的。
下列代码的执行结果是:( )
public class Test3{
public static void main(String args[]){
System.out.println(100%3);
System.out.println(100%3.0);
}
}
A.1和1
B.1和1.0
C.1.0和1
D.1.0和1.0
答案解析:与整除符号 / 类似,在做算术运算时,若该运算符的两个元素都为整型时,结果为整型;有一个是 float 或者 double 类型时,为保留精度,系统( jvm )会对原有元素做转换,结果也会是 float 或者 double
静态内部类不可以直接访问外围类的非静态数据,而非静态内部类可以直接访问外围类的数据,包括私有数据。( )
A.正确
B.错误
答案解析:
-
静态内部类:
- 静态内部类可以访问外部类的静态成员(包括静态变量和静态方法),但不能直接访问外部类的非静态成员。
- 静态内部类不需要外部类的实例就可以被实例化,即它们不依赖于外部类的实例。
-
成员内部类:
- 成员内部类可以访问外部类的所有成员,包括私有成员和私有方法。
- 成员内部类可以定义静态成员。
- 成员内部类依赖于外部类的实例,它们需要外部类的实例来创建。
-
局部内部类:
- 局部内部类定义在方法内部,它们不能有访问修饰符(如public、private等)。
- 局部内部类只能访问其所在的方法中定义为final的局部变量。
- 局部内部类主要用于方法内部,不能有静态成员或方法。
-
匿名内部类:
- 匿名内部类没有类名,它们是在使用时直接创建的。
- 匿名内部类不能使用
class
关键字,也不能继承多个类(但可以实现多个接口)。 - 匿名内部类不能定义静态成员或方法,因为它们没有类名来引用这些静态成员。
- 匿名内部类只能创建一个实例,因为它们没有类名来定义多个实例。
- 匿名内部类必须在表达式中创建,通常是在
new
关键字后面,并且它们必须继承一个类或实现一个接口。 - 匿名内部类是局部内部类的一种特殊形式,因此局部内部类的所有限制同样适用于匿名内部类。
以下哪一个正则表达式不能与字符串“https://www.tensorflow.org/”(不含引号)匹配?()
A.[a-z]+://[a-z.]+/
B.https[://]www[.]tensorflow[.]org[/]
C.[https]+://www.tensorflow.org/
D.[a-zA-Z.:/]+
答案解析:[]只能匹配一个既定字符
正则表达式的规则
1. 任意一个字符表示匹配任意对应的字符,如a匹配a,7匹配7,-匹配-。
2. []代表匹配中括号中其中任一个字符,如[abc]匹配a或b或c。
3. -在中括号里面和外面代表含义不同,如在外时,就匹配-,如果在中括号内[a-b]表示匹配26个小写字母中的任一个;[a-zA-Z]匹配大小写共52个字母中任一个;[0-9]匹配十个数字中任一个。
4. ^在中括号里面和外面含义不同,如在外时,就表示开头,如^7[0-9]表示匹配开头是7的,且第二位是任一数字的字符串;如果在中括号里面,表示除了这个字符之外的任意字符(包括数字,特殊字符),如[^abc]表示匹配出去abc之外的其他任一字符。
5. .表示匹配任意的字符。
6. \d表示数字。
7. \D表示非数字。
8. \s表示由空字符组成,[ \t\n\r\x\f]。
9. \S表示由非空字符组成,[^\s]。
10. \w表示字母、数字、下划线,[a-zA-Z0-9_]。
11. \W表示不是由字母、数字、下划线组成。
12. ?: 表示出现0次或1次。
13. +表示出现1次或多次。
14. *表示出现0次、1次或多次。
15. {n}表示出现n次。
16. {n,m}表示出现n~m次。
17. {n,}表示出现n次或n次以上。
18. XY表示X后面跟着Y,这里X和Y分别是正则表达式的一部分。
19. X|Y表示X或Y,比如"food|f"匹配的是foo(d或f),而"(food)|f"匹配的是food或f。
20. (X)子表达式,将X看做是一个整体
面向对象程序设计方法的优点包含:
A.可重用性
B.可扩展性
C.易于管理和维护
D.简单易懂
答案解析:面向对象的三大特性 A.多态 B.继承 C.封装,但不简单哦,选简单的都是什么大佬。
类声明中,声明抽象类的关键字是 ( )
A.public
B.abstract
C.final
D.class
答案解析:
public 共有类,可以在包外使用,此时,源文件名必须和类名相同。 abstract 抽象类,抽象类位于继承树的抽象层,抽象类不能被实例化。 final 不能被继承,没有子类,final类中的方法默认是final的。 class 只能在包内使用的类
关于final说法正确的是? ( )
A.final类的方法肯定不能被同一个包的类访问
B.final类的方法能否被同一个包的类访问不是由final决定
C.final方法等同于private方法
D.final对象本身的引用和值都不能改变
答案解析:
final 修饰符
final 变量:
final 变量能被显式地初始化并且只能初始化一次。被声明为 final 的对象的引用不能指向不同的对象。但是 final 对象里的数据可以被改变。也就是说 final 对象的引用不能改变,但是里面的值可以改变。
final 修饰符通常和 static 修饰符一起使用来创建类常量。
final 方法
类中的 final 方法可以被子类继承,但是不能被子类修改。
声明 final 方法的主要目的是防止该方法的内容被修改。
final 类
final 类不能被继承,没有类能够继承 final 类的任何特性。
java 语言使用的字符码集是
A.ASCII
B.BCD
C.DCB
D.Unicode
答案解析:Java语言使用的是Unicode字符集。而ASCII是国际上使用最广泛的字符编码;BCD是一种数字压缩存储编码方法。
表达式(short)10/10.2*2运算后结果类型是()
A.short
B.int
C.double
D.float
答案解析:要注意是(short)10/10.2*2,而不是(short) (10/10.2*2),前者只是把10强转为short,又由于式子中存在浮点数,所以会对结果值进行一个自动类型的提升,浮点数默认为double,所以答案是double;后者是把计算完之后值强转short。
下面有关java的引用类型,说法正确的有?
A.被GCroot强引用=Gcroot对象来说,只要有强引用的存在,它就会一直存在于内存中
B.如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收。
C.如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了,就会回收这些对象的内存
D.一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的空间
答案解析:强引用不回收,软引用内存不足时回收,弱引用JVMGC时回收,虚引用随时会被回收。
1、强引用:一个对象赋给一个引用就是强引用,比如new一个对象,一个对象被赋值一个对象。
2、软引用:用SoftReference类实现,一般不会轻易回收,只有内存不够才会回收。
3、弱引用:用WeekReference类实现,一旦垃圾回收已启动,就会回收。
4、虚引用:不能单独存在,必须和引用队列联合使用。主要作用是跟踪对象被回收的状态。
Java中四种引用详解以及对比区别_softreference-CSDN博客
图解Java 垃圾回收机制_java垃圾回收思想图解-CSDN博客