Java要点和《疯狂Java讲义》例程整理(二)

2014-11-24 03:26:37 · 作者: · 浏览: 1
c void main(String[] args){ String s1 = "abcd"; String s2 = "ab"; String s3 = "cd"; String s4 = "ab" + "cd"; String s5 = "a" + "b" + "cd"; String s6 = s2 + s3; String s7 = new String("abcd"); System.out.println(s1 == s4); System.out.println(s1 == s5); System.out.println(s1 == s6); System.out.println(s1.equals(s6)); System.out.println(s1 == s7); System.out.println(s1.equals(s7)); } }
true
true
false
true
false
true

静态类方法

P173
	public static void NullAccessStaticTest(){
		System.out.println("NullAccessStaticTest");
	}
	
	public static void main(String[] args){
		Test test = null;
		test.NullAccessStaticTest();
	}

NullAccessStaticTest

单例类

P174
class Singleton {
	private static Singleton instance;
	private Singleton(){}
	public static Singleton getInstance()
	{
		if(instance == null){
			instance = new Singleton();
		}
		return instance;
	}
}

public class Test {
	
	public static void main(String[] args){
		Singleton s1 = Singleton.getInstance();
		Singleton s2 = Singleton.getInstance();
		System.out.println(s1 == s2);
	}
}

true

final

final修饰的对象只能被赋值一次 在编译时能够确定的值称为“宏变量”,需要调用函数等的则不是 P178
public class Test {
	public static void main(String[] args){
		final String book = "abcd" + 99.0;
		final String book2 = "abcd" + String.valueOf(99.0);
		System.out.println(book == "abcd99.0");
		System.out.println(book2 == "abcd99.0");
	}
}

true
false

抽象类和接口

接口只能包含抽象方法;抽象类可以 包含普通方法接口不能定义静态方法;抽象类可以接口只能定义静态常量Field,不能定义普通Field;抽象类都可以接口里不包含构造器;抽象类可以包含接口里不能包含初始化块;抽象类可以一个类最多只能有一个直接父类;但一个类可以直接实现多个接口

内部类

非静态内部类中,内部类访问外部类属性,外部类访问内部类属性 P202
public class Outer {
	private String outProp = "outProp";
	
	private class Inner{
		private String inProp = "inProp";
		private void accessOuterProp()
		{
			System.out.println(outProp);
		}
	}
	
	public void accessInnerProp(){
		Inner in = new Inner();
		in.accessOuterProp();
		System.out.println(in.inProp);
	}
	
	public static void main(String[] args){
		Outer out = new Outer();
		out.accessInnerProp();
		Inner in = new Outer().new Inner();
		in.accessOuterProp();
	}
}

outProp
inProp
outProp

外部类访问静态内部类的静态变量和普通成员变量 P204
public class Outer {
	static class Inner{
		private static int prop1 = 5;
		private int prop2 = 9;
	}
	
	public void accessInnerProp(){
		System.out.println(Inner.prop1);
		System.out.println(new Inner().prop2);
	}
	
	public static void main(String[] args){
		Outer out = new Outer();
		out.accessInnerProp();
	}
}

5
9

在外部类以外创建非静态内部类实例 P205
public class Test {
	public static void main(String[] args){
		Out.In in = new Out().new In("Test Message");
	}
}

class Out
{
	class In
	{
		public In(String msg)
		{
			System.out.println(msg);
		}
	}
}

Test Message

外部类以外继承内部类 P206
public class Test {
	public static void main(String[] args){
		new Subclass(new Out());
	}
}

class Subclass extends Out.In
{
	public Subclass(Out out)
	{
		out.super("hello");
	}
}

class Out
{
	class In
	{
		public In(String msg)
		{
			System.out.println(msg);
		}
	}
}

hello

在外部类之外使用静态内部类 P207
public class Test {
	public static void main(String[] args){
		StaticOut.StaticIn in = new StaticOut.StaticIn();
	}
}

class StaticOut
{
	static class StaticIn
	{
		public StaticIn(){
			System.out.println("Ctor of StaticIn");
		}
	}
}

Ctor of StaticI