java语言基础知识点(每日更新6.29)②

1、局部内部类可以用哪些修饰符修饰?
正确答案: C D
A.public
B.private
C.abstract
D.final

局部内部类是放在代码块或方法中的,不能有访问控制修饰符,且不能用static修饰

2、基本的Java语言函数存储在以下哪个java包中?()

正确答案: A
A…lang
B.java.io
C.java.net
D.java.util

java.lang   提供java基础类,例如:Object\Math\String\StringBuffer\System\Tread等,这是我们最常用的包包,但是我们并不常见到她,因为我们不需要将她手动导入;
java.util     提供包括集合框架、事件模型、日期时间、等等的使用工具类;
java.io       提供通过文件系统、数据流和序列化提供系统的输入输入;
java.net     提供实时网络应用和开发的类;
java.sql     提供使用java语言访问并处理存储在数据源中的数据API;
java.awt  和  java.swing  提供了GUI开发与设计的类,awt提供了创建界面和绘制图形图像的所有类,swing包提供了一组“轻量级”的组件,尽量让这些组件在所有平台上的工作方式相同;
java.text    提供了与自然语言无关的方式来处理文本日期、数字和消息的类和接口。


Java一维数组有两种初始化方法
1、静态初始化

int array[] = new int[]{1,2,3,4,5}
或者

int array[] = {1,2,3,4,5}
需要注意的是,写成如下形式也是错误的

int array[] = new int[5]{1,2,3,4,5}
2、动态初始化

int array[] = new int[5];
array[0] = 1;
array[1] = 2;
array[2] = 3;
array[3] = 4;
array[4] = 5;
静态与动态初始化的区别就在于,前者是声明的时候就初始化,后者是先声明,再动态初始化。

3、下列说法正确的是()
正确答案: B
A.在类方法中可用this来调用本类的类方法
B.在类方法中调用本类的类方法时可直接调用
C.在类方法中只能调用本类中的类方法
D.在类方法中绝对不能调用实例方法

B 类方法是指用static修饰的方法,普通方法叫对象方法。 A.this指的是当前对象,类方法依附于类而不是对象this会编译出错 C.类方法中也可以调用其他类的类方法。同时可以通过创建对象来调用普通方法 D.类方法中可以创建对象,所以可以调用实例方法

4、下列关于Java并发的说法中正确的是()
正确答案: B
A.CopyOnWriteArrayList适用于写多读少的并发场景
B.ReadWriteLock适用于读多写少的并发场景
C.ConcurrentHashMap的写操作不需要加锁,读操作需要加锁
D.只要在定义int类型的成员变量i的时候加上volatile关键字,那么多线程并发执行i++这样的操作的时候就是线程安全的了

A,CopyOnWriteArrayList适用于写少读多的并发场景
B,ReadWriteLock即为读写锁,他要求写与写之间互斥,读与写之间互斥,
   读与读之间可以并发执行。在读多写少的情况下可以提高效率
C,ConcurrentHashMap是同步的HashMap,读写都加锁
D,volatile只保证多线程操作的可见性,不保证原子性

一个线程执行的过程有三个阶段:
加载(复制)主存数据到操作栈 -->  对操作栈数据进行修改  --> 将操作栈数据写回主存
volatite关键字,让编译器不去优化代码使用缓存等,以保证线程在“加载数据阶段”加载的数据都是最新的

5、当我们需要所有线程都执行到某一处,才进行后面的的代码执行我们可以使用?
正确答案: B
A.CountDownLatch
B.CyclicBarrier
C.Semaphore
D.Future

CountDownLatch:老师要等所有学生来教室了才能讲课(这种等待只与老师有关,与学生无关,因为他们到教室后不需要等谁就可以做自己的事情)。
    流程:首先给CountDownLatch对象设置一个count。老师await(),每个学生来了都要CountDown()一下把count减一,所有学生都CountDown()完了count也就等于0了,这时老师await()结束(CountDownLatch对象本身根据count判断await()结束与否,程序员无须自己判断),然后才能开始上课。
