牛客网第15天

  1. public class Test {
    public static int a = 1;
    public static void main(String[] args) {
    int a = 10;
    a++; Test.a++;
    Test t=new Test();
    System.out.println(“a=” + a + " t.a=" + t.a);
    }
    }
    A.a=10 t.a=3
    B.a=11 t.a=2
    C.a=12 t.a=1
    D.a=11 t.a=1
    正确答案: B 你的答案: A (错误)
    解析:值为1的a属于类变量也叫作成员变量,值为10的a是局部变量 首先a++时就近原则,用局部变量10来加,Text.a直接用类名调用成员变量的情况,只能是static 修饰的成员变量1来加,然后又实例化了对象,在输出中第一个a= 用就近原则输出11,第二个t.a 对象只能调用类变量输出2
  2. 如下Java语句 double x=2.0; int y=4; x/=++y; 执行后,x的值是()
    A.0.5
    B.2.5
    C.0.4
    D.2.0
    正确答案: C 你的答案: C (正确)
    解析:x/=++y
    ++在前先+在用 所以可以等价为x/=5,所以答案为c
    3.下面关于垃圾收集的描述哪个是错误的?
    A.使用垃圾收集的程序不需要明确释放对象
    B.现代垃圾收集能够处理循环引用问题
    C.垃圾收集能提高程序员效率
    D.使用垃圾收集的语言没有内在泄漏问题
    正确答案: D 你的答案: C (错误)
    解析:java的垃圾收集机制主要针对新生代和老年代的内存进行回收,不同的垃圾收集算法针对不同的区域。所以java的垃圾收集算法使用的是分代回收。一般java的对象首先进入新生代的Eden区域,当进行GC的时候会回收新生代的区域,新生代一般采用复制收集算法,将活着的对象复制到survivor区域中,如果survivor区域装在不下,就查看老年代是否有足够的空间装下新生代中的对象,如果能装下就装下,否则老年代就执行FULL GC回收自己,老年代还是装不下,就会抛出OUtOfMemory的异常
    4.在基本JAVA类型中,如果不明确指定,整数型的默认是什么类型?带小数的默认是什么类型?
    A.int float
    B.int double
    C.long float
    D.long double
    正确答案: B 你的答案: B (正确)
    解析:记住即可
    5.下面有关JVM内存,说法错误的是?
    A.程序计数器是一个比较小的内存区域,用于指示当前线程所执行的字节码执行到了第几行,是线程隔离的
    B.Java方法执行内存模型,用于存储局部变量,操作数栈,动态链接,方法出口等信息,是线程隔离的
    C.方法区用于存储JVM加载的类信息、常量、静态变量、即时编译器编译后的代码等数据,是线程隔离的
    D.原则上讲,所有的对象都在堆区上分配内存,是线程之间共享的
    正确答案: C 你的答案: C (正确)
    解析:
    运行时数据区包括:虚拟机栈区,堆区,方法区,本地方法栈,程序计数器
    虚拟机栈区 :也就是我们常说的栈区,线程私有,存放基本类型,对象的引用和 returnAddress ,在编译期间完成分配。
    堆区 , JAVA 堆,也称 GC 堆,所有线程共享,存放对象的实例和数组, JAVA 堆是垃圾收集器管理的主要区域。
    方法区 :所有线程共享,存储已被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据。这个区域的内存回收目标主要是针对常量池的对象的回收和对类型的卸载。
    程序计数器 :线程私有,每个线程都有自己独立的程序计数器,用来指示下一条指令的地址
    第14天做过。
    6.下面哪个选项正确创建socket连接?
    A.Socket s = new Socket(8080);
    B.Socket s = new Socket(“192.168.1.1”,8080)
    C.SocketServer s = new Socket(8080);
    D.Socket s = new SocketServer(“192.168.1.1”,8080)
    正确答案: B 你的答案: B (正确)
    解析: 这个应该是答案的错误,端口号不能使用字符串类型的;
    //创建Socket 客户端对象
    Socket s = new Socket(“127.0.0.1”,6666);
    //创建ServerSocket 服务器端对象。。
    ServerSocket ss = new ServerSocket(6666);
    //监听服务器连接
    s = ss.accept();
    7.下面有关JAVA swing的描述,说法错误的是?
    A.Swing是一个基于Java的跨平台MVC框架。使用单线程模式。
    B.Swing 是为了解决 AWT 存在的问题而新开发的包,它以 AWT 为基础的
    C.Swing优化了AWT,运行速度比AWT快
    D.Swing是一个基于组件的框架,所有的组件都是从javax.swing.JComponent类继承来的
    正确答案: C 你的答案: B (错误)
    解析:Swing是一个用于开发Java应用程序用户界面的开发工具包。它以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格。Swing开发人员只用很少的代码就可以利用Swing丰富、灵活的功能和模块化组件来创建优雅的用户界面。
    工具包中所有的包都是以swing作为名称,例如javax.swing,javax.swing.event
    用Swing创建图形界面步骤:
    (1)导入Swing包
    (2)选择界面风格
    (3)设置顶层容器
    (4)设置按钮和标签
    (5)将组件放到容器上
    (6)为组件增加边框
    (7)处理事件
    (8)辅助技术支持
    1。导入Swing包
    下面语句导入Swing包
    import javax.swing.*;

