java基础--自我总结

1.带小数点数字默认为double类型,double范围比float大,为了不损失精度,double类型不会自动转换成float类型:

  例:float f = 1.0f      //必须这么写

2.所有的Exceptions都继承自Throwable.

3.java标识符:以字母开头的字母数字序列,

    字母 -- 大小写英文字母、下划线(_)、美元符($),也可可以是Unicode字符集里的符,如:汉字等;

    数字 -- 0~9。

    其中,不能包含+、-及关键字。

4.java中instance variable、class variable和local variable区别:

  (1)static variable也成class variable,属于类所有,它也是多线程编程时产生问题的主要来源;

  (2)non-static variable 称为 instance variable,实例变量;

  (3)local variable,局部变量,只在某个域中有效;

  static variable 与 instance variable 区别:

    (1)instance variable在对象被创建时初始化,假如有5个对象,那5个对象中该instance variable可以有不同的值。

    (2)static variable在类被第一次加载到jvm中时初始化,像c中的global variable,被所有instance共享,因此在multi-thread编程时要特别注意线程安全问题。

  instance variable 与 local variable 区别:

    (1)local variable只在scope中可见,在scope外不可见,不可被访问,scope由{ }界定。

    (2)instance variable根据其access modifier可被不同的代码访问,public 的可以被在任意处的instance访问,protected可被subclass访问,private 只能在自身中被访问。

     access modifier 不能用于local variable,也不能使用static,但可以使用final,对于匿名内部类来说,只能使用final local variable。

 5.JavaScript对象获取属性值的方法:

  (1)objectName.propertyName

  (2)objectName("propertyName")

  (3)objectName["propertyName"]

6.final关键字(用于成员变量、本地变量、方法以及类)

  (1)final变量:凡是成员变量或者本地变量(方法中变量或代码块中的变量)声明为final都叫final变量,经常和static关键字一块使用,用作常量。如果是基本数据类型的变量,一旦被初始化就不会改变;如果是引用类型的变量,则对其初始化后便不再指向另一对象。

  (2)final方法:不能被子类的方法重写,比非final方法快,编译的时候就静态绑定了,不需要运行时再动态绑定。private会隐式的被指定为final方法。

  (3)final类:不能被继承,java中String和Integer以及其他包装类。

  (4)final关键字的好处:

    **$**:提高了性能,JVM和java应用都会缓存final变量;

    **$**:final变量可以安全的多线程环境下进行共享,而不需要额外的开销;

    **$**:使用final关键字,JVM会对方法、变量及类进行优化。

    PS:如果final变量是基本数据类型及String类型时,如果编译期就知道它的值,编译期会将它当成编译期常量使用。

    PS:final参数 -- java采用的是值传递,对于基本数据类型,直接相当于将变量进行拷贝,即使没有final修饰,方法内的变量改变也不会影响方法外的变量;对于引用变量,传递的引用的值,让实参和形参指向同一个队形,即使形参指向另外一个对象,也不会影响实参。

  例:final StringBuffer sb = new StringBuffer("abc");   //fianl修饰的引用对象

    sb.append("def");   //使用append修改值,没有差生新的对象,不会报错

    sb = new StringBuffer("def");    //产生新的对象,会报错

7.switch-case用法及注意事项

  (1)switch(A),jdk1.7之前A只能是数值类型,如byte、short、char、int及枚举等,不能是long和String;jdk1.7后A可以是String。

  (2)case后面必须跟常量;

8.接口、类、属性、方法各有哪些修饰符

  (1)接口的修饰符:public、abstract。(默认情况下接口是public abstract)

  (2)类的修饰符:public、abstract、final、类缺省访问控制符

  (3)属性的修饰符:4中可访问控制符(public、default、protected和private)、final、static、volatile和transient

  (4)方法的修饰符:4中可访问控制符(public、default、protected和private)、final、static、synchronized、abstract、native(本地方法控制符)

 9.内部类(一般只为外围类使用)

  (1)普通内部类对象隐式的保存了一个引用,指向创建它的外围类对象;

  (2)不能从嵌套类的对象中访问非静态的外围类对象 ;

  (3)内部类可以继承某个接口,无论外围类有没有继承;

10.String、StringBuffer和StringBuilder的区别

  (1)String使用字符数据保存字符串,private final char value[],因为有final修饰,所以String对象是不可变的;

  (2)StringBuffer和StringBuilder都是继承自AbstractStringBuilder类,在该类中也使用字符数据保存字符串,char[],所以这两个类的对象是可变的。

  (3)String对象是不可变的,也可理解成常量,所以是线程安全的;StringBuffer对调用的方法加了同步锁,所以也是线程安全的;StringBuilder并没有对方法进行加同步锁,所以是非线程安全的。

11.字面值常量:如1988、3.45、true/false等;

12.局部变量和局部内部类不能用public、protected、private和static修饰。

  成员内部类可以用权限修饰符修饰(public、protected、private和缺省修饰符)

13.字符串截取

  (1)java虚拟机采用Unicode16(UCS2)编码,所有字符在内存中都是2个字节,对于英文字符,其实占一个字节,高位是补位的,中文字符占两个字节。

  (2)String str = "fjajf汉字fldajlf汉字";   byte[] bytes = str.getBytes("Unicode");   bytes前两个是标志位:bytes[0] = -2; bytes[1] = -1;

14.java Date、String、Long三种日期类型之间的相互转换

  (1)  //String转化成Date

       SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");

       Date date = simpleDateFormat .parse("20180124153000");

       //Date转化成long

       long shijian = date.getTime();

       //long转化成Date

       Date date = new Date(123456L);

       //Date转化成String

       String str = simpleDateFormat.format(date);

原文地址:https://www.cnblogs.com/lmmblogs/p/7715671.html