1、public/private/protected/默认修饰符
有如下一段程序:
package a.b.c;
public class Test{
String name="BlueDavy";
protected String desc="blog.bluedavy.cn";
}
package a.b.c;
public class TestA{
private String name;
private String desc;
public TestA(){
Test test=new Test();
name=test.name;
desc=test.desc;
}
}
package a.b.c.d;
public class TestB{
private String name;
private String desc;
public TestB(){
Test test=new Test();
name=test.name;
desc=test.desc;
}
}
package a.b.c.d;
import a.b.c.Test;
public class TestC extends Test{
private String cname;
private String cdesc;
public TestC(){
cname=name;
cdesc=desc;
}
}
请问以上TestA、TestB、TestC能编译过吗,如编译不过,原因是什么?
2、static/final修饰符
有如下一段程序:
package a.b.c;
public class Test{
private static int i=0;
public int getNext(){
return i++;
}
}
package a.b.c;
public class TestB{
public static void main(String[] args){
Test test=new Test();
System.out.println(test.getNext());
Test testObject=new Test();
System.out.println(testObject.getNext());
System.out.println(test.getNext());
}
}
请问最后打印出来的是什么,为什么?(这里其实还潜在的考察了i++和++i的不同)
3、集合
有这样一段程序:
package a.b.c;
public class Test{
public static void main(String[] args){
List list=new ArrayList();
list.add("a");
list.add("b");
list.add("a");
Set set=new HashSet();
set.add("a");
set.add("b");
set.add("a");
System.out.println(list.size());
System.out.println(set.size());
}
}
请问运行上面的程序后会打印出的是什么,为什么?
4、字符串操作
有这么一段程序:
String a=new String("a");
String b="b";
String c=a+b;
StringBuffer strBuf=new StringBuffer();
strBuf.append("a");
strBuf.append("b");
String d=strBuf.toString();
StringBuilder strBuilder=new StringBuilder();
strBuilder.append("a");
strBuilder.append("b");
String e=strBuilder.toString();
请问以上程序片段中c、d、e的字符串的创建各有什么不同?
5、对象比较
有这么一段程序:
package a.b.c;
public class Test{
public String name="BlueDavy";
}
package a.b.c;
public class TestA{
public static void main(String[] args){
Test test=new Test();
Test testB=new Test();
System.out.println(test.equals(testB));
System.out.println(test.name.equals(testB.name));
}
}
请问以上程序执行的结果是,为什么?
潜在问题,如要test.equals(testB)为true,需要怎么做?
以上考察变量作用域知识,protected受保护的,保护给朋友和子女;默认情况下为friendly,友好、朋友,同包、同胞,一个包内的才可以访问,子女不算朋友。注意默认情况下为friendly,只是这么说,但 java中并没有这个修饰符。
-------------------------------------------------------------------------------
6.字符串类型对象创建及存储知识
public class String1 {
/*
* 1.String使用private final char value[]来实现字符串的存储,也就是说String对象创建之后,
* 就不能再修改此对象中存储的字符串内容,就是因为如此,才说String类型是不可变的(immutable)。
* 2.String类有一个特殊的创建方法,就是使用""双引号来创建.例如new String("i am")实际
* 创建了2个String对象,一个是"i am"通过""双引号创建的,另一个是通过new创建的.
* 只不过他们创建的时期不同, 一个是编译期,一个是运行期!
* 3.栈中存放基本类型变量和对象的引用;堆中存放类的对象。
*/
public static void main(String[] args){
String a = new String("123");
String b = new String("123");
System.out.println("a == b is:" + (a == b));
System.out.println("a.equals(b) is: " + a.equals(b));
System.out.println("a.hashCode() == b.hashCode() is: " + (a.hashCode() == b.hashCode()));
String c = "123";
String d = "123";
System.out.println("c == d is: " + (c == d));
System.out.println("c == a is: " + (c == a));
String e = "456";
String f = "123456";
String g = c + e;
System.out.println("g == f is: " + (g == f));
}
}
【参考文章】
http://www.moon-soft.com/doc/24701.htm
http://it.kswchina.com/java/zd/421167.html
http://www.blogjava.net/xcp/archive/2008/08/10/stack.html
---------------------------------------------------------------
7.构造函数的调用顺序
package test;
class FatherClass {
public FatherClass(){
System.out.println("Father");
}
}
class ChildClass extends FatherClass{
public ChildClass(){
System.out.println("Child");
}
}
public class Test {
public static void main(String[] args){
FatherClass a = new FatherClass();
ChildClass b = new ChildClass();//若B无没有显示的构造函数,会去调用A的构造函数???
}
}
运行结果为
Father
Father
Child
--------------------------------------------------------------
8.java参数传递
package test;
public class Test {
public static void main(String[] args){
Test test = new Test();
String[] arr = {"yang","aiyou"};
test.swap(arr[0],arr[1]);
System.out.println(arr[0] + "," + arr[1]);
test.swap(arr,0,1);
System.out.println(arr[0] + "," + arr[1]);
}
public void swap(String s1,String s2){
String temp = s1;
s1 = s2;
s2 = temp;
}
public void swap(String[] arr,int index1,int index2){
String temp = arr[index1];
arr[index1] = arr[index2];
arr[index2] = temp;
}
}
运行结果为:
yang,aiyou
aiyou,yang
------------------------------------------------------------
posted on 2008-10-17 23:24
杨爱友 阅读(397)
评论(0) 编辑 收藏 所属分类:
java相关技术