大部分Swing程序用到了AWT的基础底层结构和事件模型,因此需要导入两个包:
import java.awt.;
import java.awt.event.
;

如果图形界面中包括了事件处理,那么还需要导入事件处理包:
import javax.swing.event.*;
2.选择界面风格
Swing允许选择程序的图形界面风格常用的有java风格,windows风格等
下面的代码用于选择图形界面风格,这里选择的是跨平台的Java界面风格。
try { UIManager.setLookAndFeel(
UIManager.getCrossPlatformLookAndFeelClassName( )); }
catch (Exception e) { }
(3) 设置顶层容器
图形界面至少要有一个顶级Swing容器
顶级Swing容器为其它Swing组件在屏幕上的绘制和处理事件提供支持
常用的顶级容器:
JFrame(框架):表示主程序窗口
JDialog(对话框):每个JDialog对象表示一个对话框,对话框属于二级窗口
JApplet(小程序):在浏览器内显示一个小程序界面
一个框架包括边界、菜单栏、工具栏、状态栏,以及中间占主要部分的窗格
窗格也可以看作是一种面板,但它是框架的一个组成部分
组件不会直接放到框架上,而是放在若干个面板上,这些面板再放到窗格上
用框架对象的getContentPane()函数来获得窗格,再调用窗格的add()函数放置面板
public static void main(String[ ]args){JFrame frame=new JFrame(“SwingApplication”);
JPanel panel1=new JPanel();
frame.getContentPane().add(panel1,BorderLayout.CENTER);
…//添加其他组件
frame.pack();frame.setVisible(true);}
8.void waitForSignal()
{
Object obj = new Object();
synchronized(Thread.currentThread())
{
obj.wait();
obj.notify();
}
}
Which statement is true?
A.This code may throw an InterruptedException
B.This code may throw an IllegalStateException
C.This code may throw a TimeOutException after ten minutes
D.This code will not compile unless”obj.wait()”is replaced with”(Thread)obj).wait()”
E.Reversing the order of obj.wait()and obj.notify()may cause this method to complete normally
正确答案: A 你的答案: B (错误)
解析:
②wait() 与 notify/notifyAll() 的执行过程
由于 wait() 与 notify/notifyAll() 是放在同步代码块中的,因此线程在执行它们时,肯定是进入了临界区中的,即该线程肯定是获得了锁的。
当线程执行wait()时,会把当前的锁释放,然后让出CPU,进入等待状态。
当执行notify/notifyAll方法时,会唤醒一个处于等待该 对象锁 的线程,然后继续往下执行,直到执行完退出对象锁锁住的区域(synchronized修饰的代码块)后再释放锁。
从这里可以看出,notify/notifyAll()执行后,并不立即释放锁,而是要等到执行完临界区中代码后,再释放。故,在实际编程中,我们应该尽量在线程调用notify/notifyAll()后,立即退出临界区。即不要在notify/notifyAll()后面再写一些耗时的代码。
wait() 与 notify/notifyAll()都是放在同步代码块中才能够执行的。如果在执行wait() 与 notify/notifyAll() 之前没有获得相应的对象锁,就会抛出:java.lang.IllegalMonitorStateException异常。
9.针对以下代码,哪些选项执行后是true的:()
class CompareReference{
public static void main(String [] args){
float f=42.0f;
float f1[]=new float[2];
float f2[]=new float[2];
float[] f3=f1;
long x=42;
f1[0]=42.0f;
}
}
A.f1双等于f2
B.x双等于f1[0]
C.f1双等于f3
D.f2双等于f1[1]
正确答案: B C 你的答案: B C (正确)
解析: BC正确,选项B解释,java核心卷I中43页有如下表述:两个数值进行二元操作时,会有如下的转换操作:
如果两个操作数其中有一个是double类型,另一个操作就会转换为double类型。
否则,如果其中一个操作数是float类型,另一个将会转换为float类型。
否则,如果其中一个操作数是long类型,另一个会转换为long类型。
否则,两个操作数都转换为int类型。
故,x==f1[0]中,x将会转换为float类型。
10.下面的类哪些可以处理Unicode字符?
A.InputStreamReader
B.BufferedReader
C.Writer
D.PipedInputStream
正确答案: A B C 你的答案: A B C (正确)
解析: 字节流:
InputStream
|-- FileInputStream (基本文件流)
|-- BufferedInputStream
|-- DataInputStream
|-- ObjectInputStream
字符流
Reader
|-- InputStreamReader (byte->char 桥梁)
|-- BufferedReader (常用)
Writer
|-- OutputStreamWriter (char->byte 桥梁)
|-- BufferedWriter
|-- PrintWriter (常用)

猜你喜欢

转载自blog.csdn.net/pingbu_qingyun/article/details/83547612
今日推荐