JAva学習day 27類ローダ反射動的代理JDK 1.5および1.7の新しい機能

14477 ワード

27.01_反射(クラスのロードの概要とロードタイミング)
A:      
	          ,             ,
	        ,  ,                 。
	   
		    class      ,       Class  。
		               Class  。
	  
		   :	          ,         
		   :	             ,         
		  :	               
	   		              

B:      
	      
	        ,         
	         
	                    java.lang.Class  
	         
	    java.exe         

27.02_反射(クラスローダの概要と分類)
A:       
	   .class        ,        Class  。
B:       
	Bootstrap ClassLoader      
	Extension ClassLoader       
	Sysetm ClassLoader       
C:       
	Bootstrap ClassLoader      
		          ,  Java      
		  System,String 。 JDK JRE lib   rt.jar   
	Extension ClassLoader       
		  JRE      jar    。
		 JDK JRE lib   ext  
	Sysetm ClassLoader       
		   JVM       java   class  ,  classpath        jar     

27.03_反射(反射の概要とclassファイルオブジェクトの取得の3つの方法)
A:    
	JAVA           ,       ,                ;
	        ,                ;
	                          java       。
	       ,                 。
	        Class     ,                  Class     
B:  class         
	a:Object  getClass()  
	b:    class
	c:Class      forName()
C:    :	  class         
		  :                           .
		-            ,               ,      ,      
		

public class MyTest {
    public static void main(String[] args) {
        //  :             (Class)     ,      
        //           ,               
        //               。
        //  1.   Object   getClass  
        Student student = new Student(); //Student.class
        //Class             Java           
        Class clazz = student.getClass();

        //  2.     ,     class  ,                      
        Class studentClass = Student.class;

        System.out.println(clazz==studentClass);

        Class extends Student> aClass = student.getClass();
        System.out.println(studentClass==aClass);

    }
}

import java.sql.SQLOutput;

public class MyTest2 {
    public static void main(String[] args) throws ClassNotFoundException {
        //                3
        //   :            :      
        Class> aClass = Class.forName("org.westos.demo.Student");

        //Ctrl+alt+     
        Class> aClass2 = Class.forName("org.westos.demo.Student");

        System.out.println(aClass==aClass2);
    }
}
- 
-     
-     		Field
-     		Constructor
-     		Method
- 
-                  :
- 
- a:      Object   getClass  
- b:       (class  )
- c:   Class         :
- public static Class forName(String className): 
- className:                (        )

27.04_反射(反射によって無パラメトリック構造方法を取得して使用)
A:        
	public Constructor>[] getConstructors()                
	public Constructor>[] getDeclaredConstructors()                
B:        
	public Constructor getConstructor(Class>... parameterTypes)                 
	public Constructor getDeclaredConstructor(Class>... parameterTypes)               
C:    :	               

public class Student1 {
    public Student1() {
        System.out.println("        ");
    }

    public Student1(String name) {
        System.out.println("          ");
    }

    public Student1(String name,int age) {
        System.out.println("           "+name+"=="+age);
    }

    private Student1(String name,char ch) {
        System.out.println("       ");
    }

}



import java.lang.reflect.Constructor;

