人生第一篇博客 -- JAVA SE 总结

   之前的博客都是在网上摘摘抄抄的,没有自己来写一篇博客,而且最近由于毕业设计和要找工作忙得焦头烂额的,没时间整理和学习。所以计划完成毕业设计后,重新来整理一下 电脑的文件和网盘的文件,并把之前学过(已经忘记)的知识在重新复习一遍。明天打算去参加华工的招聘会,由于之前的JAVA SE基础基本都忘了,所以重新来过一遍。

  (1)基本数据类型

  byte , short , char , int , long , float , double , boolean

  (2) this ,super 和 static

    this.成员变量  this.成员方法  this.构造函数

    super.成员变量  super.成员方法  super.构造函数

    类名.静态变量  类名.静态方法

  (3)  成员变量放置在堆内存中

    局部变量保存在其所在方法的栈内存中,随着方法的运行结束而结束

  (4)  switch

    jdk7之前 switch 只能支持 byte、short、char、int 这几个基本数据类型和其对应的封装类型

    jdk1.7后,整形,枚举类,字符串都可以 ,  jdk1.7并没有新的指令来处理switch string,而是通过调用switch中string.hashCode,将string转换为int从而进行判断

  (5) equals与==的区别

     ==是指对内存地址进行比较, equals()是对内容进行比较

  (6) Object的方法

    clone()  toString()  equals()  hashcode()  getClass()  wait()  notify()  notifyAll()

  (7) Java的四种引用

    ①强引用:最普遍的一种引用方式,如String s = "abc",变量s就是字符串“abc”的强引用,只要强引用存在,则垃圾回收器就不会回收这个对象。

    ②软引用:用于描述还有用但非必须的对象,如果内存足够,不回收,如果内存不足,则回收。一般用于实现内存敏感的高速缓存,软引用可以和引用队列ReferenceQueue联合使用,如果软引用的对象被垃圾回收,JVM就会把这个软引用加入到与之关联的引用队列中。

    ③弱引用:弱引用和软引用大致相同,弱引用与软引用的区别在于:只具有弱引用的对象拥有更短暂的生命周期。在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。

    ④虚引用:虚引用必须和引用队列 (ReferenceQueue)联合使用。当垃圾回收器准备回收一个对象时,如果发现它还有虚引,就会在回收对象的内存之前,把这个虚引用加入到与之关联的引用队列中。系统无法通过虚引用来获取被引用的对象

  (8) 重写equals() : 满足 自反性  对称性  传递性  一致性

  (9)final

    ①final 方法 不能被重写,但是可以被重载

    ②final 变量:基本数据类型 -> 数据值不可变  引用类型 -> 地址值不能变

    ③不可变类:  private final 修饰成员变量

           提供带参数的构造方法

           只提供getter方法,不提供setter方法

           保证引用的引用类型是不可变的

  (10)final 和 abstract 互斥

    final 和static 不能同时修饰方法,但是可以同时修饰内部类

  (11) 抽象类和接口的区别:  

1、抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。

 

2、抽象类要被子类继承,接口要被类实现。

 

3、接口能有抽象方法,默认方法和静态方法(JDK8支持),抽象类能有抽象方法和其他非抽象类的方法

 

4、接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。

 

5、抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类。同样,一个实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类。

 

6、抽象方法只能申明,不能实现,接口是设计的结果 ,抽象类是重构的结果

 

7、抽象类里可以没有抽象方法

 

8、如果一个类里有抽象方法,那么这个类只能是抽象类

 

9、抽象方法要被实现,所以不能是静态的,也不能是私有的。

 

10、接口可继承接口,并可多继承接口,但类只能单继承。

  (12) 内部类  内部类能访问外部类的私有数据,但是外部类不能直接访问内部类的实现细节

    ①静态内部类   可以包含静态成员和非静态成员,只能访问外部类的静态变量,接口只能包含静态内部类

    ②非静态内部类  不能拥有静态成员,子类可以是外部类

    ③局部内部类

    ④匿名内部类

  (13) 枚举类

    ①继承于java.lang.Enum

    ②实例必须在第一行显示列出

    ③构造方法为private

    ④可以包含抽象方法,但是方法前面不加abstract,而且必须提供实现

    ⑤values() 获取所有的枚举值  

     ordinal() 返回枚举值在枚举类的索引值

     compareTo(E e) 比较枚举值的前后顺序

     valueOf(Class class, String name) 返回制定枚举类中指定名称的枚举值

   (14) 对象在内存中的状态

1、可达状态
当一个对象被创建后,有一个以上的引用变量引用它。在有向图中可以从起始顶点导航到该对象,那么它就出于可达状态,程序可以通过引用变量来调用该对象的属性和方法。
2、可恢复状态
如果程序中某个对象不再有任何引用变量引用它,他将进入可恢复状态,此时从有向图的起始顶点不能导航到该对象。在这种状态下,系统的垃圾回收机制转变回收该对象所占用的内存。在回收该对象之前,系统会调用可恢复状态的对象的finalize方法进行资源清理,如果系统调用finalize方法重新让一个以上的引用变量引用该对象,则该对象会再次编程可达状态;否则,该对象将进入不可达状态。
3、不可达状态
当对象的所有关联都被切断,且系统调用所有对象的finalize方法依然没有使该对象变成可达状态后,这个对象将永久性地失去引用,最后变成不可达状态。只有当一个对象出于不可达状态,系统才会真正回收该对象所占用的资源。

  (15) 强制系统回收垃圾的两种方式

    ①System.gc();

    ②Runtime.getRuntime().gc();

  (16) 常用的工具类

    ①Scanner

    ②System.currentTimeMill();

    ③Runtime.exec();

    ④Objects

    ⑤String

      charAt(int index);  获取索引对应的值

      indexOf(int ch);  indexOf(String str);  获取值对应的索引

      lastIndexOf(...);

      compareTo(String string); 返回字符差或者长度差

      concat(String string);

      contentEquals(StringBuffer sb); 比较String和StringBuffer,包含的字符序列相同返回true

      copyValueOf(char[] data);  等价于new String(char[] data)

      substring();

      getBytes();

      toCharArray();

      valueOf(X x);  String str = Integer.valueOf(12);  

    ⑥StringBuffer  

    ⑦StringBuilder

       append(s);

       insert(i,s);

       delete(a,b);

       reserve(s);

    ⑧Math

      pow(a,b);

      floor(a);

      ceil(a);

      round(a);

      sqrt(a);

    ⑨Random  ThreadLocalRandon   伪随机

      Random rand = new Random(send);

      rand.nextInt(a,b);

      ThreadLocalRandom rand = ThreadLocalRandom.current();

    ⑩BigDecimal

      new BigDecimal();

      BigDecimal.valueOf();

      对于浮点数

         new BigDecimal("1.22");

         BigDecimal.valueOf(1.22);

      方法

         add();

         substract();

         multiply();

         divide();

         pow();

         XxxValue();

    ⑩①正则表达式

        Pattern p = new Pattern("\w*");

        Matcher m = p.matcher("abc123456");

      ⑩② NumberFormat

      SimpleDataFormat

  

原文地址:https://www.cnblogs.com/liuniansishui/p/8678971.html