JAVA语言语法_数据类型(part1)

JAVA语言语法

一、数据类型
1、标识符

​ 标识符定义是:

​ 四个可以:可以是数字、字母(不仅仅是26个字母,也包含中文、或者其他语言)、下划线_、美元符号$。

​ 两不可以:不可以是以数字开头,不可以是关键字命名。

​ 一见:见名知意,增强可读性。

​ 大小写敏感:int a ; int A。

​ 遵循驼峰命名:

​ 类名:首字母大写,其余遵循驼峰命名

​ 方法名,变量名:首字母小写,其余遵循驼峰命名

​ 包名:全部小写,不遵循驼峰命名

2、关键字

​ 常见关键字,见一个认识一个,关键词表如下:

官方地址点击跳转

在这里插入图片描述在这里插入图片描述

3、常量、字面常量

​ 常量的定义是一个固定值,常见的是字面常量, 比如,123,‘a’,true等等,后面将会学习到的用final修饰的字符常量。

4、变量的声明、赋值、使用(重点)
package com.rucoding.d2;package com.rucoding.d2;
/**
 * 变量的声明、赋值、使用。
 * @author LiuYiXin
 *
 */
public class Variable01 {
	public static void main(String[] args) {
		//变量的定义方式: java是强类型的语言,即是声明变量,必须为其声明类型 ,例如 type varName [=varValue];
	    //int age;
		int age = 10;
		System.out.println("age=" + age); //局部变量必须经过初始化
		System.out.println("10年后的age:"+ (age + 10));
	}
}
5、变量的内存(重点)

​ 变量的内存,内存只占用一块空间。引用指向,例如,int age = 10 , 在内存开辟一块空间0x0101(假设),负责存放数字10,定义一个变量名为age的,将开辟的空间值赋值给age变量。

在这里插入图片描述

6、变量的作用域

​ 变量的作用域:变量可以分为成员变量和局部变量。

​ 成员变量是直接分配内存,定义成员变量可以不经过初始化,JVM系统会自动为其分配默认值的。

​ 局部变量:定义在方法内的变量,在参与运算之前必须进行初始化操作,若仅仅是接收某一表达式运算的结果,则可以不进行初始化操作。

package com.rucoding.d2;
/**
 * 变量的作用域
 * @author LiuYiXin
 *
 */
public class Variable02 {
	
	//定义成员变量,并且不赋值
	static int age;
	public static void main(String[] args) {
		//main方法内定义局部变量
		int age = 18; //只在main方法体起作用,必须经过初始化
		System.out.println(age);//就近输出原则
		printAge();//调用打印age方法,此时age的值为成员变量的age,默认系统赋值为0
		int a = 10, b;
		b = a + 10; //变量b仅仅是接收某一表达式的运算结果,可以不进行初始化操作。
		System.out.println("b=" + b);
	}
	
	//打印age方法
	public static void printAge(){
		System.out.println(age);
	}	
}
7、基本数据类型之整数类型存储

​ 整数类型:byte、short、int、long类型

​ java的整数类型默认是int类型,声明long类型的常量的须后加 ‘l’ 或者 ‘L’ 。

​ java程序中变量通常使用int类型(约21亿),除非表示的数很大,才会使用long类型

在这里插入图片描述

8、基本数据类型之整数类型变量
package com.rucoding.d2;

/**
 * 整数变量
 * @author LiuYiXin
 *
 */
public class Variable03 {
	public static void main(String[] args) {
		//1.整型: byte(1字节=8bit) \ short(2字节=16bit) \ int(4字节) \ long(8字节)
		//① byte范围: 8bit, 每个存储0或1 两种可能,则2的8次方=256.为了表示正负,分成一半,即是范围 -128 ~ 127 (中间0)
		byte b1 = 12;
		byte b2 = -128;
//		byte b3 = 128; //编译不通过
		System.out.println(b1);
		System.out.println(b2);
		short s1 = 128;
		int i1 = 1024;//通常情况下,定义整数类型,使用的是int类型(约21亿)
		//② 声明long类型,必须是'l'或 'L'结尾
		long l1 = 324344434334344L; //不加默认是int类型,必须加L声明 (此时不加,会报错超出int类型的值)
		System.out.println(l1);
	}
}
9、基本数据类型之浮点类型常量的两种形式