CyclicBarrier:无论老师、学生都要等其他人到教室了才能做自己的事,否则老师不能讲课,学生也不能自顾自的做自己的事(都得等着)。
    流程:首先给CyclicBarrier对象设置一个sum。每个人就位后就await()等待其他人,同时CyclicBarrier对象也获知新增一个人在await()了,当最后一个人也await()时,CyclicBarrier对象就知道所有人都到齐了(通过内部与事先设定的人数sum比较得知)。然后它一声令下:“人都到齐了,各干各的吧!”,然后所有人才接着各忙各的。

6、下面哪段程序能够正确的实现了GBK编码字节流到UTF-8编码字节流的转换:
byte[] src,dst;

正确答案: B
A.dst=String.fromBytes(src,“GBK”).getBytes(“UTF-8”)
B.dst=new String(src,“GBK”).getBytes(“UTF-8”)
C.dst=new String(“GBK”,src).getBytes()
D.dst=String.encode(String.decode(src,“GBK”)),“UTF-8” )

操作步骤就是先解码再编码
用new String(src,"GBK")解码得到字符串
用getBytes("UTF-8")得到UTF8编码字节数组

7、ResultSet中记录行的第一列索引为?
正确答案: C
A.-1
B.0
C.1
D.以上都不是

ResultSet跟普通的数组不同,索引从1开始而不是从0开始

8、下面哪个Java语句声明了一个适合于创建50个字符串对象数组的变量?
正确答案: B C F
A.char a[][];
B.String a[];
C.String[] a;
D.Object a[50];
E.String a[50];
F.Object a[];

A:char[][] 定义了二位字符数组。在Java中,使用字符串对char数组赋值,必须使用toCharArray()方法进行转换。所以A错误。

B、C:在Java中定义String数组,有两种定义方式:String a[]和String[] a。所以B、C正确。

D、E:数组是一个引用类型变量 ,因此使用它定义一个变量时,仅仅定义了一个变量 ,这个引用变量还未指向任何有效的内存 ,因此定义数组不能指定数组的长度。所以D、E错误。

F:Object类是所有类的父类。子类其实是一种特殊的父类,因此子类对象可以直接赋值给父类引用变量,无须强制转换,这也被称为向上转型。这体现了多态的思想。所以F正确。

9、输入流将数据从文件,标准输入或其他外部输入设备中加载道内存,在 java 中其对应于抽象类()及其子类。

正确答案: A
A.java.io.InputStream
B.java.io.OutputStream
C.java.os.InputStream
D.java.os.OutputStream

java.io.InputStream  : 此抽象类是表示字节输入流的所有类的超类
java.io.OutputStream : 此抽象类是表示字节输出流的所有类的超类
java.os.InputStream  , java.os.OutputStream 应该是不存在的,干扰项

1.String对象不可变、StringBuffer对象可变的含义: 举个例子:String str = "aa"; str = "aa"+"bb"; 此时str的值为"aabb",但是"aabb"不是在开始的字符串"aa"后面直接连接的"bb",而是又新生成了字符串"aabb",字符串"aa"一旦被初始化,那么它的值不可能再改变了。 StringBuffer strb = StringBuffer("aa"); strb.append("bb"); 此时的strb的值也为"aabb",但是"aabb"是直接在开始的字符串"aa"后面连接的“bb”,并没有生成新的字符串。

类变量在不设置初始值时,会进行默认值赋值,而局部方法中声明的变量则必须进行初始化,他不会进行默认值赋值。

10、下列说法正确的是()

正确答案: C
A.WebLogic中开发消息Bean的non-persistent 方式可以保证消息的可靠
B.EJB容器发生错误,non-persistent方式下JMS容器仍然会将消息发送
C.EJB容器发生错误,persistent方式下JMS容器仍然会将消息发送
D.EJB容器发生错误,两种方式下JMS容器仍会在MDB可用的时候将消息发送

weblogic中开发消息Bean时的persistent与non-persisten的差别:
persistent方式的MDB可以保证消息传递的可靠性,也就是如果EJB容器出现问题而JMS服务器依然会将消息在此MDB可用的时候发送过来。
non-persistent方式的消息将被丢弃

11、以下 json 格式数据,错误的是

正确答案: A C
A.{company:4399}
B.{“company”:{“name”:[4399,4399,4399]}}
C.{[4399,4399,4399]}
D.{“company”:[4399,4399,4399]}
E.{“company”:{“name”:4399}}

JSON由{键:值}组成,需要注意的是:
1)键用引号(单双都行)引起来,也可以不使用引号;
2)值得取值类型:
1. 数字(整数或浮点数)
2. 字符串(在双引号中)
3. 逻辑值(true 或 false)
4. 数组(在方括号中) {"persons":[value1 , value2]}
5. JSON对象(在花括号中) {"address":{"province":"陕西"....}}
6. null

12、下列正确的有()
正确答案: A C D
A.call by value不会改变实际参数的数值
B.call by reference能改变实际参数的参考地址
C.call by reference不能改变实际参数的参考地址
D.call by reference能改变实际参数的内容

值传递是将变量的一个副本传递到方法中,方法中如何操作该变量副本,都不会改变原变量的值。
引用传递是将变量的内存地址传递给方法,方法操作变量时会找到保存在该地址的变量,对其进行操作。会对原变量造成影响。

13、java语言的下面几种数组复制方法中,哪个效率最高?
正确答案: B
A.for 循环逐一复制
B.System.arraycopy
C.Array.copyOf
D.使用clone方法

(1)从速度上看:System.arraycopy > clone > Arrays.copyOf > for 
(2)for的速度之所以最慢是因为下标表示法每次都从起点开始寻位到指定下标处(现代编译器应该对其有进行优化,改为指针),另外就是它每一次循环都要判断一次是否达到数组最大长度和进行一次额外的记录下标值的加法运算。 
(3)查看Arrays.copyOf的源码可以发现,它其实本质上是调用了System.arraycopy。之所以时间差距比较大,是因为很大一部分开销全花在了Math.min函数上了。

14、关于java集合下列说法不正确的有哪些()
正确答案: A B D
A.HashSet 它是线程安全的,不允许存储相同的对象
B.ConcurrentHashMap 它是线程安全的,其中存储的键对象可以重复,值对象不能重复
C.Collection接口是List接口和Set接口的父接口,通常情况下不被直接使用
D.ArrayList线程安全的,允许存放重复对象

A:  HashSet 它不是线程安全的,属于Set接口下的实现类,Set下的实现类特征就是无序,不允许存储相同的对象

B:  ConcurrentHashMap 它是线程安全的HashMap实现,特征也相似,其中存储的值对象可以重复,键对象不能重复

C:  Collection接口是List接口和Set接口的父接口,通常情况下不被直接使用

D:  ArrayList线程不安全的,底层是数组实现,允许存放重复对象

15、下列有关java构造函数叙述正确的是()
正确答案: C D
A.构造器的返回值为void类型
B.如果一个源文件中有多个类,那么构造器必须与公共类同名
C.构造器可以有0个,1个或一个以上的参数
D.每个类可以有一个以上的构造器

构造方法是一种特殊的方法,具有以下特点。
(1)构造方法的方法名必须与类名相同。
(2)构造方法没有返回类型,也不能定义为void,在方法名前面不声明方法类型。
(3)构造方法的主要作用是完成对象的初始化工作,它能够把定义对象时的参数传给对象的域。
(4)一个类可以定义多个构造方法,如果在定义类时没有定义构造方法,则编译系统会自动插入一个无参数的默认构造器,这个构造器不执行任何代码。
(5)构造方法可以重载,以参数的个数,类型,顺序。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mingshengda

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值