JAVA基础学习-变量

73 篇文章 0 订阅
73 篇文章 0 订阅

3.1 什么是变量

  • 什么是变量

变量的定义是:用来命名一个数据的标识符;1949 这是一个数字,代表某年;如果要命名这个数字,在java里就会写成:

public class HelloWorld {
    public static void main(String[] args) {
        int year = 1949;
    }
}

3.2 基本变量类型

一个变量的类型,决定了该变量可以包含什么样的值。Java中有八种基本类型,都是Java语言预先定义好的,并且是关键字。这八种基本类型分别是: 整型 (4种);字符型 (1种);浮点型 (2种);布尔型(1种)。

  • 整型

整型变量用于存放整数:byte、short、int、long, 区别在于不同类型的整型,最大值,最小值不一样, 如果试图给byte类型的变量赋予超出其范围的值,就会产生编译错误,这个时候就需要进行类型转换,在后面的章节会讲解。

 

public class HelloWorld{ public static void main(String[] args){ byte b = 1; short s = 200; int i = 300; long l = 400; /*如果试图给byte类型的变量赋予超出其范围的值,就会产生编译错误*/ byte b2 = 200; } }

  • 字符型

char类型用于存放一个字符,值用单引号'表示 (双引号表示字符串);

其长度和short一样,也是16位的;

只能存放一个字符,超过一个字符就会产生编译错误。

public class HelloWorld{

  public static void main(String[] args){
      char c = '中';
      //char 只能存放一个字符,超过一个字符就会产生编译错误
      char c2 = '中国'; //报错
      char c3 = 'ab'; //报错
  }
}

  • 浮点型

浮点数类型有两种:float 长度为32位;double 长度为64位。

注意: 默认的小数值是double类型的

所以 float f = 54.321会出现编译错误,因为54.321的默认类型是 double,其类型 长度为64,超过了float的长度32;

在数字后面加一个字母f,直接把该数字声明成float类型:float f2 = 54.321f,这样就不会出错了。

 

public class HelloWorld{ public static void main(String[] args){ char c = '中'; //char 只能存放一个字符,超过一个字符就会产生编译错误 char c2 = '中国'; //报错 char c3 = 'ab'; //报错 } }

  • 布尔型

布尔型用于表示真假,其长度为1。分别代表真假,虽然布尔型真正存放的数据是0(false) 1(true);但是,不能直接使用 0 1 进行赋值。

public class HelloWorld {
    public static void main(String[] args) {
        boolean b1 = true;
        boolean b2 = false;

        // 虽然布尔型真正存放的数据是0(false) 1(true)
        // 但是,不能直接使用0 1 进行赋值
        boolean b3 = 1;
    }
}

String类型其实并不是基本类型,但是它是如此广泛的被使用,常常被误以为是一种基本类型。String类型是Immutable的,一旦创建就不能够被改变

public class HelloWorld {
    public static void main(String[] args) {
        String str = "Hello Java";
    }
}
  • 练习-变量类型

public class HelloWorld {
    public static void main(String[] args) {
        double a = 3.14;
        double b = 2.769343;
        int day = 365;
        int integrate = 12;
        char eat = '吃';
        boolean flag = false;
        String text = "不可描述";
    }
}

3.3 字面值

创建一个Hero对象会用到new关键字,但是给一个基本类型变量赋值却不是用new. 因为基本类型是Java语言里的一种内置的特殊数据类型,并不是某个类的对象。 给基本类型的变量赋值的方式叫做 字面值,如下所例:

float hp = 313f;
int armor = 24;
  • 整数字面值

当以l或者L结尾的时候,一个整数字面值是long类型,否则就是int类型。 建议使用大写的L而非小写的l,因为容易和1混淆。

byte,short,int和long的值都可以通过int类型的字面值来创建。整数的字面值可以用如下四种进制来表示:

十进制: 基 10, 包含从0-9的数字,平常用的就是这种。 十六进制: 基 16, 包含从0-9的数字,和从A-F的字母。 八进制: 基 8, 包含从0-7的数字 二进制: 基 2, 包含0和1。(从 JAVA7开始就可以创建 二进制的字面值了)

public class HelloWorld {
    public static void main(String[] args) {
        long val = 26L; //以L结尾的字面值表示long型
        int decVal = 26; //默认就是int型
        int hexVal = 0x1a; //16进制
        int oxVal = 032; //8进制
        int binVal = 0b11010; //2进制
        System.out.println(oxVal);
    }
}

