反射

一 、单例
1. 概念:单例是常见的设计模式,在Java中,单例对象必须保证JVM中只有一个该类的
          实例对象存在。
2. 单例的代码实现:
//饿汉式:
    优点:并发效率高
缺点:空间利用率低
class Single1{
private static final Single1 s=new Single1();
private Single1(){}

public static Single1 getInstance(){
return s;
}
}

//懒汉式:
优点:空间利用率高
缺点:并发效率低
class Single2{
private static Single2 s;
private Single2(){}
public synchronized static Single2 getInstance(){
if(s==null){
s=new Single2();
}
return s;
}
}
二、反射
1. 概念:【理解】
① 类的对象:基于定义好的一个类,创建该类的实例对象。
              new出来的对象都是类的对象
② 类对象:类加载的产物,封装了该类的所有的信息

           (类名、包名、父类、接口、方法、属性等)。

    2. 获取类对象的方式:【重点】
① 通过 类的对象 获取 类对象
Student s=new Student();
Class c1=s.getClass();
使用类名获取类对象:
Class c2=Student.class;
③ 使用Class中静态方法 forName获取类对象
Class c3=Class.forName("包名.类名");

注意:类名必须是全类名:包名.类名

3. 反射的特点:
① 缺点:可读性差

② 优点:可以使代码更加灵活通用。一般应用在底层开发,例如框架等。

eg:

package demo20171121;
import java.io.File;
import java.lang.reflect.Field;


/*
 * 类对象:类加载的产物,封装了该类的所有信息(packageName包名,ClassName类名,superName父类名,fields属性,methods方法,interface接口,construcutor构造方法)
 * 类加载:java虚拟机第一次加载的类,读取类的信息,存到java虚拟机中,只进行一次,通过classPath找到.class字节码文件
 * 
 */
public class classDuixiang {
//获取类对象第一种方法,通过创建类的对象,调用getClass()获取类对象
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
Student student = new Student();
Class class1 = student.getClass();
System.out.println(class1);
//获取类对象第二种方法,通过类名.class获取类对象
Class c=Student.class;
System.out.println(c);
//获取类对象第三种方法,通过Class.forName()
Class forName = Class.forName("demo20171121.Student");          //全类明
System.out.println(forName);
Field[] declaredFields = forName.getDeclaredFields();
for(Field ff:declaredFields){
System.out.println("所有属性,私有属性,不包过父类:"+ff.getName());
}
//获取包名
Package package1 = forName.getPackage();
System.out.println(package1.getName());
//获取类名
String name = forName.getName();
System.out.println(name);
//利用反射创建对象
Object newInstance = forName.newInstance();
Student stu=(Student)newInstance;
//获取类名
System.out.println(stu.getClass()+"66666666666666666666666666");
//获取文件的绝对路径;
File file = new File("D:\\Baizhieclipse\\workspace\\Test\\src\\demo2017113");
File absoluteFile = file.getAbsoluteFile();
System.out.println(absoluteFile);
//对文件本身的一种操作,获取文件夹或者文件的名字
String name2 = file.getName();
System.out.println(name2);
//获取文件中所有文件夹中所有的文件名
//把一个文件夹中所有文件存到数组中
File[] listFiles = file.listFiles();
for(File f:listFiles){
//判断文件是否是一种标准的文件格式
if(f.isFile()){
System.out.println(f.getName());
}
}
}
}
class Student{
private String name;
public Student(){}
public Student(String name){
this.name=name;
}
}

未完--------------------------------------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值