public class test3 {
    public static void main(String[] args) throws ClassNotFoundException {
        Class aclass=Class.forName("MyDemo27.Student1");
        Constructor []constructor=aclass.getDeclaredConstructors();
        for(Constructor constructor1:constructor)
        {
            System.out.println(constructor1);
        }
    }

27.05_反射(反射によるパラメトリック構造方法の取得と使用)
A:    :	               

import java.lang.reflect.Constructor;

public class test3 {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException {
        Class aclass=Class.forName("MyDemo27.Student1");
        Constructor []constructor=aclass.getDeclaredConstructors();
        for(Constructor constructor1:constructor)
        {
            System.out.println(constructor1);
        }
        System.out.println("------------------");
        Constructor constructor1=aclass.getConstructor(String.class);
        System.out.println(constructor1);

    }
}

27.06_反射(反射によるプライベート構造方法の取得と使用)
A:    :	               
	//          
	Class clazz = Class.forName("com.click369.Student") ;
	Constructor con = clazz.getDeclaredConstructor(String.class , int.class) ;
	//    true                  Java       。
	con.setAccessible(true) ;                          
	Object obj = con.newInstance("  " , 23) ;
	System.out.println(obj);

public class test4 {
    public static void main(String[] args) throws NoSuchMethodException, ClassNotFoundException, IllegalAccessException, InvocationTargetException, InstantiationException {
        Class aclass=Class.forName("MyDemo27.Student");
        Constructor constructor=aclass.getDeclaredConstructor();
        constructor.setAccessible(true);
        Student o=(Student)constructor.newInstance();
        System.out.println(o);
    }
}

27.07_反射(反射によるメンバー変数の取得と使用)
A:        
	public Field[] getFields()                    
	public Field[] getDeclaredFields()                                
B:        
	public Field getField(String name)
	public Field getDeclaredField(String name)
C:    :	             
import java.lang.reflect.Field;

public class test5 {
    public static void main(String[] args) throws NoSuchFieldException {
        Class aclass=Student2.class;
        Field []fields=aclass.getFields();
        for(Field field1:fields)
        {
            System.out.println(field1);
        }
        Field name=aclass.getField("name");
        System.out.println(name);
    }
}


import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;

public class Test1 {
    public static void main(String[] args) throws NoSuchMethodException, ClassNotFoundException, IllegalAccessException, InvocationTargetException, InstantiationException, NoSuchFieldException {


        Class aclass = Class.forName("MyDemo28.Student");
        Constructor constructor = aclass.getConstructor();
         Student o=(Student)constructor.newInstance();
         Field name=aclass.getField("name");
         name.set(o,"  ");
         Object s=name.get(o);
        System.out.println(s);

    }
}


27.09_反射(反射によってパラメータ付き戻り値メンバーを取得する方法と使用)
A:    :	                   
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class test6 {
    public static void main(String[] args) throws NoSuchMethodException, ClassNotFoundException, IllegalAccessException, InvocationTargetException, InstantiationException {
        Class access=Class.forName("MyDemo27.Student3");
        Constructor constructor=access.getDeclaredConstructor();
        constructor.setAccessible(true);
        Student3 o=(Student3)constructor.newInstance();
        Method show=access.getMethod("show");
        //               
        show.invoke(o);
        Method test=access.getMethod("test",String.class,int.class);
        test.invoke(o,"zhangsan",23);
        Method hehe=access.getMethod("hehe",double.class);
        Object s=hehe.invoke(o,3.14);
        System.out.println(s);

    }
}


27.10_反射(反射によるプロファイル内容の実行)
A:    :	            

public class Cat {
    public void eat(){
        System.out.println("   ");
    }
    public void sleep(){
        System.out.println("     ");
    }
}

public class Dog {
    public void eat(){
        System.out.println("    ");
    }
    public void sleep(){
        System.out.println("   ");
    }

}


import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Properties;

public class MtTest {
    public static void main(String[] args) throws IOException, ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
        Properties properties=new Properties();
        properties.load(new FileReader("D:\\peizhi.properties"));
        Class classname=Class.forName(properties.getProperty("classname"));
        Object o=classname.getConstructor().newInstance();
        Method eat=classname.getMethod(properties.getProperty("methodname"));
        eat.invoke(o);
    }
}

27.11_はんしゃ
A:    :	   ArrayList     ,                 ,     ?

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;

public class MyTest {
    public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
        ArrayListlist=new ArrayList<>();
        list.add(100);
        Class aclass=list.getClass();
        Method add=aclass.getDeclaredMethod("add",Object.class);
        add.invoke(list,"abc");
        System.out.println(list);

    }
}