  • 浮点数字面值

当以f或者F结尾的时候,就表示一个float类型的浮点数,否则就是double类型(以d或者D结尾,写不写都可以)。

浮点数还可以用E或者e表示(科学计数法):e2表示10的二次方,即100。 1.234e2 = 1.234x100

public class HelloWorld {

    public static void main(String[] args) {
        float f1 = 123.4F;// 以F结尾的字面值表示float类型
        double d1 = 123.4;// 默认就是double类型
        double d2 = 1.234e2;// 科学计数法表示double
    }
}
  • 字符和字符串字面值

字符的字面值放在单引号中,字符串的字面值放在双引号中。

需要注意的是,\表示转义,比如需要表示制表符,回车换行,双引号等就需要用 \t \r \n " 的方式进行。

public class HelloWorld {

    public static void main(String[] args) {
        String name = "盖伦";
        char a= 'c';
//java学习交流:737251827  进入可领取学习资源及对十年开发经验大佬提问,免费解答!
        //以下是转义字符
        char tab = '\t'; //制表符
        char carriageReturn = '\r'; //回车
        char newLine = '\n'; //换行
        char doubleQuote = '\"'; //双引号
        char singleQuote = '\''; //单引号
        char backslash = '\\'; //反斜杠

    }
}
  • 练习-字面值

定义如下变量,然后为每种不同类型的变量赋予合法的字面值

byte b = 0b10;
short s = 12;
int i = 12;
long l = 256;
float f = 2.56f;
double d = 2.56;
char c = 'a';
String str = "abc";

3.4 类型转换

不同类型之间的数据可以互相转换,但是要满足一定的规则,转换规则如图所示:

精度高的数据类型就像容量大的杯子,可以放更大的数据;精度低的数据类型就像容量小的杯子,只能放更小的数据。小杯子往大杯子里倒东西,大杯子怎么都放得下;大杯子往小杯子里倒东西,有的时候放的下,有的时候就会有溢出。

**需要注意的一点是:**虽然short和char都是16位的,长度是一样的但是彼此之间,依然需要进行强制转换

public class HelloWorld {
    public static void main(String[] args) {
 
        char c = 'A';
        short s = 80;
         
        //虽然short和char都是16位的,长度是一样的
        //但是彼此之间,依然需要进行强制转换
        c = (char) s;
        //直接进行转换,会出现编译错误
        s = c;
    }
}

  • 低精度向高精度转换

低精度向高精度转换是可以正常转换的:

public class HelloWorld {
    public static void main(String[] args) {

        long l = 50;
        int i = 50;

        //int比较小,要放进比较大的long,随便怎么样,都放的进去
        l = i;
    }
}
  • 高精度向低精度转换

这个时候就只能采用强制转换,强制转换的意思就是,转是可以转的,但是不对转换之后的值负责。 风险自担,后果自负。

public class HelloWorld {
    public static void main(String[] args) {
        byte b = 5;
        int i1 = 10;
        int i2 = 300;

        b = (byte) i1;
        //因为i1的值是在byte范围之内,所以即便进行强制转换
        //最后得到的值,也是10
        System.out.println(b);

        //因为i2的值是在byte范围之外,所以就会按照byte的长度进行截取
        //i2的值是300,其对应的二进制数是 100101100
        //按照byte的长度8位进行截取后,其值为 00101100 即44
        b =(byte) i2;
        System.out.println(b);

        //查看一个整数对应的二进制的方法:
        System.out.println(Integer.toBinaryString(i2));
    }
}
  • 练习-类型转换

short a = 1;short b = 2;那么 a+b 是什么类型?

short a = 1;
short b = 2;

运算时会自动提升表达式的类型,也即int类型,再将结果赋值给short类型的a时,类型会不匹配;所以需要a+b为int类型,需要进行强制转换。

3.5 命名规则

变量命名必须满足一系列的条件,不能随意命名。

