从零开始学java-第二天常量类型转换java的变

这是我参与11月更文挑战的第2天,活动详情查看:2021最后一次更文挑战

今天继续~

常量

  • 在运行时常量不可被修改
  • 使用final关键字来定义
  • 例子:final double a = 0.01

ps:常量名一般为大写,以便于区分

类型转换

  • 不能对boolean值进行类型转换
  • 把容量大的类型转换为容量小的类型需要强制转换
  • 浮点数转换为整数是通过舍弃小数的进行转换的

自动类型转换

  • 转换之前的数据类型位数要小于转换后的数据类型位数,如float -> double,byte -> int
public class LeiXingZhuanHuan{
    public static void main(String[] args){
        float a = 1.2;
        int b = a;// 输出1
        char c = 'A';
        int d = c+1;// 输出66,A是65
    } 
}
复制代码

强制类型转换

通过在值前的括号以及括号内的类型进行强转:

public class QiangZhuan{
    public static void main(String[] args){
        int i1 = 123; 
        byte b = (byte)i1;
    } 
}
复制代码

java的变量类型

public class Variable{ 
    static int allClicks = 0; // 类变量
    String str = "hello world"; // 实例变量
    public void method(){
        int i = 0; // 局部变量 
    } 
}
复制代码

类变量

  • 也称静态变量,必须用static来声明
  • 静态变量一般用在声明常量的时候,初始化后不可改变
  • 在程序第一次访问的时候被创建,在程序结束时销毁
  • 大部分的静态变量均为public类型
  • 静态变量可以通过类名+变量名的形式访问
public class Test { 
    private static double number;// 这就是一个类变量 
    public static final String name = "程序员"; 
    public static void main(String[] args){ 
        
    } 
}
复制代码

实例变量

  • 声明在类中,但是在构造方法,方法或语句块之外
  • 在对象实例化的时候才会确定实例变量
  • 在对象创建的时候创建,对象销毁的时候销毁
  • 所有的实例变量应该都需要被引用
  • 访问修饰符可以修饰实例变量(public,private等)
public class Test{
    public String name;// 这就是一个实例变量
    private double age;// 私有变量,只在本类可见
    public static void main(String[] args){ 
    
    } 
}
复制代码

局部变量

  • 声明在构造方法,方法或者语句块中
  • 局部变量在方法执行时创建,结束时销毁
  • 局部变量没有默认值,所以必须声明
public class Test{
    public void Local(){ 
        int age = 0;// 这就是局部变量
    } 
    public static void main(String[] args){ 
    
    } 
}
复制代码

java修饰符

访问修饰符

public修饰符

  • 声明为公有的变量,方法和构造方法可以在任何类中被访问
  • 类中的所有公有方法和变量都会被子类继承
public static void main(String[] args) { 

}
复制代码

private修饰符

  • 被声明为私有的变量,方法和构造方法只能在类内部访问
  • 主要用处在于保护类的数据
  • 可以通过类中的getter方法进行外部调用
public class Private { 
    private String format;
    public String getter() { 
        return this.format;
    } 
    public void setter(String format) { 
        this.format = format;
    } 
}
复制代码

protect修饰符

  • 被声明为保护的变量,方法和构造器能被同一个包中的类访问
  • 子类可以访问继承与基类的方法
  • 如果只想让该方法所在的子类可见,则使用protect
class Protect { 
    protected boolean Method(String name) { 
        
    }
} 
class Protect_son extends Protect {
    protected boolean Method(String name) { 
       
    } 
}
复制代码

访问控制与继承

  • 父类中声明为public的方法在子类中也要为public
  • 父类中声明为protect的方法在子类中要为public或protect
  • 父类中声明为private的方法不能被继承

非访问修饰符

static修饰符

  • 静态变量:一个类中无论有多少实例化对象,静态变量只有一份,也称类变量
  • 静态方法:静态方法中不能使用类中的非静态变量
public class Static{
    private static int number = 0;
    protected static int getCount(){
        return number;
    }
    private static void addCount(){
        number++;
    }
    Static(){
        Static.addCount();
    }
    public static void main(String[] args){
        for(int i=0;i<500;i++){
            new Static();
        }
        System.out.println(Static.getCount());
    }
}
复制代码

final修饰符

  • 一般与static连用用于创建类常量
  • final方法:父类中的final方法可以被继承,但是不能被重写
  • final类:不能被继承
public final class Test{
    static final String TITLE = "final"; 
}
复制代码

abstract修饰符

  • 抽象类不能实例化对象,唯一的目的就是对现有类的扩充
  • 一个类不能同时被abstract和final修饰,一个类包含抽象方法就必定是抽象类
  • 抽象方法:
    • 具体内容又子类提供
    • 不能被声明为final与static
    • 任何继承抽象类的子类必须实现父类的所有抽象方法,除非子类也是抽象类
    • 抽象方法声明以分号结尾
public abstract class SuperClass{ 
    abstract void test(); //抽象方法 
} 
class SubClass extends SuperClass{ 
    void test(){
    }
}
复制代码

synchronized修饰符

  • 被此关键字声明的方法在同一时间只能被一个线程访问
public synchronized void showDetails(){  }
复制代码

ps:让程序按顺序执行的时候有奇效

transient修饰符

  • 序列化的对象包含被 transient 修饰的实例变量时,java 虚拟机(JVM)跳过该特定的变量
public transient int limit = 55;
复制代码

ps:用途一般在密码上,获取密码获取不到

volatile修饰符

  • 成员变量在每次被线程访问时,都强制从共享内存中重新读取该成员变量的值
public class MyRunnable implements Runnable {
    private volatile boolean active;
    public void run() {
        active = true; 
        while (active) // 第一行
        { 
            // 代码
        } 
    } 
    public void stop() { 
        active = false; // 第二行
    } 
}
复制代码

ps:这段代码使用了volatile修饰符,会在每次访问的时候强制获取变量值,active变量在执行stop的时候变为了false,所以在run方法调用的时候active会突然变为false,然后终止循环

今天就学到这里吧,晚安~