JAva学習day 27類ローダ反射動的代理JDK 1.5および1.7の新しい機能
14477 ワード
27.01_反射(クラスのロードの概要とロードタイミング)
27.02_反射(クラスローダの概要と分類)
27.03_反射(反射の概要とclassファイルオブジェクトの取得の3つの方法)
27.04_反射(反射によって無パラメトリック構造方法を取得して使用)
27.05_反射(反射によるパラメトリック構造方法の取得と使用)
27.06_反射(反射によるプライベート構造方法の取得と使用)
27.07_反射(反射によるメンバー変数の取得と使用)
27.09_反射(反射によってパラメータ付き戻り値メンバーを取得する方法と使用)
27.10_反射(反射によるプロファイル内容の実行)
27.11_はんしゃ
27.12_[リフレクション](Reflection)(オブジェクトのプロパティを指定した値として汎用的に設定)
27.14_反射(ダイナミックエージェントの概要と実装)
27.15_JDK 5新特性(JDK 1.5の新特性回帰および自己実現列挙クラス)
27.16_JDK 5の新しい特性(enumによる列挙クラス)
27.17_JDK 5の新しい特性(列挙の注意点)
27.18_JDK 5の新しい特性(列挙クラスの一般的な方法)
27.19_JDK 7の新しい特性(JDK 7の6つの新しい特性の回顧と説明)
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: