Java基础之运算、关键字

运算

参数传参

本质上是将对象的地址以值的方式传递到形参中

在方法中改变对象的字段值会改变原对象该字段值,因为引用的是同一个对象。

方法里和方法外的两个指针指向了不同的对象。

float与double

Java 不能隐式执行向下转型,因为这会使得精度降低。

1.1f 字面量才是 float 类型。

1.1 字面量属于 double 类型

字面量 1 是 int 类型

使用 += 或者 ++ 运算符会执行隐式类型转换。

switch 不支持 long

 

 

关键字

final

1.数据

  • 对于基本类型,final 使数值不变;
  • 对于引用类型,final 使引用不变,也就不能引用其它对象,但是被引用的对象本身是可以修改的。

2.方法

声明的方法不能被子类重写
3.类

声明的类不允许被继承

static

1.静态变量

  • 静态变量:又称为类变量,也就是说这个变量属于类的,类所有的实例都共享静态变量,可以直接通过类名来访问它。静态变量在内存中只存在一份。
  • 实例变量:每创建一个实例就会产生一个实例变量,它与该实例同生共死。
public class A {

    private int x;         // 实例变量
    private static int y;  // 静态变量

    public static void main(String[] args) {
        // int x = A.x;  // Non-static field 'x' cannot be referenced from a static context
        A a = new A();
        int x = a.x;
        int y = A.y;
    }
}

2.静态方法

静态方法在类加载的时候就存在了,它不依赖于任何实例。所以静态方法必须有实现,也就是说它不能是抽象方法

只能访问所属类的静态字段和静态方法,方法中不能有 this 和 super 关键字,因此这两个关键字与具体对象关联。

3.静态语句块

静态语句块在类初始化时运行一次。

4.静态内部类

 非静态内部类依赖于外部类的实例,也就是说需要先创建外部类实例,才能用这个实例去创建非静态内部类。而静态内部类不需要。

public class OuterClass {

    class InnerClass {
    }

    static class StaticInnerClass {
    }

    public static void main(String[] args) {
        // InnerClass innerClass = new InnerClass(); // 'OuterClass.this' cannot be referenced from a static context
        OuterClass outerClass = new OuterClass();
        InnerClass innerClass = outerClass.new InnerClass();
        StaticInnerClass staticInnerClass = new StaticInnerClass();
    }
}

静态内部类不能访问外部类的非静态的变量和方法。

5.静态导包

在使用今天方法和变量时不用再指定ClassName

import static com.xxx.ClassName.*

6.初始化顺序

静态变量和静态语句块优于实例变量和普通语句块,最后才是构造函数的初始化。

存在继承的情况下,初始化顺序为:

  • 父类(静态变量、静态语句块)
  • 子类(静态变量、静态语句块)
  • 父类(实例变量、普通语句块)
  • 父类(构造函数)
  • 子类(实例变量、普通语句块)
  • 子类(构造函数)

 

发布了13 篇原创文章 · 获赞 1 · 访问量 388

猜你喜欢

转载自blog.csdn.net/trytrylmt/article/details/103965234