​ JAVA的浮点型常量默认是double类型,声明 float类型常量时候, 须后加 ‘f’ 或者 ‘F’。

在这里插入图片描述

10、基本数据类型之浮点类型变量
//2.浮点型:float(4字节) \ double (8字节)
	//① 浮点型,表示带小数点的数值
	//② float表示的数值范围比long还大。涉及底层存储方式...
	double d1 = 12.3;
	System.out.println(d1 + 1);
	//③ 声明float变量时候,须后加 'f' 或者 'F'
	float f1 = 12.3F; //不加f或F.则浮点型默认为double类型,此时大类型double转为小类型float.强转得加float
	System.out.println(f1);
11、编码和字符集

编码和字符集

​ 首先,查看一下常用的编码有哪些。其中ANSI在中国大陆即为GBK(以前是GB2321),最常用的是 GBK 和 UTF8无BOM格式。

在这里插入图片描述

12、基本数据类型之字符类型1

在这里插入图片描述

13、基本数据类型之字符类型2
package com.rucoding.d3;

public class CharacterChar {
	public static void main(String[] args) {
		//字符类型: char字符类型  (1字符 = 2字节)
		//① 定义char类型,只能使用一对单引号,内部只能使用一个字符
		char c1 = 'a';
//		char c2 = 'ab'; //编译不通过
		char c2 = '1';
		char c3 = '中';
		char c4 = 'F';
		System.out.println(c1);
		
		//表示形式: ①.声明一个字符; ②.转义字符; ③.直接使用Unicode值来表示字符型变量
		char c5= '\n'; //换行符
		c5 = '\t'; //制表符 tab
		System.out.print("Hello" + c5);
		System.out.println("World");
		
		//直接使用Unicode来表示
		char c6 = '\u0043';
		System.out.println(c6);
	}
}
14、解释乱码问题

​ 编写一段测试代码,另存到本地的磁盘,文件的格式默认为UTF-8,此时打开cmd窗口,进行编译运行操作, 发现输出的中文乱码了。图示测试:
在这里插入图片描述

​ 解释:cmd窗口默认的编码格式为GBK格式, 可以修改java源文件的格式, 另存选择 ANSI编码(即GBK格式)。修改完成,重新编译运行, 即可正常输出中文格式。

15、基本数据之布尔类型
	//布尔类型: boolean 
	//boolean类型只能取两个值,true 或者false
	//使用场景: 常常是在条件判断,或者循环结构下使用的
	
	// boolean型变量是类变量,则默认值为false.
    static boolean defalutResult;//
	System.out.println(defalutResult); //false
	
	boolean isMarried  = true;
	if(isMarried){
		System.out.println("你不能参加\"单身\"party了");//这里想将 单身 用引号括起来,利用转义字符\"
	}else{
		System.out.println("你可以考虑一下");
	}
16、基本数据类型转换问题

​ 前提: 这里讨论分析的只有七种基本数据类型之间的运算, 不包含boolean类型。

​ 1、自动类型转换:容量小的类型自动转换为容量大的数据类型。即是

​ 当容量小的数据类型的变量与容量大的数据类型的变量做运算时候,结果自动提升为容量大的数据类型。(这里的容量大小指的是 该数据类型的范围大小。比如:float容量大于long容量的)。

特别强调: 当byte、char、short类型进行运算的时候,结果为int,为啥这么规定, 可能是考虑它们的存储范围小,容易超出,所以如此设计???

在这里插入图片描述

代码练习:

package com.rucoding.d2;
public class Variable04 {
	public static void main(String[] args) {
		//自动类型提升
		byte b1 = 12;
		int i1 = 128;
//		byte b2 = b1 + i1; //此时编译不通过
		int i2 = b1 + i1;
		long l1 = b1 + i1;
		System.out.println(i2);
		System.out.println(l1);		
		float f1 = b1 + i1;
		System.out.println(f1);
	
		//***以下演示结论,重点***
		char c1 = 'a';
		int i3 = 13;
		int i4 = c1 + i3;
		System.out.println(i4);//结果110		
		short s1 = 10;
//		char c2 = c1 + s1;//此时编译不通过
//		short s2 = c1 + s1;//此时编译不通过		
		byte b2 = 10;
//		char c3 = c1 + b2;//此时编译不通过		
		//结论: java在做运算的时候,如果操作数均在int范围内,那么一律在int空间内运算.
		//简而言之,就是当byte、char、short三种数据类型的变量做运算时候,结果为int类型	
	}
}

​ 2、强制类型转换: 自动类型提升运算的逆运算。

(1).需要使用强转符:()
(2).注意点:强制类型转换,可能导致精度损失。

代码演示:

package com.rucoding.d2;
public class Variable05 {
	//强转类型转换: 自动类型提升运算的逆运算
	//1、需要强转符
	//2、强制类型转换,可能会导致精度损失
	public static void main(String[] args) {
		double d1 = 12.9;
		int i1 = (int)d1; //进行的是截断操作,精度损失
		System.out.println(i1);//12
		
		long l1 = 123;
		short s2 = (short)l1;
		System.out.println(s2);//没有精度损失
		
		int i2 = 128;
		byte b2 = (byte)i2;
		System.out.println(b2);//-128 精度损失	
	}
}
17、引用数据类型 String (重点)

​ (1)、String 属于引用数据类型,表示字符串。

​ (2)、声明String类型时候,使用一对双引号 " "

​ (3)、String类型可以和8种基本数据类型变量做运算,且运算只能是连接的运算:+

​ (4)、运算的结果还是 String类型。

代码演示:

package com.rucoding.d3;
/**
 * @author LiuYiXin
 *
 */
public class DataTypeString {
	public static void main(String[] args) {
		//String类型的定义: 使用一对双引号""
		String s1 = "hello";
		String s2 = "a";
		String s3 = "";
		System.out.println(s2);
//		char c = '';//编译不通过,必须定义一个字符内容	
		//连接运算
		int number = 1001;
		String numberStr = "学号: ";
		String info = numberStr + number; // + 为连接运算
		System.out.println(info);
		boolean b1 = true;
		String info1 = info + b1;
		System.out.println(info1); //+ 为连接运算
	}
}
18、引用数据类型String练习题 (重点)

代码演示1:

char c = 'a';
int num = 10;
String str = "hello";
System.out.println(c + num + str); //前+是做运算的,a转为97, 后+是连接字符串的, 输出107hello
System.out.println(c + str + num); //前+是连接字符串的,连接为ahello,结果为String类型,连接后面的 ahello10
System.out.println(c + (num + str));//先运行括号的,有String类型,进行连接操作,结果是String类型,继续连接,输出a10hello
System.out.println(str + num + c);//开始为String类型,结果还是String类型,输出hello10a

小结: 做java运算时候,判断 加号 + 是做连接还是运算的操作,看String类型出现与否。做运算,char类型进行转义,有String类型为连接操作。

代码演示2:

//输出*	*
System.out.println("*	*"); //正确
System.out.println('*' + '\t' + '*');//单引号为char字符, +表示的运算操作,结果int类型,表示数字
System.out.println('*' + "\t" + '*'); //正确, 字符串连接操作 
System.out.println('*' + '\t' + "*");//先运算,结果int类型的,再进行连接
System.out.println('*' + ('\t' + "*"));//正确, 先括号执行,是连接操作
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java智慧阁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值