Day13-注解

注解

内置注解

  • @Override

重写的注解

  • @Deprecated

    标记已经废弃的方法的注解(意思是这个方法已经不太适用,建议更换更好的方法)

  • @SuppressWarning("all")

    镇压全部警告(需要参数)

元注解

元注解的作用就是给注解其他的注解

  •  @Target(value = {ElementType.METHOD, ElementType.TYPE})
     //表示我们的注解可以用在哪些地方,有参数
  •  @Retention(value = RetentionPolicy.RUNTIME)
     //表示注解在什么地方还有效
  •  @Documented
     //表示是否将我们的注解生成在JAVAdoc中
  •  @Inherited
     //子类可以继承父类的注解

自定义注解

使用@interface自定义注解,自动继承java.lang.annotation.Annotation接口

 @Target({ElementType.TYPE,ElementType.METHOD})
 @Retention(RetentionPolicy.RUNTIME)  
 //自定义注解
 @interface MyAnnotation{
 
     //注解的参数 :参数类型 + 参数明 ();
     String name();
     int age() default 0; //默认值为0
 }

反射


 public class Test {
 ​
     public static void main(String[] args) throws Exception{
         //通过反射获取Student类的class对象
         Class c1 = Class.forName("zhujie.fanshe.Student");
         System.out.println(c1);
         
     }
 }
 ​
 class Student {
 ​
     private String name;
     private int age;
 ​
     public Student() {
     }
 ​
     public Student(String name, int age) {
         this.name = name;
         this.age = age;
     }
 ​
     public String getName() {
         return name;
     }
 ​
     public void setName(String name) {
         this.name = name;
     }
 ​
     public int getAge() {
         return age;
     }
 ​
     public void setAge(int age) {
         this.age = age;
     }
 }

  



 package zhujie.fanshe;
 ​
 public class Test {
 ​
     public static void main(String[] args) throws Exception{
 ​
         //通过对象获得
         Student s1 = new Student();
         System.out.println(s1);//zhujie.fanshe.Student@1540e19d
 ​
         //通过反射获取Student类的class对象
         Class c1 = Class.forName("zhujie.fanshe.Student");
         System.out.println(c1);
         //通过.class获得Student类的class对象
         Class c2 = Student.class; //class zhujie.fanshe.Student
 ​
         //每个内置类型的包装类都有一个type的属性
         Class<Integer> t1 = Integer.TYPE;
         System.out.println(t1); //int
 ​
         //获得父类类型
         Class s2 = c1.getSuperclass();
         System.out.println(s2);//class zhujie.fanshe.Person
 ​
     }
 }
 ​
 ​
 class Person{
     private String name;
 ​
     public Person() {
     }
 ​
     public Person(String name) {
         this.name = name;
     }
 ​
     public String getName() {
         return name;
     }
 ​
     public void setName(String name) {
         this.name = name;
     }
 }
 class Student extends Person{
 ​
     private String name;
     private int age;
 ​
     public Student() {
         this.name = "学生";
     }
 ​
     public Student(String name, int age) {
         this.name = name;
         this.age = age;
     }
 ​
     public String getName() {
         return name;
     }
 ​
     public void setName(String name) {
         this.name = name;
     }
 ​
     public int getAge() {
         return age;
     }
 ​
     public void setAge(int age) {
         this.age = age;
     }
 }

  

类的初始化

类加载器的作用

 


 

 public class Loader {
     public static void main(String[] args) throws ClassNotFoundException{
 ​
         //获取系统类的加载器
         ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
         System.out.println(systemClassLoader);//sun.misc.Launcher$AppClassLoader@18b4aac2
 ​
         //获取系统类加载器的父类--->扩展类加载器
         ClassLoader parent = systemClassLoader.getParent();
         System.out.println(parent);//sun.misc.Launcher$ExtClassLoader@1540e19d
 ​
 ​
         //获取扩展类加载器的父类--->根加载器(C/C++)
         ClassLoader parent1 = parent.getParent();
         System.out.println(parent1);//null
 ​
         //测试当前类是那个加载器加载的
         ClassLoader aClass = Class.forName("day13.Loader").getClassLoader();
         System.out.println(aClass);//sun.misc.Launcher$AppClassLoader@18b4aac2
     }
 }
 ​
 

  

posted @ 2021-07-14 21:02  浅mo年华  阅读(44)  评论(0)    收藏  举报