  • 命名规则:变量命名只能使用字母 数字 $ _;变量第一个字符 不能使用数字。

  • 使用完整的单词命名,而非缩写

  • 不能只使用关键字,但是可以包含关键字

3.6 作用域

  • 字段,属性,Field

当一个变量被声明在类下面:变量就叫做字段 或者属性成员变量Field。 比如变量i,就是一个属性。那么从第2行这个变量声明的位置开始,整个类都可以访问得到;所以其作用域就是从其声明的位置开始的整个类。

public class HelloWorld {
    int i = 1;
    int j = i;  //其他的属性可以访问i
    public void method1(){
        System.out.println(i); //方法1里可以访问i
    }
    public void method2(){
        System.out.println(i); //方法2里可以访问i
    }
}

  • 参数

如果一个变量,是声明在一个方法上的,就叫做参数。参数的作用域即为该方法内的所有代码,其他方法不能访问该参数,类里面也不能访问该参数。

public class HelloWorld {

    public void method1(int i){ //参数i的作用域即方法method1
        System.out.println(i);
    }
    public void method2(){

        System.out.println(i); //method2 不能访问参数i
    }

    int j = i;  //类里面也不能访问参数i
}

  • 局部变量

声明在方法内的变量,叫做局部变量;其作用域在声明开始的位置,到其所处于的块结束位置。

public class HelloWorld {
    public void method1() {
        int i  = 5;  //其作用范围是从声明的第4行,到其所处于的块结束12行位置
        System.out.println(i);
        {            //子块
            System.out.println(i); //可以访问i
            int j = 6;
            System.out.println(j); //可以访问j
        }
//java学习交流:737251827  进入可领取学习资源及对十年开发经验大佬提问,免费解答!
        System.out.println(j); //不能访问j,因为其作用域到第10行就结束了
    }
}
  • 练习-作用域

属性的作用域在方法中,参数的作用域也在方法中,如果属性和参数命名相同了的话? 那么到底取哪个值?

public class HelloWorld {
    int i = 1; //属性名是i
    public void method1(int i){ //参数也是i
        System.out.println(i);
    }

    public static void main(String[] args) {
        new HelloWorld().method1(5);
        //结果打印出来是 1还是5?
    }
}

答案是 5 .

3.7 final

final 修饰一个变量,有很多种说法,比如不能改变等等;准确的描述是 当一个变量被final修饰的时候,该变量只有一次赋值的机会

  • 在声明的时候赋值

i在第4行已经被赋值过了,所以这里会出现编译错误。

public class HelloWorld {
    public void method1() {
        final int i = 5;
        i = 10; //i在第4行已经被赋值过了,所以这里会出现编译错误
    }
}
  • 在声明的时候没有赋值

如果在声明的时候未赋值,那么可以在后面代码进行唯一的一次赋值。

public class HelloWorld {

    public void method1() {
        final int i;

        i = 10; //i在第4行,只是被声明,但是没有被赋值,所以在这里可以进行第一次赋值
        i = 11; //i在第6行已经被赋值过了,所以这里会出现编译错误
    }
}
  • final 修饰其他

final 除了修饰变量,还可以修饰类,修饰方法,这些都在后续的章节展开。

  • 练习-final

如果final修饰的是参数,能否在方法里给这个参数赋值?

public class HelloWorld {
    public void method1(final int j) {
        j = 5; //这个能否执行?
    }
}

以;结尾的一段代码,即为一个表达式。

3.9 块

从{ 开始 到对应的} 结束,即一个块。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值