当前位置: 首页 > news >正文

知名网站建设公司电话百度竞价排名危机事件

知名网站建设公司电话,百度竞价排名危机事件,武汉知名网站开发公司,阿里云 企业网站ClassClass常用方法获取Class对象六种方式哪些类型有Class对象动态和静态加载类加载流程加载阶段连接阶段连接阶段-验证连接阶段-准备连接阶段-解析初始化阶段获取类结构信息Class常用方法 第一步:创建一个实体类 public class Car {public String brand "宝…

Class

  • Class常用方法
  • 获取Class对象六种方式
  • 哪些类型有Class对象
  • 动态和静态加载
  • 类加载流程
    • 加载阶段
    • 连接阶段
      • 连接阶段-验证
      • 连接阶段-准备
      • 连接阶段-解析
    • 初始化阶段
  • 获取类结构信息


Class常用方法

第一步:创建一个实体类

public class Car {public String brand = "宝马";public int price = 500000;public String color = "白色";@Overridepublic String toString() {return "Car{" +"brand='" + brand + '\'' +", price=" + price +", color='" + color + '\'' +'}';}
}

第二步:常用方法的演示

public class Class02 {public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchFieldException {String classAllPath = "Reflection.Car";//获取到Car类 对应的 Class对象//<?> 表示不确定的Java类型Class<?> cls = Class.forName(classAllPath);//输出clsSystem.out.println(cls); //显示cls对象,是哪个类的Class对象 class Reflection.CarSystem.out.println(cls.getClass());//输出cls运行类型 class java.lang.Class//得到包名System.out.println(cls.getPackage().getName());//包名//得到全类名System.out.println(cls.getName());//通过cls创建对象实例Car car = (Car)cls.newInstance();System.out.println(car);//通过反射获取属性 brandField brand = cls.getField("brand");System.out.println(brand.get(car));//宝马//通过反射给属性赋值brand.set(car,"奔驰");System.out.println(brand.get(car));//奔驰//得到所有的属性(字段)Field[] fields = cls.getFields();for(Field f:fields){System.out.println(f.getName());//名称}}
}

运行结果:
在这里插入图片描述


获取Class对象六种方式

第一种:在已知一个类的全类名,且该类在类的路径下,可通过Class类的静态方法Class.forName()获取(多用于配置文件,读取全类路径,加载类)

public class GetClass_ {public static void main(String[] args) throws ClassNotFoundException {//1.Class.forNameString classAllPath = "Reflection.Car";//通过读取配置文件获取Class<?> cls1 = Class.forName(classAllPath);}
}

第二种:若已知具体的类,通过类的class获取,该方式最为安全可靠,程序性能最高

public class GetClass_ {public static void main(String[] args) throws ClassNotFoundException {//2.类名.class,应用场景:用于参数传递Class cls2 = Car.class;}
}

第三种:若已知某个类的实例,调用该实例的getClass()方法获取Class对象

public class GetClass_ {public static void main(String[] args) throws ClassNotFoundException {//3.对象.getClass(),应用场景:有对象实例Car car = new Car();Class cls3 = car.getClass();}
}

第四种:通过类加载器来获取到类的Class对象

public class GetClass_ {public static void main(String[] args) throws ClassNotFoundException {//4.通过类加载器[4种]来获取到类的Class对象String classAllPath = "Reflection.Car";//(1)先得到类加载器 carClassLoader classLoader = car.getClass().getClassLoader();//(2)通过类加载器得到Class对象Class<?> cls4 = classLoader.loadClass(classAllPath);}
}

基本数据类型按如下方式得到Class类对象

public class GetClass_ {public static void main(String[] args) throws ClassNotFoundException {Class<Integer> integerClass = int.class;Class<Character> characterClass = char.class;Class<Boolean> booleanClass = boolean.class;}
}

基本数据类型对应的包装类,可以通过.TYPE得到Class类对象

public class GetClass_ {public static void main(String[] args) throws ClassNotFoundException {Class<Integer> type1 = Integer.TYPE;Class<Character> type2 = Character.TYPE;}
}

哪些类型有Class对象

1.外部类,成员内部类,静态内部类,局部内部类,匿名内部类
2.interface:接口
3.数组
4.enum:枚举
5.annotation:注解
6.基本数据类型
7.void


动态和静态加载

反射机制是java实现动态语言的关键,也就是通过反射实现类动态加载
1.静态加载:编译时加载相关的类,如果没有则报错,依赖性太强
假设我现在在代码里面放了一个没有创建的Dog类

public class ClassLoad_ {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入key");String key = sc.next();switch (key){case "1":Dog dog = new Dog();dog.cry();break;case "2":System.out.println("ok");break;default:System.out.println("do nothing");}}
}

导致在编译的时候就发生了报错,虽然我们在运行的时候不一定会使用到,因为new Dog()是静态加载,因此必须编写Dog
在这里插入图片描述
2.动态加载:运行时加载需要的类,如果运行时不用该类,即使不存在该类,则不报错,降低了依赖性

public class ClassLoad_ {public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {Scanner sc = new Scanner(System.in);System.out.println("请输入key");String key = sc.next();switch (key){case "1":break;case "2":Class cls = Class.forName("Person");//加载Person类Object o = cls.newInstance();Method m = cls.getMethod("hi");m.invoke(o);System.out.println("ok");break;default:System.out.println("do nothing");}}
}

因为反射是动态加载,可以通过编译,只有在运行的时候才会报错,Person类是动态加载,所以,没有编写Person类也不会报错,只有动态加载该类的时候才会报错
在这里插入图片描述

1.当创建对象时(new) //静态加载
2.当子类被加载时,父类也加载 //静态加载
3.调用类中的静态成员时//静态加载
4.通过反射//动态加载


类加载流程

在这里插入图片描述
在这里插入图片描述

加载阶段

JVM在该阶段的主要目的是将字节码从不同的数据源(可能是class文件、也可能是jar包,甚至网络)转化为二进制字节流加载到内存中,并生成一个代表该类的java.long.Class对象

连接阶段

连接阶段-验证

目的是为了确定文件中字节流包含的信息符合当前虚拟机的要求,并且不会危害安全,可以考虑使用-Xverify:none参数来关闭大部分的类验证措施,缩短虚拟机类加载的时间
在这里插入图片描述

连接阶段-准备

JVM会在该阶段对静态变量,分配内存默认初始化(对应数据类型的默认初始值,如0、0L、null、false等)。这些变量所使用的内存都将在方法区中进行分配(常量和静态变量不一样,因为一旦赋值就不变,它直接就是它对应的值)

连接阶段-解析

虚拟机将常量池的符号引用替换为直接引用的过程中,在编译的过程中因为没有实际的内存地址,所以只能用符号的方法来记录,当加载好之后用地址来替换

初始化阶段

到初始化阶段,才真正开始执行类中定义的java程序代码,此阶段是执行()方法过程()方法是由编译器按语句在源文件中出现的顺序,依次自动收集类中的所有静态变量的赋值动作和静态代码块中的语句,并进行合并

示例代码:

public class ClassLoad03 {public static void main(String[] args) {//1.加载B类,并生成B的class对象//2.连接 num = 0;//3.初始化阶段//  依次自动收集类中的所有静态变量的赋值动作和静态代码快的语句/*
* clinit(){
*   System.out.println("B 静态代码快被执行");
*    num = 300;
*
* 合并:num=100}*/new B(); System.out.println(B.num);}
}
class B{static {System.out.println("B 静态代码快被执行");num = 300;}static int num = 100;public B(){System.out.println("B() 构造器被执行 "+num);}
}

运行结果:
在这里插入图片描述
如果直接使用类的静态属性,也会导致类的加载
注:
虚拟机保证一个类的()方法在多线程环境中被正确地加锁、同步,如果多个线程同时去初始化一个类,那么只会有一个线程去执行这个类的()方法,其他线程都需要阻塞等待,直到线程执行()方法完毕


获取类结构信息

在这里插入图片描述

public class ReflectionUtils {public static void main(String[] args) throws ClassNotFoundException {api_01();}//第一组方法APIpublic static void api_01() throws ClassNotFoundException {//得到Class对象Class<?> personCls = Class.forName("Reflection.com.hspedu.classload.Person");//获取全类名System.out.println(personCls.getName());//获取简单类名System.out.println(personCls.getSimpleName());//获取所有public修饰的属性,包含本类及父类Field[] fields = personCls.getFields();for (Field field : fields) {System.out.println("本类及父类属性="+field.getName());}//获取本类中所有属性Field[] declaredFields = personCls.getDeclaredFields();for (Field declaredField : declaredFields) {System.out.println("本类中所有的属性="+declaredField.getName());}//获取所有public修饰的方法,包含本类以及父类Method[] methods = personCls.getMethods();for (Method method : methods) {System.out.println("本类以及父类的方法="+method.getName());}//获取本类所有的方法Method[] declaredMethods = personCls.getDeclaredMethods();for (Method declaredMethod : declaredMethods) {System.out.println("本类所有方法="+declaredMethod.getName());}//获取所有public修饰的构造器,包含本类Constructor<?>[] constructors = personCls.getConstructors();for (Constructor<?> constructor : constructors) {System.out.println("本类以及父类的构造器="+ constructor.getName());}//获取本类所有的构造器Constructor<?>[] declaredConstructors = personCls.getDeclaredConstructors();for (Constructor<?> declaredConstructor : declaredConstructors) {System.out.println("本类所有的构造器"+declaredConstructor.getName());}//以Package形式返回包信息System.out.println(personCls.getPackage());//以Class形式返回父类信息System.out.println("父类的class对象"+personCls.getSuperclass());//以Class[]形式返回接口信息Class<?>[] interfaces = personCls.getInterfaces();for (Class<?> anInterface : interfaces) {System.out.println("接口信息="+anInterface.getName());}//返回注解信息Annotation[] annotations = personCls.getAnnotations();for (Annotation annotation : annotations) {System.out.println("注解信息="+annotation);}}
}
interface IA{}
interface IB{}
class A{public String hobby;public void hi(){}public A(){}
}
@Deprecatedclass Person extends A implements IA,IB{public Person(){}public Person(String s){ }private Person(String name,int age){}//属性public String name;protected int age;String job;private double sal;//方法public void m1(){}protected void m2(){}void m3(){}private void m4(){}}

在这里插入图片描述

public class ReflectionUtils {public static void main(String[] args) throws ClassNotFoundException {api_02();}public static void api_02() throws ClassNotFoundException {//得到Class对象Class<?> personCls = Class.forName("Reflection.com.hspedu.classload.Person");//获取本类所有属性Field[] declaredFields = personCls.getDeclaredFields();for (Field declaredField : declaredFields) {System.out.println("本类中的所有属性="+declaredField.getName()+" 该属性的修饰符值="+declaredField.getModifiers()+" 该属性的类型="+declaredField.getType());}}
}
interface IA{}
interface IB{}
class A{public String hobby;public void hi(){}public A(){}
}
@Deprecatedclass Person extends A implements IA,IB{public Person(){}public Person(String s){ }private Person(String name,int age){}//属性public String name;protected static int age;String job;private double sal;//方法public void m1(){}protected void m2(){}void m3(){}private void m4(){}}

在这里插入图片描述


文章转载自:
http://countertrend.c7497.cn
http://unconfident.c7497.cn
http://paginate.c7497.cn
http://calash.c7497.cn
http://loquacity.c7497.cn
http://cando.c7497.cn
http://plowland.c7497.cn
http://asynchronous.c7497.cn
http://physiographer.c7497.cn
http://jbig.c7497.cn
http://yellowbark.c7497.cn
http://befell.c7497.cn
http://swiftly.c7497.cn
http://caddie.c7497.cn
http://thingamajig.c7497.cn
http://iterant.c7497.cn
http://telectroscope.c7497.cn
http://ujjain.c7497.cn
http://homophony.c7497.cn
http://squabbish.c7497.cn
http://zizz.c7497.cn
http://indifferent.c7497.cn
http://disaffinity.c7497.cn
http://photoperiod.c7497.cn
http://transferase.c7497.cn
http://domeliner.c7497.cn
http://kretek.c7497.cn
http://straightjacket.c7497.cn
http://lillian.c7497.cn
http://bewitchery.c7497.cn
http://briarroot.c7497.cn
http://flatten.c7497.cn
http://strewn.c7497.cn
http://flyboy.c7497.cn
http://nattier.c7497.cn
http://unenvious.c7497.cn
http://snipe.c7497.cn
http://blackmarket.c7497.cn
http://timesaving.c7497.cn
http://instruction.c7497.cn
http://dtv.c7497.cn
http://precopulatory.c7497.cn
http://pearlescent.c7497.cn
http://ethnocentrism.c7497.cn
http://fado.c7497.cn
http://suxamethonium.c7497.cn
http://etiolation.c7497.cn
http://necessitating.c7497.cn
http://declarant.c7497.cn
http://bathurst.c7497.cn
http://dorking.c7497.cn
http://widder.c7497.cn
http://diplomatist.c7497.cn
http://gratitude.c7497.cn
http://planigraph.c7497.cn
http://viewphone.c7497.cn
http://sanctimonious.c7497.cn
http://imprecisely.c7497.cn
http://spongiform.c7497.cn
http://vituperation.c7497.cn
http://androdioecious.c7497.cn
http://crabhole.c7497.cn
http://snowslip.c7497.cn
http://warpwise.c7497.cn
http://condescendence.c7497.cn
http://cyclohexane.c7497.cn
http://bahamas.c7497.cn
http://acknowledgment.c7497.cn
http://motoneuron.c7497.cn
http://iphone.c7497.cn
http://thruway.c7497.cn
http://immaterial.c7497.cn
http://bodkin.c7497.cn
http://homoeopath.c7497.cn
http://presidio.c7497.cn
http://padishah.c7497.cn
http://suzerain.c7497.cn
http://tantalate.c7497.cn
http://unwed.c7497.cn
http://helminthoid.c7497.cn
http://advent.c7497.cn
http://marmalade.c7497.cn
http://cortisone.c7497.cn
http://emargination.c7497.cn
http://sleigh.c7497.cn
http://windsail.c7497.cn
http://chukker.c7497.cn
http://polysulphide.c7497.cn
http://serbian.c7497.cn
http://howdie.c7497.cn
http://flourishing.c7497.cn
http://yancey.c7497.cn
http://yogurt.c7497.cn
http://cran.c7497.cn
http://pinaceous.c7497.cn
http://codeclination.c7497.cn
http://azt.c7497.cn
http://pecky.c7497.cn
http://anthracitic.c7497.cn
http://purgatorial.c7497.cn
http://www.zhongyajixie.com/news/84615.html

相关文章:

  • 中小型企业网络设计seo首页优化
  • 旧金山网站建设百度云登录入口官网
  • 特殊教育学校网站建设方案搜索引擎营销方法有哪些
  • 家居东莞网站建设app推广平台放单平台
  • 利用html做博客网站中国新闻
  • 网站收录量下降创新驱动发展战略
  • 江苏网站开发公司重庆seo外包平台
  • 精湛的合肥网站建设百度快照怎么用
  • 不同风格的网页北京seo排名公司
  • 公共资源交易中心网站建设汇报手机怎么自己制作网页
  • 用ps怎么做网站导航条网络营销的含义
  • 网页设计要学些什么最好的seo外包
  • 网站建设常见错误南京怎样优化关键词排名
  • 自己建设的网站在日本有市场吗百度搜索风云榜官网
  • 查看网站的目录文件夹权限设置手机搜索引擎
  • 小语种网站建设要点b2b自动发布信息软件
  • 中国网站制作公司排名新媒体营销成功案例
  • 购物网站,购物车界面如何做短视频营销推广方案
  • 建站之星模板好吗东莞网站推广哪里找
  • 供应链管理软件十大排名seo搜索引擎官网
  • 汉中微信网站建设公司实体店怎么推广引流
  • 网站栏目策划品牌推广方案模板
  • 个人兼职网站制作站长之家网站排行榜
  • 网站开发与设计实训百度托管公司
  • 阿里云做企业网站百度招聘网最新招聘信息
  • 国外的销售平台网站seo优化服务
  • 如何做网站图片网络营销软文范文
  • 效果图设计师主要做什么seo薪酬如何
  • 行业网站设计开发费用互联网营销方法有哪些
  • 怎么做各类网站第三方营销平台有哪些