java-day1:变量

java:变量

Java 变量

Java 中主要有如下几种类型的变量

局部变量

类变量(静态变量)

成员变量(非静态变量)

局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。

类变量:类变量也声明在类中,方法体之外,但必须声明为 static 类型。

成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。

java常量,也称为"final变量",常量在整个程序中只能被赋值1次,在所有的对象共享值时,常量是非常有用的

当定义的final变量属于“成员变量”时,必须在定义时设定它的初值,否则会产生编译错误,但是在实例方法中,如main方法或者自定义的实例方法中,不是必须在初始化时赋值。类的主方法(main)必须声明为public static void.

public class HelloWord {
    //类中直接定义的变量,有类变量,成员变量
    // final成员变量,初始化变量必须赋值
    static final long a=1234;
    public static void main(String[] args) {
    //在主方法中定义final变量,就不是必须初始化赋值
        final long x;
        System.out.println(a);
        x=111;
        System.out.println(x);
        i_like_java_and_python();
    }
    public static void i_like_java_and_python(){
        final long y;
        y=222;
        System.out.println(y);
    }
}
//结果如下:
1234
111
222

可知,final 变量只要是成员变量(包括特殊的static修饰的类变量),成员变量分为静态变量(也称类变量)和实例变量,都必须在声明时赋值,而实例方法中的局部变量,声明后,不需要立马赋值
在这里插入图片描述

注意,final变量只能赋值1次,不管是成员变量还是实例变量,都只能赋值1次
类的静态变量(类变量)、实例变量、局部变量:

public class val {
    // static修饰的是类变量(静态变量)
    static int age=10;
    // 在类中,方法之外的非static变量,是实例变量   
    int a=12;
    public static void main(String[] args) {
        System.out.println(age);
        val a=new val();
        System.out.println(a);
        System.out.println(a.a);
    }
}
10
val@14ae5a5
12

修改如下:

public class val {
    // static修饰的是类变量(静态变量)
    static int age=10;
    // 在类中,方法之外的非static变量,是实例变量
    static int a=12;
    public static void main(String[] args) {
        //这里的a是局部变量
        int a=133;
        System.out.println(a);
    }
}
133

自增和自减运算符:

C和java的自增和自减运算符一样,单目运算符,可放在操作元之前和之后,操作元必须是整型或浮点型变量
++a(–a) :
表示在使用变量a之前,先使a的值加(减)1
a++(a–):
表示在使用变量a之后,使a的值加(减)1

引用类型

在Java中,引用类型的变量非常类似于C/C++的指针。引用类型指向一个对象,指向对象的变量是引用变量。这些变量在声明时被指定为一个特定的类型,比如 Employee、Puppy 等。变量一旦声明后,类型就不能被改变了。
对象、数组都是引用数据类型
所有引用类型的默认值都是null
一个引用变量可以用来引用任何与之兼容的类型。
例子:Site site = new Site(“Runoob”)。

数据类型转换

可以将任意类型的数据转换成String类型,如果从低精度数据类型向高精度数据类型转换,则永远不会溢出,并且总是成功;而把高精度数据类型向低精度数据类型转换则必然有信息丢失,有可能失败。

数据类型转换有两种方式:隐式转换和显式转换

隐式转换:从低级类型到高级类型的转换,系统将会自动执行。
精度从低到高排列:byte<short<int<long<float<double

自动类型转换
整型、实型(常量)、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算。

转换从低级到高级。

低 ------------------------------------> 高

byte,short,char—> int —> long—> float —> double

数据类型转换必须满足如下规则:

  1. 不能对boolean类型进行类型转换。

  2. 不能把对象类型转换成不相关类的对象。

  3. 在把容量大的类型转换为容量小的类型时必须使用强制类型转换。

  4. 转换过程中可能导致溢出或损失精度,例如:
    int i =128;
    byte b = (byte)i;
    因为 byte 类型是 8 位,最大值为127,所以当 int 强制转换为 byte 类型时,值 128 时候就会导致溢出。

  5. 浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入,例如:
    (int)23.7 == 23;
    (int) -45.89f == -45

