⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 java8.txt

📁 达内IT培训Core Java全部笔记 是学习Java编程的好东西
💻 TXT
📖 第 1 页 / 共 2 页
字号:
	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 + -