A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 企业部-娜美 中级黑马   /  2016-7-15 10:36  /  4336 人查看  /  15 人回复  /   4 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 企业部-娜美 于 2016-7-15 10:38 编辑

NO.46-NO.66

问题:main方法的参数里面,字符串数组的第一个参数是什么?
答案:数组是空的,没有任何元素。不像C或者C++,第一个元素默认是程序名。如果命令行没有提供任何参数的话,main方法中的String数组为空,但不是null。

问题:怎么判断数组是null还是为空?
答案:输出array.length的值,如果是0,说明数组为空。如果是null的话,会抛出空指针异常。

问题:程序中可以允许多个类同时拥有都有main方法吗?
答案:可以。当程序运行的时候,我们会指定运行的类名。JVM只会在你指定的类中查找main方法。因此多个类拥有main方法并不存在命名冲突的问题。

问题:静态变量在什么时候加载?编译期还是运行期?静态代码块加载的时机呢?
答案:当类加载器将类加载到JVM中的时候就会创建静态变量,这跟对象是否创建无关。静态变量加载的时候就会分配内存空间。静态代码块的代码只会在类第一次初始化的时候执行一次。一个类可以有多个静态代码块,它并不是类的成员,也没有返回值,并且不能直接调用。静态代码块不能包含this或者super,它们通常被用初始化静态变量。

问题:一个类能拥有多个main方法吗?
答案:可以,但只能有一个main方法拥有以下签名:
public static void main(String[ ]  args)  { }
否则程序将无法通过编译。编译器会警告你main方法已经存在。

问题:简单的介绍下JVM是如何工作的?
答案:JVM是一台抽象的计算机,就像真实的计算机那样,它们会先将.java文件编译成.class文件(.class文件就是字节码文件),然后用它的解释器来加载字节码。

问题:如果原地交换两个变量的值?
答案:先把两个值相加赋值给第一个变量,然后用得到的结果减去第二个变量,赋值给第二个变量。再用第一个变量减去第二个变量,同时赋值给第一个变量。代码如下:
int a=5,b=10;a=a+b;  b=a-b;  a=a-b;
使用异或操作也可以交换。第一个方法还可能会引起溢出。异或的方法如下: int a=5,b=10;a=a+b; b=a-b; a=a-b;
int a = 5; int b = 10;
a = a ∧ b
b = a ∧ b
a = a ∧ b

问题:什么是数据的封装?
答案:数据封装的一种方式是在类中创建set和get方法来访问对象的数据变量。一般来说变量是private的,而get和set方法是public的。封装还可以用来在存储数据时进行数据验证,或者对数据进行计算,或者用作自省(比如在struts中使用javabean)。把数据和功能封装到一个独立的结构中称为数据封装。封装其实就是把数据和关联的操作方法封装到一个独立的单元中,这样使用关联的这些方法才能对数据进行访问操作。封装提供的是数据安全性,它其实就是一种隐藏数据的方式。

问题:什么是反射API?它是如何实现的?
答案:反射是指在运行时能查看一个类的状态及特征,并能进行动态管理的功能。这些功能是通过一些内建类的反射API提供的,比如Class,Method,Field, Constructors等。使用的例子:使用Java反射API的getName方法可以获取到类名。

问题:JVM自身会维护缓存吗,是不是在堆中进行对象分配,操作系统的堆还是JVM自己管理的堆?为什么?
答案:是的,JVM自身会管理缓存,它在堆中创建对象,然后在栈中引用这些对象。

问题:虚拟内存是什么?
答案:虚拟内存又叫延伸内存,实际上并不存在真实的物理内存。

问题:方法可以同时即是static又是synchronized的吗?
答案:可以。如果这样做的话,JVM会获取和这个对象关联的java.lang.Class实例上的锁。这样做等于:
synchronized(XYZ.class)  {
}

问题:String和StringTokenizer的区别是什么?
答案:StringTokenizer是一个用来分割字符串的工具类。
StringTokenizer st = new StringTokenizer("Hello World");
while (st.hasMoreTokens( ) )  {
      System.out.println (st.nextToken ( ) );
}
输出:
Hello
World

问题:transient变量有什么特点?
答案:transient变量不会进行序列化。例如一个实现Serializable接口的类在序列化到ObjectStream的时候,transient类型的变量不会被写入流中,同时,反序列化回来的时候,对应变量的值为null。

问题:哪些容器使用Border布局作为它们的默认布局?
答案:Window, Frame, Dialog。

问题:怎么理解什么是同步?
答案:同步用来控制共享资源在多个线程间的访问,以保证同一时间内只有一个线程能访问到这个资源。在非同步保护的多线程程序里面,一个线程正在修改一个共享变量的时候,可能有另一个线程也在使用或者更新它的值。同步避免了脏数据的产生。
对方法进行同步:
public synchronized viod Method1  ( )  {
//  Appropriate method-related code.
}
在方法内部对代码块进行同步:
public myFunction ( ) {
       synchronized (this)  {
               // Synchronized code here.
          }
}


15 个回复

倒序浏览
赞赞赞
回复 使用道具 举报
就急急急急急急急急急急急急急急急急急急急急急
回复 使用道具 举报
好东西赞一个
回复 使用道具 举报
目前最急缺的好东西
回复 使用道具 举报
我居然感受到了难度
回复 使用道具 举报
顶一个 666
回复 使用道具 举报
这个不错,加油
回复 使用道具 举报
赞一个嘿嘿嘿额黑嘿嘿额黑i
回复 使用道具 举报
学习了,顶!
回复 使用道具 举报
很不错!
回复 使用道具 举报
太少了。。。不够不够
回复 使用道具 举报
学的少,有的还看不懂,以后来看
回复 使用道具 举报
好贴  收藏了
回复 使用道具 举报
不错啊!!!!!!!
回复 使用道具 举报
顶一个顶一个顶一个顶一个顶一个顶一个顶一个顶一个
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马