A:類的加載概述java
鏈接設計模式
B:加載時機ide
A:類加載器的概述函數
B:類加載器的分類ui
C:類加載器的做用idea
Bootstrap ClassLoader 根類加載器spa
Extension ClassLoader 擴展類加載器設計
System ClassLoader 系統類加載器code
A:反射概述對象
B:三種方式
C:案例演示
import net.allidea.bean.Person; public class Demo1_Reflect { public static void main(String[] args) throws ClassNotFoundException { Class clazz1 = Class.forName("net.allidea.bean.Person"); Class clazz2 = Person.class; Person p = new Person(); Class clazz3 = p.getClass(); System.out.println(clazz1 == clazz2); System.out.println(clazz2 == clazz3); } } //Person類 public class Person { private String name; private int age; ...corh
import java.io.BufferedReader; import java.io.FileReader; public class Demo2_Reflect { public static void main(String[] args) throws Exception { //沒有用反射,只在說多態 /*Juicer j = new Juicer(); //購買榨汁機 j.run(new Apple()); //向榨汁機中放入蘋果 //j.run(new Orange()); //Apple a = new Orange();類型不匹配 //在榨汁機中添加run方法能夠接受橘子 j.run(new Orange()); //Fruit f = new Orange();*/ //用反射和配置 //建立輸入流,關聯配置文件 BufferedReader br = new BufferedReader(new FileReader("config.properties")); Class clazz = Class.forName(br.readLine());//讀取配置文件一行內容,獲取該類的字節碼對象 Fruit f = (Fruit) clazz.newInstance(); //父類引用指向子類對象,水果的引用指向蘋果對象 Juicer j = new Juicer(); j.run(f); } } interface Fruit { public void squeeze(); } class Apple implements Fruit { public void squeeze() { System.out.println("榨出一杯蘋果汁兒"); } } class Orange implements Fruit { public void squeeze() { System.out.println("榨出一杯橘子汁兒"); } } class Juicer { /*public void run(Apple a) { a.squeeze(); } public void run(Orange o) { o.squeeze(); }*/ //改進後代碼以下 public void run(Fruit f ) { f.squeeze(); } } //config.properties文件 net.allidea.reflect.Apple
Constructor
Field
Method
A:案例演示
public static void main(String[] args) throws Exception { ArrayList<Integer> list = new ArrayList<>(); list.add(111); list.add(222); // list.add("abc"); Class clazz = Class.forName("java.util.ArrayList");//獲取字節碼對象 Method m = clazz.getMethod("add", Object.class); //獲取add方法 m.invoke(list, "abc"); System.out.println(list); }
A:案例演示
package com.zuikc.test; public class DemoClass { public void run() { System.out.println("welcome to myClass!"); } }
* (1) 寫一個Properties格式的配置文件,配置類的完整名稱。 * (2) 寫一個程序,讀取這個Properties配置文件,得到類的完整名稱並加載這個類,用反射的方式運行run方法。
1,裝飾
2,單例
3,簡單工廠
4,工廠方法
5,適配器
6,模版
A:枚舉概述
B:回想單例設計模式:單例類是一個類只有一個實例
C:案例演示
1,自動拆裝箱
2,泛型
3,可變參數
4,靜態導入
5,加強for循環
6,互斥鎖
7,switch語句中能夠接 枚舉
A:案例演示
A:案例演示
A:枚舉類的常見方法
B:案例演示
class Test { public void run() { final int x = 10; class Inner { public void method() { System.out.println(x); } } Inner i = new Inner(); i.method(); } }
1.7版本:局部內部類在訪問他所在方法中的局部變量必須用final修飾,爲何?
interface Inter { public default void print() { System.out.println("hello world"); } public static void method() { System.out.println("static method"); } } class Demo implements Inter { public void run() { /*final*/ int num = 10; class Inner { public void fun() { //num = 20; System.out.println(num); } } Inner i = new Inner(); i.fun(); } }