关闭

java面试问题

288人阅读 评论(0) 收藏 举报

写出两种以上将String强制转换成int的方法?

int -> String

int i=12345;

String s="";

第一种方法:s=i+"";

第二种方法:s=String.valueOf(i);

第三种方法:s=Integer.toString();

String -> int

s="12345";

int i;

第一种方法:i=Integer.parseInt(s);

第二种方法:i=Integer.valueOf(s).intValue();

 

两种跳转方式分别是什么?有什么区别?

1.forward跳转:<jsp:forward page="跳转页面地址" />

2.response跳转:response.sendRedirect("跳转页面地址");

 

forward跳转:\\服务器端跳转,地址栏不改变;

response跳转:\\客户端跳转,地址栏改变;

 

response.sendRedirect("跳转页面地址");

request.getRequestDispatcher("/message.jsp").forward(request, response);

 

Java 中八种基本数据类型占用字节空间

基本数据类型  所占用空间大小

byte b; 1字节

short s; 2字节

int i; 4字节

long l; 8字节

char c; 2字节(C语言中是1字节)

float f; 4字节

double d; 8字节

boolean bool; false/true

 

public static void main(String[] args) {
	int a=10,b=3,m=5;
	if(a==b)
		m+=a;
	else
		m=++a*m;//类似于 m=(++a)*m
	System.out.println(m);
}

 打印结果:55 

 

public class Person {
	String name;
	double wage;
	
	public Person(String name){
		this.name=name;
	}
	
	public Person(String name,double wage){
		this.name=name;
		this.wage = wage;
	}

	public double getWage() {
		return wage;
	}

	public void setWage(double wage) {
		this.wage = wage;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
	public static void main(String[] args){
		Person p = new Person("huangbiao",44);
		System.out.println(p.getWage());
	}
	
}

 打印结果是:44.0

 

public class A {
	String str1="hello! \t";
	String str2="how are you? ";
	public String toString(){
		return str1+str2;
	}
}

 

public class B extends A{
	String str1="\b\b. Bill";
	public String toString(){
		return super.str1+str1;
	}
}

 

public class Demo1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		A a = new A();
		B b = new B();
		System.out.println(a);
		System.out.println(b);
	}

}

运行结果:

备注:

\b  单词边界

\f  换页符

\r  回车

\n  换行符

\t  制表符

\"  转义  “

\'   应该没有这个 

\\  转义 \

 

 

public static void main(String[] args) {
		int i=0;
		for(prt("a");prt("b")&&i<2;prt("c")){
			System.out.print("-d-");
			i++;
		}
	}
	
	static boolean prt(String a){
		System.out.print("-"+a+"-");
		return true;
	}
}

运行结果: -a--b--d--c--b--d--c--b-

备注:最后一次需要执行prt("c")函数,然后再判断prt("b")&&i<2,不满足条件之后跳出循环。

 

 

设x为int型变量,则执行以下语句段后,x的值为:

x=10;

x+=x-=x-x;   

A. 30

B. 20

C. 40

D. 10

 

 定义字符串:String s1="hello";对下面程序描述正确的是:

public static void main(String args[]) {
		//字符串是存在“堆”中的,s1指向这个字符串,所以两者相等
		String s1="hello";
		if (s1 == "hello") {
			System.out.println("s1 = \"hello\"");
		} else {
			System.out.println("s1 !=hello");
		}
	}

 

A. 输出 s1 !=hello

B. 编译正确,运行错误

C. 产生编译错误

D. 输出 s1="hello"

 

静态属性的访问

public class HasStatic {
	private static int x = 100;

	public static void main(String args[]) {
		HasStatic hs1 = new HasStatic();
		hs1.x++;
		System.out.println(hs1.x);
		
		HasStatic hs2 = new HasStatic();
		hs2.x++;
		System.out.println(hs2.x);
		hs1 = new HasStatic();
		hs1.x++;
		System.out.println(hs1.x);
		HasStatic.x--;
		System.out.println(HasStatic.x);
		System.out.println("x=" + x);
	}
}

 运行结果:

101

102

103

102

x=102

 

java修饰符的范围

 

try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?

public class Test {

	public static void main(String[] args) {
		System.out.println("main : " + new Test().test());
	}

	static int test()
	{
		int x = 1;

		try
		{
			return x;
		}
		finally
		{
			++x;
			System.out.println("finally : " + x);
		}
	}

}

运行结果:

finally : 2

main : 1 

 

public class Test {

	public static void main(String[] args) {
		System.out.println("main : " + new Test().test());
	}

	static int test()
	{

		try
		{
			return 1;
		}
		finally
		{
			return 2;
		}
	}

}

main : 2

Return并不是让函数马上返回,而是return语句执行后,将把返回结果放置进函数栈中,此时函数并不是马上返回,它要执行finally语句后才真正开始返回。 

 

 

由于不同的数据库,存在不同的SQL,因此操作数据库的SQL代码也就存在差异,那么怎么样实现或者怎么去设计由一个对象来分别区分不同的SQL?

解决方式:

1、定义一个接口,然后由不同的对象去继承这个接口,然后分别实现的是Oracle或者是SQLSERVER等等

2、定义一个父类,实现多种数据库公共相同的部分,然后Oracle类实现oracle的操作,SQLSERVER类实现sqlserver的操作

上面两种方法就能够实现公共部分不需要重写而且区分不同的SQL了

 

 

 

list和set对象有什么区别?

1、List对象是可重复的,有序的

2、set对象是不可重复的,无序的

根据上面的特性,可以去掉重复的部分,比如说是得到两个数组的并集,且不需要重复的部分,就可以利用set的特性

 

 

什么是Hibernate的“懒加载”?

目的:为了减少和数据库交互的次数,推迟和数据库交互的时间

过程:Hibernate从数据库获取某一个对象时,获取某一个对象的集合属性值时,或获取某一个对象所关联的另一个对象时,由于没有使用该对象的数据,Hibernate并不从数据库加载真正的数据,而只是为该对象创建一个代理对象来代表这个对象,这个对象上的所有属性都为默认值,只有在真正需要使用该对象的数据时才创建这个真正的对象,真正从数据库中加载它的数据,在某种情况下,可以提高查询效率。

 

在Hibernate框架中,当我们要访问的数据量过大时,明显用缓存不太合适, 因为内存容量有限 ,为了减少并发量,减少系统资源的消耗,这时Hibernate用懒加载机制来弥补这种缺陷,但是这只是弥补而不是用了懒加载总体性能就提高了。

我们所说的懒加载也被称为延迟加载,它在查询的时候不会立刻访问数据库,而是返回代理对象,当真正去使用对象的时候才会访问数据库。

 

 

使用oracle怎么查询age(年龄)最大的前三位

select rownum,p.* from (select * from person order by age desc) p where rownum<=3;

备注:oracle没有limit和top这个关键字,但是存在rownum这个字段,可以用来限制查询数量

 

如果使用mysql查询前面几行的结果集使用的方式是

select * from employee limit 5;

 

 String s = new String("xyz");创建了几个String Object?   

解答 : 两个

备注:String每次都会在内存中开辟一个新的对象空间,不会像指针那样传递值。

 

 

public String getStr(String str){
	if(str.equals("str")){
		System.out.println("if");
		return "str";
	}
	System.out.println("result");
	return "result";
}

 

如果传递的参数是str字符串,则只会打印if,而后面的result是不会打印出来的,return "str"之后就直接跳出方法了

 

 

 

  • 大小: 3.5 KB
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:284155次
    • 积分:8472
    • 等级:
    • 排名:第2296名
    • 原创:1096篇
    • 转载:14篇
    • 译文:0篇
    • 评论:4条
    最新评论