📄 java8.txt
字号:
public Person(){} public Person(int i){//有参构造设为public System.out.println("called"); } private int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; }}-------------------------------------------------------------------------------------package com.tarena.day08.reflect;import java.lang.reflect.Constructor;public class UseConstructor { public static void main(String[] args) throws Exception { Class c1 = Class.forName("com.tarena.day08.reflect.Person"); Constructor con = c1.getConstructor(int.class); //也可以用Integer.TYPE Object obj = con.newInstance(3);//等同于new Person(3) //这样就可以调用obj的属性和方法 }}输出结果:called-------------------------------------------------------------------------------------调用类的方法:-------------------------------------------------------------------------------------package com.tarena.day08.reflect;import java.lang.reflect.Method;public class UseMethod { public static void main(String[] args) throws Exception{ Class c1 = Person.class; Method m = c1.getMethod("setName", String.class); Object obj = c1.newInstance(); m.invoke(obj, "zhang"); if (obj instanceof Person) { Person p = (Person)obj; System.out.println(p.getName()); } }}输出结果:zhang-------------------------------------------------------------------------------------反射: 1.取得类对象(类名.class;Class.forName();int.class;Integer.TYPE) 2.用getXXX()方法取得类的某个构造/属性/方法 3.调Constructor .newInstance(Object...)生成对象 4.调Method invoke(String, Object...)执行方法******用反射完成任意类(要有"无参构造")的属性填充:*******-------------------------------------------------------------------------------------package com.tarena.day08.reflect;public class Desk { private int length; private int width; private int high; public int getHigh() { return high; } public void setHigh(int high) { this.high = high; } public int getLength() { return length; } public void setLength(int length) { this.length = length; } public int getWidth() { return width; } public void setWidth(int width) { this.width = width; }}-------------------------------------------------------------------------------------package com.tarena.day08.reflect;import java.util.HashMap;import java.util.Map;import java.util.Set;import java.lang.reflect.Field;import java.lang.reflect.Method;public class TestAuto {// 参数(String 类名 , Map(key,value)) //类名--->对象--->set方法--->返回对象 public static Object getInstance(String classname,Map<String,Object> m) throws Exception{ Class c1 = Class.forName(classname); //得到类名 Object obj = c1.newInstance(); //得到一个普通的无参构造 Set<String> set = m.keySet(); for (String key : set) { String name = "set"+key.substring(0,1).toUpperCase()+key.substring(1);//由属性名得到方法名 Field f = c1.getDeclaredField(key); //得到属性 Method method = c1.getMethod(name,f.getType()); //得到类型 method.invoke(obj, m.get(key)); //动态执行方法 } return null; } public static void main(String[] args) throws Exception{ Map<String,Object> m = new HashMap<String, Object>(); m.put("key", 3); m.put("name", "zhang"); Object obj = getInstance("com.tarena.day08.reflect.Person", m); Person p = (Person)obj; System.out.println(p.getId()+p.getName()); }}-------------------------------------------------------------------------------------反射是Java实现动态编码的唯一手段内部类: 定义在一个类内部的类叫内部类,无论在方法或是类里,只要类体括号有嵌套,里面的类就是内部类class Outer{类体 //外部封装类 class Inner{} //内部类 }内部类的最大优势就是可以使用外部类的私有属性,而且不会破坏封装内部类分类: 1.static 内部类 2.成员内部类(没有Static) 3.局部内部类 4.匿名内部类静态内部类:-------------------------------------------------------------------------------------package com.tarena.day08.reflect;public class StaticInner { private int i1; private static int i2; public static class Inner1{ public void test(){ //System.out.println(i1); //非静态属性不能在静态内部类中使用 System.out.println(i2); } } public static void main(String[] args) { Inner1 i1 = new Inner1(); //本类不用类名.来调用静态 i1.test(); }}-------------------------------------------------------------------------------------package com.tarena.day08.reflect;public class TestStatic { public static void main(String[] args) { StaticInner.Inner1 i1 = new StaticInner.Inner1(); i1.test(); }}-------------------------------------------------------------------------------------成员内部类:-------------------------------------------------------------------------------------package com.tarena.day08.reflect;public class MemberInner { private int i1; private static int i2; public class Inner2{ public void test(){ System.out.println(i1); System.out.println(i2); } } public static void main(String[] args) { Inner2 i2 = new MemberInner().new Inner2(); //成员内部类和成员函数调用一样,new外部类() . new内部类() i2.test(); }}-------------------------------------------------------------------------------------package com.tarena.day08.reflect;public class TestMember { public static void main(String[] args) { MemberInner.Inner2 i2 = new MemberInner().new Inner2(); i2.test(); }}-------------------------------------------------------------------------------------1.每个内部类都有一个单独的.class 文件2.static内部能使用static 属性3.成员内部类可以使用所有属性4.局部内部类可以使用所有属性以及final 的局部变量5.匿名内部类是一种特殊的局部内部类局部内部类:-------------------------------------------------------------------------------------package com.tarena.day08.reflect;//不能直接定义在类体{}中public class LocalInner { private int i1; private static int i2; public void test1(){ int i3 = 9; final int i4 = 9; /*public*/ class Inner3{ //局部内部类不能用public修饰 public void test(){ System.out.println(i1); System.out.println(i2); //System.out.println(i3); //局部内部类要使用局部变量必须是final的才可以 System.out.println(i4); } } }}-------------------------------------------------------------------------------------匿名内部类:无 1.无构造 2.无class 关键字 3.无类名 4.有继承,无extends 关键字有 1.父类或父接口的名字 2.有类体-------------------------------------------------------------------------------------package com.tarena.day08.reflect;import java.util.TreeSet;import java.util.Comparator;public class AnoInner { public static void main(String[] args) { TreeSet ts = new TreeSet( //匿名内部类 new Comparator(){ //用父接口名来代替匿名内部类名 public int compare(Object o1,Object o2){ return 0; } } ); }}-------------------------------------------------------------------------------------修饰类:public/不写/final(不能被继承)/abstract修饰属性:public/不写/private/protected/final/static修饰方法:public/不写/private/protected/static/final/abstract(全能)修饰构造:public/不写/private/protected内部类:public/不写/private/protected/static/final/abstract(全能)概念:类/对象/属性/方法/构造 封装:私有化属性,提供public 方法 继承:子类 is a 父类,子类可以得到父类所有的属性和方法,私有的方法是继承不过来的,构造也不能继承,类和类直接单继承,接口/类和接口之间多继承 多态/方法重载/重写 this/super 执行的时候先父后子 static 代表类相关 final 不可修改 abstract 抽象库类: String/StringBuffer/Object/Integer/集合/反射/内部类
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -