java关键字、包装类、内存

static 关键字:

  static 修饰的东西只依赖于类存在,在内存中只存在一份,不管是通过类名调用还是实例来调用,访问的都是同一块内存

  可以作用在:

    方法

    类

    成员变量

    代码块

  static作用于方法的时候,该方法为静态方法,静态方法通过类名调用,静态方法中不能调用非静态方法、非静态变量。

  非静态方法可以调用静态方法

  静态代码块只在类加载的时候运行一次,即整个程序运行期间只会运行一次

  执行顺序:static 代码块>匿名块>构造函数(不管他们在类中的相对位置)

单例模式(创建型模式):

  限定某一个类在整个程序运行过程中只能有一个实例对象

  public class Singleton{

    private static Signleton obj=new Singleton();
    private Singleton(){
    }
    public static Singleton getInstance{
      return obj;    

    }  
  }

final关键字

  可以用来修饰

    类:final类不能被继承

    方法:父类中的final方法,子类不能重写

    成员变量:final的基本类型变量不能再次赋值,final的对象不能修改其指针,但可以修改对象内部的值

常量设计 

  常量:不会被修改的变量

  java中的常量:public static final  只读,不能修改仅有一份所以用public static final。常量名一般全大写,用连字符_相连

  接口中定义的变量默认是常量

常量池

  为了节省内存,java为包装类/字符串建立了常量池

  建立了常量池的基本类型的包装类

    Boolean : true false

    Byte:-128-127

    Character:0-127

    Short,Integer,Long:-128-128

    Float,Double没有常量池

堆内存和栈内存

  栈内存读取速度快,容量小

  堆内存堆区速度慢,容量大

  基本类型的包装类和字符串有两种创建方式

  Integer a=10;

  String b="abc"    //a,b放入栈内存,将被常量化

  Integer c =new Integer(10);

  String d=new String("abc")    //c,d放入堆内存,不会被常量化

自动装箱和自动拆箱

  Integer i2=10;  //10会自动装箱成一个对象

  int i1=10;

  Integer i3=new Integer(10)  

  System.out.println(i1==i3);  //true,自动拆箱  基本类型和包装类型进行比较,包装类自动拆箱

  System.out.println(i1==i2);  //true,自动拆箱  基本类型和包装类型进行比较,包装类自动拆箱

  System.out.println(i3==i2);  //false,两个对象比较是否相等比较的是地址  

  i2+i3    //20,会自动拆箱,变成一个int变量

String类的对象在内存中如何存在

  String s0="abcdef";    //常量池

  String s1="abc"+"def";    //常量池,和s0共享

  String s2="abc";      //常量池

  String s3=s2+"def";    //堆内存,s3是变量,编译的时候编译器不会优化

  String s4="abc"+new String("def");  //堆内存,和s3不在同一个内存

原文地址:https://www.cnblogs.com/foodie-nils/p/13512296.html