`
java-mans
  • 浏览: 11391610 次
文章分类
社区版块
存档分类
最新评论

Oracle培训(十)——Core Java第十章知识点总结——Object类 包装类 内部类

 
阅读更多

Core Java第十章知识点总结——Object类 包装类 内部类


知识点预览

Object类

equals方法

toString方法

getClass方法

包装类的概念

包装类的转换

内部类

Object类

1. Object类的概念

a) java.lang.Object是Java中所有类的直接或者间接父类

class A{

}

class B extends A{

}

b) 所有类的对象都可以声明成Object引用(多态)

Object o1 = new A();

Object o2 = new B();

c) Object的子类继承了Object的方法

getClass()方法

equals()方法

toString()方法

d)所有方法子类均可覆盖


getClass()方法


1. getClass方法

返回一个对象的实际类型,不是引用类型

equals方法

1. equals方法

比较两个对象的内容是否相等

public boolean equals(Object o);

String s1 = new String(“suns”);

String s2 = new String(“suns”);

System.out.println(s1 == s2);//false

System.out.println(s1.equals(s2));//true

2.equals方法的默认实现为对比对象的引用(地址)是否相等

Student s1 = new Student(“suns”,30);

Student s2 = new Student(“suns”,30);

System.out.println(s1.equals(s2));//false

3. equals的覆盖

package chp10.ex03;

/**
 * 
 * @author Wentasy
 * @FullName:TestObject3.java
 * @Description: 本程序演示了equals方法的覆盖
 * @Author: Wentasy
 * @Create Date: 2012-8-14
 */
public class TestObject3 {
  public static void main(String args[]){
	  Student s1 = new Student("suns",30);
	  Student s2 = new Student("suns",30);
	  System.out.println(s1.equals(s2));
  }
}

class Student{
	private String name;
	private int age;
	public Student(String name,int age){
		this.name = name;
		this.age = age;
	}
	
	public boolean equals(Object o){
		//判断传入对象是否是空
		if(o==null)return false;
		//判断当前对象和参数是否是同一个对象
		if(this==o)return true;
		//判断当前对象和参数是否是同一类型的
		if(this.getClass()!=o.getClass())return false;
		Student s = (Student)o;
	    if(this.name.equals(s.name)&&this.age == s.age){
	    	return true;
	    }else{
	    	return false;
	    }
	}
}   

toString()方法

1.toString方法

返回一个对象的字符串表示形式

public String toString();

TestString

Student@128f6ee(无意义,覆盖toString方法)

128f6ee:连续存储空间的首地址

package chp10.ex04;

/**
 * 
 * @author Wentasy
 * @FullName:TestToString.java
 * @Description: 本程序演示了toString方法的使用
 * @Author: Wentasy
 * @Create Date: 2012-8-14
 */
class Student{
	String name;
	int age;
	public Student(String name,int age){
		this.name = name;
		this.age = age;
	}
	public String toString(){
		return "name: "+this.name+" age: "+this.age;
	}
}
public class TestToString {
   public static void main(String args[]){
	   Student s = new Student("suns",30);
	   System.out.println(s);
	}
}

包装类

1.包装类的概念

基本类型----->转换成的类

2.包装类的转换



//a)int转换成Integer

int i = 10;
Integer I = new Integer(i);
//b)Integer转换成int

Integer I = new Integer(10); 
int i = I.intValue();
//c)String转换成Integer

String s = "12";
Integer I = new Integer(s);
//d)Integer转换成String

Integer I = new Integer(23);
String s = I.toString();

//e)String转换成int

String s = "20";
int i = Integer.parseInt(s);
//f)int转换成String

int i = 20;
String s1 = String.valueOf(i);
String s2 = ""+i;

内部类

1. 内部类的概念

一个类定义在另一个类的里面

public booleanequals(Object o);

String s1 = newString(“suns”);

String s2 = newString(“suns”);

System.out.println(s1== s2);//false

System.out.println(s1.equals(s2));//true

2. 内部类的分类

成员内部类

静态内部类

局部内部类

匿名内部类

3. 成员内部类

a) 成员内部类的语法

package chp10.ex08;

/**
 * 
 * @author Wentasy
 * @FullName:TestInner.java
 * @Description: 本程序演示了成员内部类的创建
 * @Author: Wentasy
 * @Create Date: 2012-8-14
 */
class MyOuterClass{
	String outValue;
	class MyInnerClass{
		String inValue;
		public void testInner(){
		  System.out.println("this is testInner() ");
		}
	}
}

b) 如何获得成员内部类的对象

package chp10.ex09;

/**
 * 
 * @author Wentasy
 * @FullName:TestInner.java
 * @Description: 本程序演示了局部内部类的创建和在外部类访问
 * @Author: Wentasy
 * @Create Date: 2012-8-14
 */
class MyOuterClass{
	String outValue;
	class MyInnerClass{
		String inValue;
		public void testInner(){
		  System.out.println("this is testInner() ");	
		}
	}
	public void testOuter(){
		MyInnerClass in = new MyInnerClass();
		in.testInner();
	}
}

public class TestInner{
	public static void main(String args[]){
		MyOuterClass out = new MyOuterClass();
		out.testOuter();
	}
}

c) 成员内部类的特点: 可以获得外部类的私有属性

package chp10.ex11;

/**
 * 
 * @author Wentasy
 * @FullName:TestInner.java
 * @Description: 本程序演示了在其他类中访问内部类
 * @Author: Wentasy
 * @Create Date: 2012-8-14
 */
class MyOuterClass{
	private String outValue;
	class MyInnerClass{
		String inValue;
		//可以获得外部类的私有属性
		public void testInner(){
		  System.out.println("this is testInner() "+outValue);	
		}
	}
	public void testOuter(){
		MyInnerClass in = new MyInnerClass();
		in.testInner();
	}
}

public class TestInner{
	public static void main(String args[]){
		
		//首先创建外部类对象
		MyOuterClass out = new MyOuterClass();
		//然后通过外部类创建内部类
		MyOuterClass.MyInnerClass in = out.new MyInnerClass();
		in.testInner();
		
	}
}


d) 成员内部类的封装:内部类加上private

package chp10.ex12;

/**
 * 
 * @author Wentasy
 * @FullName:TestInner.java
 * @Description: 本程序演示了局部内部类的封装 加上private
 * @Author: Wentasy
 * @Create Date: 2012-8-14
 */
class MyOuterClass{
	private String outValue;
	private class MyInnerClass{
		String inValue;
		public void testInner(){
		  System.out.println("this is testInner() "+outValue);	
		}
	}
	public void testOuter(){
		MyInnerClass in = new MyInnerClass();
		in.testInner();
	}
}

public class TestInner{
	public static void main(String args[]){
		MyOuterClass out = new MyOuterClass();
		//The type MyOuterClass.MyInnerClass is not visible
		//MyOuterClass.MyInnerClass in = out.new MyInnerClass();
		//in.testInner();
	}
}


4. 静态内部类

a) 静态内部类的语法:在声明内部类时加上static

b) 如何创建静态内部类对象

package chp10.ex13;

/**
 * 
 * @FullName:TestInner1.java
 * @Description: 本程序演示了静态内部类的创建和在外部类使用
 * @Author: Wentasy
 * @Create Date: 2012-8-14
 */
class MyOuterClass{
	String outValue;
	static class MyStaticInnerClass{
		String inValue;
		public  void testInner(){
		  System.out.println("this is testInner() ");	
		}
	}
	public void testOuter(){
		MyStaticInnerClass m = new MyStaticInnerClass();
		m.testInner();
	}
}

public class TestInner1{
	public static void main(String args[]){
	   MyOuterClass m = new MyOuterClass();
	   m.testOuter();
	}
}

package chp10.ex13;

/**
 * 
 * @Author: Wentasy
 * @FullName: TestInner2.java
 * @Description: 本程序演示了静态内部类的创建和在其他类中访问
 * @Create Date: 2012-8-14
 */
class MyOuterClass1{
	String outValue;
	static class MyStaticInnerClass{
		String inValue;
		public  void testInner(){
		  System.out.println("this is testInner() ");	
		}
	}
	public void testOuter(){
		MyStaticInnerClass m = new MyStaticInnerClass();
		m.testInner();
	}
}

public class TestInner2{
	public static void main(String args[]){
		
	  //创建静态局部类
	   MyOuterClass1.MyStaticInnerClass in = 
			   new MyOuterClass1.MyStaticInnerClass();
	   in.testInner();
	}
}


5.成员内部类和静态内部类的区别

a) 在其他类创建内部类对象时,创建的语法不同

b)在静态内部类中只能访问外部类的静态成员,可以定义静态方法


c)在成员内部类中能访问所有静态成员、非静态成员,但不可以定义静态方法


package chp10.ex14;

/**
 * 
 * @Author: Wentasy
 * @FullName: TestInner1.java
 * @Description: 成员内部类和静态内部类的区别:在静态内部类中只能访问外部类的静态成员,可以定义静态方法
 * @Create Date: 2012-8-14
 */
class MyOuterClass{                                        
   private int value;
   private static int svalue;
   public void testOuter(){ }
   public static void testStaticOuter(){}
   
   static class MyStaticInnerClass{
	  public void testInner(){
		  //System.out.println(value); //错误
		  System.out.println(svalue);
		  //testOuter(); //错误
	      testStaticOuter();	  
	  }
	  
	  public static void testStaticInner(){}
   }
}

public class TestInner1 {
  public static void main(String args[]){
	  MyOuterClass.MyStaticInnerClass mi = new MyOuterClass.MyStaticInnerClass();
			
  }
}


package chp10.ex14;

/**
 * 
 * @Author: Wentasy
 * @FullName: TestInner.java
 * @Description: 成员内部类和静态内部类的区别:在成员内部类中能访问所有静态成员、非静态成员,但不可以定义静态方法
 * @Create Date: 2012-8-14
 */
class MyOuterClass1{                                        
   private int value;
   private static int svalue;
   public void testOuter(){ }
   public static void testStaticOuter(){ }
   
   class MyStaticInnerClass{
	  public void testInner(){
		  System.out.println(value); 
		  System.out.println(svalue);
		  testOuter(); 
	      testStaticOuter();	  
	  }
	  
	  //public static void testStaticInner(){}
   }
}



6. 局部内部类

a)局部内部类的语法(某些地方类似于局部变量)

i.必须定义在方法内部

ii.作用范围:定义位置开始,到整个方法结束

b)局部内部类在访问局部变量时,局部变量必须声明成final


package chp10.ex16;

/**
 * 
 * @Author: Wentasy
 * @FullName: TestInner.java
 * @Description: 本程序演示了局部内部类的创建和使用
 * @Create Date: 2012-8-14
 */
class MyOuterClass{
	private int value1  = 1 ;
	private static int value2 = 2;
	
	public void testOuter(){
	   class MyInnerClass{
		   public void testInner(){
			   System.out.println("this is testInner()"+value1);
			   System.out.println("this is testInner()"+value2);
			}
	   }
	   MyInnerClass m = new MyInnerClass();
	   m.testInner();
	}
}

public class TestInner {
   public static void main(String args[]){
	   MyOuterClass out = new MyOuterClass();
	   out.testOuter();
   }
}



7. 匿名内部类

a) 匿名内部类是特殊的局部内部类

b) 当满足如下2个条件时,可以选择应用匿名内部类

i.局部内部类可能就需要创建一个对象

ii.局部内部类需要实现外部接口,或者继承某些父类

c) 方法内部使用

package chp10.ex17;

/**
 * 
 * @Author: Wentasy
 * @FullName: TestInner.java
 * @Description: 本程序演示了匿名内部类的创建和使用
 * @Create Date: 2012-8-14
 */
interface MyInterface{
	void m1();
}
class MyOuterClass{
	public void testOuter(){
		new MyInterface(){
        	public void m1(){
        		System.out.println("this is m1 implements ");
        	}
         }.m1();
    }
}
public class TestInner {
   public static void main(String args[]){
	    MyOuterClass out = new MyOuterClass();
	    out.testOuter();
	    
   }
}


d) 提高安全性 封装思想的体现


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics