JavaSE(4)——变量

一、关键字和保留字


1. 关键字

  • 定义:被Java语言赋予了特殊含义,用做专门用途的字符串(单词)。
  • 特点:关键字中所有字母都为小写。

2.保留字
现有Java版本尚未使用,但以后版本可能会作为关键字使用。自己命名标识符时要避免使用这些保留字。(goto、const

二、标识符


  • 定义:Java对各种变量、方法和类等要素命名时使用的字符序列称为标识符。

  • 技巧:凡是自己可以起名字的地方都叫标识符。

  • 定义合法标识符的规则:(合法标识符例如:mileTesta0dad_fd等)

    • 由26个英文字母大小写,0-9,_或$组成数字不可以开头。
    • 不可以使用关键字和保留字,但能包含关键字和保留字。
    • Java中严格区分大小写,长度无限制。
    • 标识符不能包含空格。
  • 标识符命名规范:(如果不遵守如下规范,编译也可以通过,建议如此)

    • 包名:多单词组成时所有字母都小写:xxxyyyzzz
    • 类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz
    • 变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写: xxxYyyZzz
    • 常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ

在命名的时候尽量让名字有意义能够做到见名知意。
Java采用Unicode字符集,因此表示夫也可以使用汉字声明,但是不建议使用。

三、变量


1. 变量:

  • 概念:
    • 内存中的一个存储区域。
    • 该区域的数据可以在同一类型范围内不断变化。
    • 变量是程序中最基本的存储单元。包含变量类型、变量名和存储的值。(有些不需要具体的变量类型的语言叫做弱类型语言,对于要求成员写出指定变量类型这就是强类型语言)
  • 作用: 用于在内存当中保存数据

注意点:

  • Java中每个变量必须先声明,后使用
  • 使用变量名来访问这块区域的数据
  • 变量的作用域:其定义所在的一对{}内
  • 变量只有在其作用域内才有效
  • 同一个作用域内,不能定义重名的变量
    变量的定义、赋值、使用在如下代码实例中可见
    代码示例:
package exercise.variabletext;

public class VariableText {
	public static void main(String[] args) {
		//变量的定义
		int i = 23;
		//变量的使用
		System.out.println(i);
		
		//编译错误:使用Number之前并未定义过Number
		//System.out.println(Number);
		
		//变量的声明
		
		//编译错误:使用Number之前未被赋值过
		//System.out.println(Number):
		
		int Number;
		//变量的赋值
		Number = 1000;
		System.out.println(Number);
		
		//编译错误:myClass在不同的作用域当中
		//System.out.println(myClass);
                
		//不可以在同一个作用域内定义同名的变量
		//int myAge = 22;
	}
	
	public void method() {
		int myClass = 1;
	}
}
  • 数据类型: (按数据类型分类)
    • 基本数据类型

      • 数值型

        • 整数类型(byteshortintlong)
        • Java各整数类型有固定的表数范围和字段长度,不受具体OS的影响,以保证java程序的可移植性。
        • Java的整型常量默认为int型,声明long型常量须后加lL
        • Java程序中变量通常声明为int型,除非不足以表示较大的数,才使用long

        • 浮点类型(floatdouble)
        • 与整数类型类似,Java浮点类型也有固定的表数范围和字段长度,不受具体操作系统的影响。

        • 浮点型常量有两种表示形式:

          • 十进制数形式:如:5.12512.0f.512(必须有小数点)
          • 科学计数法形式:如:5.12e2512E2100E-2
        • float:单精度,尾数可以精确到7位有效数字。很多情况下,精度很难满足需求。

        • double:双精度,精度是float的两倍。通常采用此类型。

        • Java的浮点型常量默认为double型,声明float型常量,须后加fF

        • 通常,定义浮点型变量时,使用double型。

      • 字符型(char)

      • 定义char字符类型时,通常加' '

      • Java当中的所有字符都是使用Unicode编码,所以一个字符可以存储一个字母,一个汉字,或其他书面语的一个字符。

      • 三种表现形式:

        • 字符常量使用' '括起来的单个字符。eg:char c1 = 'a';
        • 转义字符使用转义字符\将其后面的字符转化为特殊字符型常量。eg:char z1 = '\n';
        • Unicode值eg:char u1 = '\u000a'
      • 字符集

      字符编码(英语:Character encoding)、字集码是把字符集中的字符编码为指定集合中某一对象(例如:比特模式、自然数序列、8位组或者电脉冲),以便文本在计算机中存储和通过通信网络的传递。常见的例子包括将拉丁字母表编码成摩斯电码和ASCII。其中,ASCII将字母、数字和其它符号编号,并用7比特的二进制来表示这个整数。通常会额外使用一个扩充的比特,以便于以1个字节的方式存储。

      • ASCII

        • 国外最早使用的字符编码,用于表示英文字符和一些控制字符。
      • Unicode

        • 随着电脑的普及,越来越多的国家使用电脑,为了满足需求,就扩充了字符集。
      • UTF-8

        • 比Unicode更大的字符集
      • GB2312

        • 汉字字符集
      • 布尔型(boolean)
      • 常常用来判断逻辑条件。
      • 只有两个值truefalse。(Java不可以是哦那个0或者非0的整数代替truefalse,这要区别C语言)
    • 引用数据类型(引用型变量后面会做细致介绍)

    • (class)

    • 接口(interface)

    • 数组([])

基本数据类型的转换:(前提这里只是讨论七种基本数据类型变量间的运算,不包含boolean类型的。)

  • 自动类型提升: 当容量(这里容量的大小指的是数表示的范围的大小)小的数据类型的变量与容量大的数据类型的变量做运算的时候,结果自动提升为容量大的数据类型。(byteshortchar``这三种类型相互运算的时候结果都是int --> int --> long --> float --> double)
    代码示例:
package exercise.variabletest;

public class VariableTest3 {
	public static void main(String[] args) {
		byte b1 = 2;
		int i1 = 129;
		
		//编译不通过:不可以使用byte接受int类型的变量
		//byte b2 = b1 + i1;
		
		int i2 = b1 + i1;
		System.out.println(i2);
		long l1 = b1 + i1;
		System.out.println(l1);
		
		float f = b1 + i1;
		System.out.println(f);	//131.0
		
		short s1 = 123;
		double d1 = s1;
		System.out.println(d1); //123.0
		
		//****************************************
		
		char c1 = 'a';
		int i3 = 10;
		int i4 = c1 + i3;    //最小用int接收,只能往大了写
		
		//特别的char、short、byte之间做运算的时候结果是int型变量
		short s2 = 10;
		int s3 = c1 + s2;
		//char c2 = c1 + s2;	//编译不通过
		
		byte b2 = 10;
		//char c3 = b2 + c1;	//编译不通过,结果也是int
		
	}
}
  • 强制类型转换: 自动类型提升运算的逆运算
    • 强制类型转换需要使用强转符:()
    • 强制类型转换可能导致精度损失。
      代码示例:
package exercise.variabletest;

public class VariableTest4 {
	public static void main(String[] args) {
		double d1 = 12.9;
		int i1 = (int)d1;	//截断操作
		System.out.println(i1);
		
		//没有精度损失
		long l1 = 123;
		short s2 = (short)l1;
		
		//也算是一种精度损失
		int i2 = 128;
		byte b = (byte)i2;
		System.out.println(b); //-128
	}
}

一些常见的编码问题:long型变量在定义的时候,什么时候后面需要加L/lfloat型变量在定义的时候,什么时候后面需要加F/f(编程实例)

package exercise.variabletest;

public class VariableTest2 {
	public static void main(String[] args) {
		//1.编码情况:
		long l = 2432123;
		System.out.println(l);
		
		//编译失败:过大的整数
		//long l1 = 243242343243224;
		long l1 = 2434243123124324L;
		
		//***********************
		//编译失败,因为浮点数默认为double类型,所以会报错,所以在float类型声明或者定义时,一定要加上f
		//float f1 = 12.3;
		
		//2.编码情况2:
		//整型常量:默认类型为int型。
		//浮点型常量:默认类型为double型。
		byte b = 12;
		//byte b1 = b + 1;//编译失败
		
		//float f1 = b + 12.3; //编译失败
		
	}
}

2. 字符串类型: String

  • String不属于基本数据类型,属于引用数据类型。
  • 声明String类型变量时,使用一对""
  • String可以和8中基本数据类型做运算,且运算只能是连接运算+。运算的结果仍然是String类型。
package exercise.stringtest;

public class StringTest {
	public static void main(String[] args) {
		String s1 = "Hello World!";
		System.out.println(s1);
		
		String s2 = "a";
		String s3 = "";		//String可以为空。
		
		//char c = '';	//编译不通过,char型变量不可以为空,有且只能有一个
		
		//*******************
		int number = 1001;
		String numberStr = "学号:";
		String info = numberStr + number;	//+连接运算
		boolean b1 = true;
		String info1 = info + b1;
		System.out.println(info1);
	}
}

变量在类中声明的位置: 成员变量 vs 局部变量

posted @ 2021-12-18 11:40  thiswei  阅读(43)  评论(0)    收藏  举报