zoukankan      html  css  js  c++  java
  • Java

    java复习 易错知识点

    类和对象

    1. 类的修饰符只能是public,abstract和final(表示该类没有子类),而不可以用private和protected,当然了,也可以没有修饰符,那么此时该类只能在自己所处的包内访问,在包内与public无异

    2. 类中字段(属性)的修饰符可以是public, private,protected或者缺省。如果是缺省,那么在包内,与public无异,在包外则无论如何不可以访问。如果是protected,则比缺省多了一种情况就是不在同一个包的子类也可以访问protected修饰的属性。而private则只能在该类中访问。

    3. final修饰符修饰的属性称之为常量,即只能赋值一次,一旦被赋值,就不能被改变,由final修饰的变量,除了可以在被声明的时候赋值之外,还可以通过构造器进行赋值,但是这种情况要保证一定会通过构造器被赋值,比如说你如果你自己定义了一个构造器没有对它进行赋值,就会报错。下面的这段代码就是错误的。

      public class City{
        public final String name;
        public City(){}
        public City(String str){
            name = str;
        }
      }

       

    4. 每一个类至少有一个构造器,如果没有自己定义,会自动提供一个缺省构造器,但如果你自己写了带参数的构造器,那么之前默认的缺省构造器就会自动丧失。

    5. static初始化块在类加载时执行,且只执行一次。而普通的非静态初始化块则在每次创建对象时,在执行构造器之前执行一次。

    6. static初始化块只能对静态属性进行初始化或执行其他操作,但绝对不能使用类中的方法或者对实例字段进行操作。而非静态初始化块则没有这个限制,它也可以对静态属性进行操作。

      public class City{
        public static int val;
        public int x;
        static {
            val = 0;
            // x = 0; 错误
            // get();   错误
        }
        {
            val = 0;
            x = 0;
            get();
        }
        public void get(){
            System.out.println("666");
        }
      }

       

    7. static初始化块中不能使用 this.  ,也就是说一旦你在static初始化块中定义了一个局部变量,与类中的某个静态成员同名,那么你在static初始化块中,就没有办法再访问那个静态成员。

    8. 有下面几种情况会触发类的静态初始化,需要引起注意 访问类的静态变量和静态方法     反射如(Class.forName())     初始化一个类发现其父类还没有初始化     虚拟机刚启动定义了main方法的那个类中的静态初始化块              但是需要注意的是,以上的几种情况会触发静态初始化需要一个前提就是:该类还从未被静态初始化过,否则的话就不会再一次触发静态初始化

    9. 静态方法属于定义它的类,而不属于该类的实例。可以通过类名调用,也可以通过实例调用,甚至可以通过子类的类名和实例调用()。

    10. 静态方法只能调用静态成员。如果要访问非静态成员,只能通过在静态方法中定义的实例来访问。静态方法中不允许this和super引用。

    11. 静态方法不能在子类中被改写为非静态的,也不允许在子类中改写为返回值不兼容的方法。静态方法中只可以调用本类的静态方法,不能调用非静态的方法。

    12. 方法重载返回类型可以相同可以不相同,但是形参列表必须不同。

    13. 方法的可变参数,“...”位于变量类型和变量名之间,并且最多只能定义一个可变参数。

    14. 每一个包装类都有一个parseType()的方法,来将字符串转换为对应的基本类型。   type c = WrapperClass.parseType("...");

    15. Integer a,b    一般地来说 a == b比较的是是否为同一个引用,但是由于Integer默认在-128到127有缓存,所以在这个区间内使用 == 比较的是值。但如果a, b已经被赋值为对某个对象的引用,即使值在-128到127之间,比较的还是为是否为同一引用。

      public class Main {
         public static void main(String[] args){
             Integer a = 15;
             Integer b = 15;
             System.out.println(a == b);     //True

             a = new Integer(100);
             b = new Integer(100);
             System.out.println(a == b);     //False

             a = Integer.valueOf(100);
             b = Integer.valueOf(100);
             System.out.println(a == b);     //True

             a = 200;
             b = 200;
             System.out.println(a == b);     //False
        }

      }

     

     

    类的扩展和继承

     

     

     

  • 相关阅读:
    Centos 环境变量
    Centos 多线程下载工具-axel
    【Sprint3冲刺之前】项目可行性研究报告
    【Sprint3冲刺之前】TDzhushou软件项目测试计划书
    【Sprint3冲刺之前】日历表的事件处理和管理(刘铸辉)
    【Sprint3冲刺之前】项目完成时间表
    【Sprint3冲刺之前】敏捷团队绩效考核(刘铸辉)
    【每日Scrum】第八天(4.29) TD学生助手Sprint2
    【每日Scrum】第七天(4.28)Sprint2总结性会议
    需求分析
  • 原文地址:https://www.cnblogs.com/dongdong222/p/12021532.html
Copyright © 2011-2022 走看看