显式类型转换
当把高精度的变量的值赋给低精度的变量时,必须使用显式类型转换运算(又称为强制类型转换),语法:(类型名)要转换的值

public class parse {
    public static void main(String[] args) {
        int a=(int)45.23;
        long b=(long)456.8F;
        int c=(int)'a';
        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
    }
}
45
456
97

执行显式类型转换时,可能导致精度损失。只要是boolean类型以外的其他基本类型之间的转换,全部能以显式类型转换的方法达到。
当把整数赋值给1个byte、short、int、long型变量时,不可以超出这些变量的取值范围,否则必须进行强制类型转换,例如:
byte b=(byte)129;

Java 局部变量

局部变量声明在方法、构造方法或者语句块中;
局部变量在方法、构造方法、或者语句块被执行的时候创建,当它们执行完成后,变量将会被销毁;
访问修饰符不能用于局部变量
局部变量只在声明它的方法、构造方法或者语句块中可见;
局部变量是在栈上分配的。
局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用。

public class Test {
    public static void main(String[] args) {
        MyFriend m=new MyFriend();
        m.run("小徐");
    }
}
class MyFriend{
    String a;
    static String c;
    public void run(String name){
        String b;
        System.out.println(name);
        System.out.println(a);
        System.out.println(c);
        System.out.println(b);
    }
}
// 上面的a是实例变量,c是类变量,(均为成员变量)都是返回默认值null,
//但是b是局部变量,必须声明且赋值(局部变量没有默认值,不赋值会报错)

实例变量

实例变量声明在一个类中,但在方法、构造方法和语句块之外
当一个对象被实例化之后,每个实例变量的值就跟着确定;
实例变量在对象创建的时候创建,在对象被销毁的时候销毁
实例变量的值应该至少被一个方法、构造方法或者语句块引用,使得外部能够通过这些方式获取实例变量信息;
实例变量可以声明在使用前或者使用后;
访问修饰符可以修饰实例变量
实例变量对于类中的方法、构造方法或者语句块是可见的。一般情况下应该把实例变量设为私有。通过使用访问修饰符可以使实例变量对子类可见;
实例变量具有默认值。数值型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null。变量的值可以在声明时指定,也可以在构造方法中指定;
实例变量可以直接通过变量名访问。但在静态方法以及其他类中,就应该使用完全限定名:ObejectReference.VariableName。

类变量(静态变量)

类变量也称为静态变量,在类中以 static 关键字声明,但必须在方法之外
无论一个类创建了多少个对象,类只拥有类变量的一份拷贝。
静态变量除了被声明为常量外很少使用,静态变量是指声明为 public/private,final 和 static 类型的变量。静态变量初始化后不可改变。
静态变量储存在静态存储区。经常被声明为常量,很少单独使用 static 声明变量。
静态变量在第一次被访问时创建,在程序结束时销毁。
与实例变量具有相似的可见性。但为了对类的使用者可见,大多数静态变量声明为 public 类型。
默认值和实例变量相似。数值型变量默认值是 0,布尔型默认值是 false,引用类型默认值是 null。变量的值可以在声明的时候指定,也可以在构造方法中指定。此外,静态变量还可以在静态语句块中初始化。
静态变量可以通过:ClassName.VariableName的方式访问。
类变量被声明为 public static final 类型时,类变量名称一般建议使用大写字母。如果静态变量不是 public 和 final 类型,其命名方式与实例变量以及局部变量的命名方式一致。

注释

//我是单行注释
/*
* 我是多行注释1
* 我是多行注释2
* */
/*
* 我是嵌套的单行注释    //我是单行注释
* */

但在多行注释中不能嵌套多行注释

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值