27.12_[リフレクション](Reflection)(オブジェクトのプロパティを指定した値として汎用的に設定)
A:    
	public void setProperty(Object obj, String propertyName, Object value){},
	     obj     propertyName        value。

27.14_反射(ダイナミックエージェントの概要と実装)
A:      
	  :          ,       ,          。
	  :          
	    :               
	                           ,  ,                   
	
	 Java java.lang.reflect       Proxy    InvocationHandler  ,
	                     。JDK              。
	         cglib,Proxy              
		public static Object newProxyInstance(ClassLoader loader,Class>[] interfaces,InvocationHandler h)
	     InvocationHandler   
		InvocationHandler Object invoke(Object proxy,Method method,Object[] args)
B:    :	       
      Proxy               :
- 
- public static Object newProxyInstance(ClassLoader loader,  Class>[] interfaces,  InvocationHandler h)
loader: 			    
interfaces:			       Class  
InvocationHandler:	                       

  :JDK          ,         .
    :
         *    :        ,     
         *    :              
         *    :
         *               
         *               
         *           :
         *          :Proxy
         *         :JDK  
         *          :
         *        Proxy   newProxyInstance  
         *           :
         *                  ,         
         *  newProxyInstance     :
         *      ClassLoader:    
         *                        。               。    。
         *      Class[]:     
         *                              。    。
         *      InvocationHandler:         
         *                    。                ,            ,      。
         *                       。
new InvocationHandler() {
                    /**
                     *   :                     
                     *        
                     * @param proxy          
                     * @param method         
                     * @param args               
                     * @return                       
                     */
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                    }
                }

27.15_JDK 5新特性(JDK 1.5の新特性回帰および自己実現列挙クラス)
A: JDK1.5    :       ,    ,   for  ,      ,   
B:    :	                ,        .                     .
			  :    7 ,    12   。
C:    :	       

27.16_JDK 5の新しい特性(enumによる列挙クラス)
A:    :	  enum     

27.17_JDK 5の新しい特性(列挙の注意点)
A:    
	          enum
	       Enum   
	              ,                 ,             ,         。      
	         ,    private ,      private 。          :  (“”);
	           ,            
	   switch      

27.18_JDK 5の新しい特性(列挙クラスの一般的な方法)
A:        
	int ordinal()          
	int compareTo(E o)                         
	String name()         
	String toString()        
	 T valueOf(Class type,String name)               1:              2       
	values()          
	      JDK       ,            ,                
B:    :	        

public static void main(String[] args) {
	
	//   
	Direction front = Direction.FRONT ;
	Direction behind = Direction.BEHIND;
	Direction left = Direction.LEFT ;
	Direction right = Direction.RIGHT ;
	
	System.out.println(front.ordinal());
	System.out.println(behind.ordinal());
	System.out.println(left.ordinal());
	System.out.println(right.ordinal());
	
	System.out.println("----------------------------------");

	System.out.println(front.compareTo(right));
	
	System.out.println("----------------------------------");
	
	System.out.println(front.name());
	
	System.out.println("----------------------------------");
	
	System.out.println(front.toString());
	System.out.println(front);
	
	System.out.println("----------------------------------");
	
	//  T valueOf(Class type,String name):	          
	// type:                  
	// name:         
	Direction direction = Direction.valueOf(Direction.class, "RIGHT") ;
	System.out.println(direction);
	
	System.out.println("----------------------------------");
	
	Direction[] directions = Direction.values() ;
	
	for(Direction d : directions){
		System.out.println(d);
	}

}

27.19_JDK 7の新しい特性(JDK 7の6つの新しい特性の回顧と説明)
A:      
	JDK7  ,             (byte,short,int long)。
	            ,           。      ,            0b  0B
	int x = 0b110110
B:            
	           ,               。JDK7   _     。
	  :
		int x = 100_1000;
	    :
		              
		            
		          
C:switch         
D: