一、float,double,short,long

1、float
单精度浮点数(32位);默认值 0.0f;浮点数不能用来表示精确的值
例:float f1 = 1.5f;
关于浮点数存在的原因,我找到下面一段话,觉得很有道理

虽然计算机使用二进制,但在处理非整数时,也需要考虑小数点位置的问题,无法对齐小数点就无法做加法、减法比较这样的操作。
我们说小数点位置,永远是说相对于我们存储的数位来说的,比如说我们存储了01001001,然后小数点在第三位之后,也就是010.01001了。
定点数是提前对齐好的小数,整数是一种特殊情况,小数点永远在最后一位之后。定点数的优点是很简单,大部分运算实现起来和整数一样或者略有变化,但是缺点则是表示范围,比如我们刚才的例子中,最大只能表示32;而且在表示很小的数的时候,大部分位都是0,精度很差,不能充分运用存储单元。
浮点数就是设计来克服这个缺点的,它相当于一个定点数加上一个阶码,阶码表示将这个定点数的小数点移动若干位。由于可以用阶码移动小数点,因此称为浮点数。

2、double
双精度浮点数(64位);默认值 0.0d;double也不能用来表示精确的值
例:double d1 = 1.5;
3、short
16位有符号数,默认值0
4、long
64位有符号数,默认值0L

short a=0;
long b=0;
float c=0;
double d=0;
System.out.println(a+"/"+b+"/"+c+"/"+d);
//输出0/0/0.0/0.0
System.out.println("short:"+Short.SIZE+"位:"+Short.MIN_VALUE+"~"+Short.MAX_VALUE);
//short:16位:-32768~32767
//long:64位:-9223372036854775808~9223372036854775807
//float:32位:1.4E-45~3.4028235E38
//double:64位:4.9E-324~1.7976931348623157E308

二、final

final 表示不可改变的
1、final数据

final int a=8;
a=10;
//此时a报错:The final local variable a cannot be assigned. 
//It must be blank and not using a compound assignment

所以可以将final定义的数据看做常量(大写),只能被赋值一次
还有一种空白常量:

一个类中的final数据成员就可以实现依对象而有所不同,却有保持其恒定不变的特征。

我理解是:该数据类型是final,但是对象是每次new时动态的,那么该数据可以成为动态的对象中不变的常量(依对象实际而变化)

public class StudyFinal {
    final int a;
    public StudyFinal (int a) {
        this.a=a;
    }
    public int getA() {
        return a;
    }
    public static void main(String[] args) {
        for(int i=0;i<10;i++)
            System.out.println(new StudyFinal(i).getA());
            //每个实例化对象都有个final a
    }
}
public class StudyFinal {
    final int a,b;
    public StudyFinal (int a) {
    //此时a提示The blank final field b may not have been initialized
    //所以再次强调了:无论什么情况编译器都确保是空白final在使用前必须被初始化。
        this.a=a;
    }
    public StudyFinal (int a,int b) {
        this.a=a;
        this.b=b;
    }
}

2、final方法

public class StudyFinal {
    public final void method(){
        System.out.println("this is a final method");
    }
}
class emethod extends StudyFinal{
    public void method() {
    //method处报错:Cannot override the final method from StudyFinal
    }
}

使用final方法原因如下

第一、把方法锁定,防止任何继承类修改它的意义和实现。
第二、高效。编译器在遇到调用final方法时候会转入内嵌机制,大大提高执行效率。

public class StudyFinal {
    public static void main(String[] args) {
        final int a=8;
        emethod e=new emethod();
        e.method();  
        //程序执行完,显示“this is a final method”,代表final方法可以继承,但是不能修改
    }
    public final void method(){
        System.out.println("this is a final method");
    }
}
class emethod extends StudyFinal{
}

3、final类
final类不能被继承,因此final类的成员方法没有机会被覆盖,默认都是final的。

public final class StudyFinal {
}
class sf1 extends StudyFinal{
//此时提示:The type sf1 cannot subclass the final class StudyFinal
}

三、extends

extends:继承
子类会自动得到父类的字段和方法(非private),也可以重写父类的方法,上面很多地方都用到了extends,就不累赘说了


实践发现extends理解不是透彻,附上例子

class grand{
    public grand() {
        System.out.println("this is grand");
    }
}
class parents extends grand{
}
public class ThisSuper extends parents  {

    public static void main(String[] args) {
        ThisSuper t=new ThisSuper();
    }
}
//输出一行this is grand
/*
*说出来自己都觉得挺搞笑的,真是学着学着学傻了。写下这段反思的原因是现在用上面的代码做第六课作业时,出现了3行this is grand。然后就开始怀疑智商和人生了。
再细看现在的代码,原来我是实例化了三次:new ThisSuper();new parents();new grand();
当然会有3行。
所有再次验证了extends是调用,并不是实现,我new一次,它会一直往调用。而非把父类构造方法继承过来再实现一次。
*/

四、implements

接口一直是我没搞懂的地方。
因为Java不允许多重继承,这个时候接口就实现了多重接口 :有多个行为你,但是只要一个类可以具体实现
语法:

定义接口
interface 接口名{
}
实现接口:implement
class A implements B,C,D,E  {
}

注意事项:
a.实现一个接口就是要实现该接口的所有的方法(抽象类除外)。
否则提示:The type Interface must implement the inherited abstract method XXX
b.接口中的方法都是抽象的。
c.多个无关的类可以实现同一个接口,一个类可以实现多个无关的接口。

implement的栗子:

interface testinterface{
     void  settest();
     void playtest();
}
public class Interface implements testinterface{
    public void settest(){
        System.out.println("this is a set interface");
    }
    public void playtest(){
        System.out.println("this is a paly interface");
    }
    public static void main(String[] args) {
        Interface  inter=new Interface();
        inter.settest();
        inter.playtest();
    }
}

但是我觉得我理解接口这块还是比较浅显,也没太明白接口的优势所在,后续补充~