1、String str=new String("abc");一共产生了几个对象?
首先new String()在堆中产生了一个对象 ,然后“abc"在字符串常量池中产生了一个对象,最后String str 在栈中产生了一个引用对象。所以一共产生了三个对象。
2、下列变量定义正确的是:
A String String="abc" B String int="abc" C String 1string="abc" D String $_str="abc"
一般变量命名可以使用字母,符号开头,但是不可以使用java里面的关键字,java 的关键字一般为小写,也不能以数字开头,所以A D 是正确的。
3、使用反射来调用一个类Person的sayHi方法,
<span style="font-size:14px;">public class Person{
public void sayHi(String userName){
System.out.println("Hi "+userName);
}
}</span>
a, 首先获得运行时类 ,这里方法有三种:Class clazz=Person.class(); 或Class clazz=Class.forName("com..Person"); 或 Class clazz=new Person().getClass();
b,获取运行时类的方法:Method m=clazz.getMethod("sayHi",String.class); //其中String.class表示传入参数的类型
c,调用方法:m.invoke(clazz.newInstance(),"admin");这里的返回值为sayHi的返回值。
4、short s1=1; s1=s1+1;代码运行的结果为:
A 2 B 1 C 没有结果
考察数据类型转换的知识 short int long 可以自动转型 ,反过来需要强制转型 ,s1=s1+1;需要做强制转换,所以运行不能通过编译的,故没有结果C ,这里注意
s1+=1是可以运行的,结果为2.
5、forward(转发)与redirect(重定向)的区别
a.从地址栏显示来说
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.
redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.
b.从数据共享来说
forward:转发页面和转发到的页面可以共享request里面的数据.
redirect:不能共享数据.
c.从运用地方来说
forward:一般用于用户登陆的时候,根据角色转发到相应的模块.
redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等.
d.从效率来说
forward:高.
redirect:低.
6、下列那些是线程安全的:
A Integer B String C StringBuilder D StringBuffered E int
StringBuffered为线程安全 故 D
7、参数传递中的 传值和传引用的区别:
传值: 对于原始数据类型 short int long double float char boolean byte 参数传递是传值的,开发者在方法中修改了参数值,方法调用线束后不会改变原来那个变量的值;
传引用:传递的是对象的引用,那么就会传递引用值,这意味着,在方法调用期间实参和形参都是该引用值所代表对象的别名。所以在参数传递之前,必须由实参表达式算出一个对象的引用
<span style="font-size:14px;">public class KnowledgeTest {
public static void main(String [] args){
int val;
StringBuffer sb;
String str="ads";
val=10;
sb=new StringBuffer("pears");
System.out.println("val is "+val);
System.out.println("sb is "+sb);
System.out.println("str is "+str);
System.out.println(" ");
System.out.println("callint modify");
modify(val,sb,str);
System.out.println("val is "+val);
System.out.println("sb is "+sb);
System.out.println("str is "+str);
}
private static void modify(int val, StringBuffer sb, String str) {
val=0;
str="ddd";
sb.append("good");
sb=new StringBuffer("test");
}
}</span>
输出结果 :
<span style="font-size:14px;">val is 10
sb is pears
str is ads
callint modify
val is 10
sb is pearsgood
str is ads</span>
8、java 异常处理:
异常的基础类为:Throwable派生出Exception类和error类,error 类表示程序本身无法恢复的严重错误,用于指示应用程序的严重问题,不可以捕获而且程序也法处理的;exception,应用程序可以捕获的,并且可以处理的异常。异常主要分为运行进异常:
RuntimeException 和检查性异常。主要的运行时异常有:
ClassCastException(类转换异常)
IndexOutOfBoundsException(数组越界)
NullPointerException(空指针)
ArrayStoreException(数据存储异常,操作数组时类型不一致)
还有IO操作的BufferOverflowException异常
主要的检查性异常有:IOException ,SQLException 这类异常一般在编译期就可以被发现,常常编译器会提醒我们去处理这类异常。
9、Java中Collection与Collections的区别
java.util.Collection是一个集合接口,它提供了对集合对象进行基本操作的通用接口方法,Colllection接口在java类库中有很多种具体的实现。
java.util.Collections是一个包装类,它包含有各种有关集合操作的静态多态方法。此不能不实例化。就像是一个工具类,服务于Java的Collection框架。