4-Java基础-变量

变量介绍

为什么需要变量?

  • 一个程序就是一个世界,世界上拥有什么东西,在程序里就会体现
  • 变量是程序的基本组成单位
    变量有三个基本要素,类型+名称+值
    int a = 1;
public class Var01{

	public static void main(String[] args) {
		
		// 声明变量
		int a;
		a = 100;
		System.out.println(a);

		// 还可以这样声明
		int b = 800;
		System.out.println(b);
	}
}

变量的类型

public class Var02{
	public static void main(String[] args) {
		// 记录人的信息
		int age = 20;
		double score = 88.9;
		char gender = '男';
		String name = "king";

		// 输出信息
		System.out.println("人的信息如下:");
		System.out.println(name);
		System.out.println(age);
		System.out.println(gender);
		System.out.println(score);


	}
}

变量的注意事项

  1. 变量表示内存中的存储区域,类型不同,占用的空间大小不同
  2. 该区域有自己的名称和类型
  3. 变量必须先声明,在使用
public class VarDetail{

	public static void main(String[] args) {
		
		// 变量必须先声明,后使用,既有顺序
		int a = 50;
		System.out.println(a); // 50
		// 该区域的值可以在同一范围内不断变化
		// a = "jack"; // 报错
		a = 88;
		System.out.println(a);

		// 变量在同一作用域不能重名
		// int a = 77; // 报错
		// 变量三要素:变量名+类型 + 值
		
	}
}

class Dog {
	public static void main(String[] args) {
		
		int a = 666; // 对
	}
}

+号的使用

  1. 当左右两边都是数值时,则做加法运算
  2. 当左右两边有一方是字符串,则拼接运算
public class VarStr{

	public static void main(String[] args) {
		
		System.out.println(100 + 98);
		System.out.println("98" + 100);
		System.out.println(100 + 3 + "hello");
		System.out.println("hello" + 100 + 3);
	}
}

数据类型

  1. java的数据类型分两种,一种是基础数据类型,引用类型
  2. 基本数据类型有8种,byte 1, short 2, int 4, long 8, float 4, double 8, char12, boolean 1
  3. 引用类型,类,接口,数组
public class IntDetail{

	public static void main(String[] args) {
		
		// Java整型变量默认值为 int 类型,声明long类型需要加L或者l
		// 
		int n1 = 1;
		// int n2 = 1L; 不对, 报错因为1L是long类型,不能转化为int类型
		// 意味着用long,则需要在后面在L,可以不加是自动转化为long类型
		long n3 = 1L;

		
	}
}

浮点数的注意事项


public class FloatDetail{

	public static void main(String[] args) {
		
		// java 浮点类型默认是double, 声明float需要加f, 或者F
		// float num1 = 1.1 // 不对,错误的,因为浮点数默认是double
		float num2 = 1.1F;
		double num3 = 1.1; 
		double num4 = 1.1F; // 对
		//
		// 十进制形式,
		double num5 = .123; // 等价0.123
		System.out.println(num5);
		// 科学记数法 5.12e2;
		System.out.println(5.12e2);
		System.out.println(5.12e-2);
		// 通常情况下,应该使用double,double 类型精度到15位,float类型精度到7位
		double num9 = 2.1234567851;
		float num10 = 2.1234567851F;
		System.out.println(num9);
		System.out.println(num10);

		// 只要是浮点数就是不精确的
		// 看看下面代码
		double num11 = 2.7;
		double num12 = 8.1 / 3;
		System.out.println(num11);
		System.out.println(num12);
		if (num11 == num12) {
			System.out.println("num11 == num12相等");
		}

		// 判断两个浮点数相等,我们应该判断两个差值的绝对值在一个很小的精度
		// 正确的做法
		if(Math.abs(num11 - num12) < 0.000001)
			System.out.println("差值很小,两个数据认为相等");
		
		System.out.println(Math.abs(num11 - num12));
	}
}

Java类的组织形式


包可以理解为文件夹
包->类->方法
Char注意事项

public class Char01{
	public static void main(String[] args) {
		
		char c1 = 'a';
		char c2 = '\t';
		char c3 = '韩';
		char c4 = 97;

		System.out.println(c1);
		System.out.println(c2);
		System.out.println(c3);
		System.out.println(c4); // 当输出c4,输出的是97代表的字符
		

	}
}

https://tool.chinaz.com/Tools/unicode.aspx

public class CharDetail{

	public static void main(String[] args) {
		// 在java中,char本质上是一个整数,在输出时时unicode编码对应的字符
		// 输出对应的数字,需要(int) 字符
		char c1 = 97;
		System.out.println(c1);

		char c2 = 'a';
		System.out.println((int)c2);
		char c3 = '韩';
		System.out.println((int)c3); // 38889
		char c4 = 38889;
		System.out.println(c4);

		// char 字符是可以进行运算的,相当于一个整数,因为他们对应有Unicode码
		System.out.println('a' +  10);

		// 课堂测试
		char c5 = 'b' + 1;
		System.out.println((int) c5);
		System.out.println(c5);

	}
}

编码

编码问题

ASCII码是一套标准,具体的编码是ISO-8895

Unicode编码是一套标准,Unicode所有字符都是两个字节,常见的编码是UTF-8,使用1-6个字节进行编码

编码不仅仅指的是变量类型的编码,而是文件的编码,也就是说我们编码保存的文件在底层是按照0-1保存的,不同的编码方式对应不同的解析
这也就是在windows下,为什么utf-8不行,因为dos是按照gbk解析这个文件,但是文件的编码时utf-8,也就是驴头不对马嘴,这也就理解了为什么在内存中或者传输中使用的是utf-8,因为这样字母是1个字节,节省空间,但是在本地是按照Unicode编码进行保存在磁盘上,因为保存的信息够全。

boolean 类型

  • 使用细节说明
    不能通过0或者非0的整数代替false 和 true, 这点和C语言不同
public class Boolean01{
	public static void main(String[] args) {
		//演示判断成绩是否通过的案例
		// 定义一个布尔变量
		boolean isPass = false;

		if(isPass == true){
			System.out.println("考试通过,恭喜");
		} else{
			System.out.println("考试没有通过,下次努力");
		}

	}
}

数据类型转换

  • 自动类型转换

    精度小的可以自动转换为精度大的数据类型,但是反过来是不行的
  • 自动转换的注意和细节

    java是强类型的语言,所以保持较高的健壮性
public class AutoConvertDetail{

	public static void main(String[] args) {
		
		//细节1 多种类型数据混合运算,自动转换为容量大的,在计算
		int n1 = 10;
		double d1 = n1 + 1.1; //正确
		// 细节2:精度大的赋值给精度小的,就会报错
		// float d1 = n1 + 1.1; // 报错,因为n1 + 1.1是double类型,double类型不能自动转换为float类型
		float d2 = n1 + 1.1F; // 正确


		System.out.println(d1);

		// 细节3:byte 和 short 和 char 不能自动转换
		// 当把数据赋值给byte时,先判断是否在byte范围内
		byte b1 = 10;
		int n2 = 1; // n2 是 int 类型
		// byte b2 = n2; // 错误的,如果是变量赋值,判断类型
		// char c1 = b1; // 错误的,因为byte和char不能自动转换

		// 细节4:byte,short和char可以相互计算,计算时首先转换为int
		byte b3 = 1;
		byte b4 = 1;
		short s1 = 1;
		// short s2 = b3 + s1; // 报错,因为结果是int
		int s2 = b3 + s1;

		// byte b5 = b3 + b4; // 报错,只要是byte参与运算,结果就是int类型

		// 细节5:boolean 不参与转换
		boolean pass = true;
		// int num100 = pass; // boolean 不参与类型的自动转换
		
		// 细节6:自动提升,表达式结果自动提升为最大的类型
		// 例子
		byte b6 = 1;
		short s3 = 10;
		int num200 = 1;
		double num300 = 1.1;

		float num500 = b4 + s3 + num200 + num300;// 报错
		double num500 = b4 + s3 + num200 + num300;


	}
}

强制类型转换

  • 强制类型转换,可能会导致精度降低或者溢出
public class ForceConvert{

	public static void main(String[] args) {
		
		// 演示强制转换
		int n1 = (int) 1.9;
		System.out.println("n1=" + n1); // 造成精度降低

		int n2 = 2000;
		byte b1 = (byte) n2;

		System.out.println(b1); // 造成数据溢出

	}
}
  • 强制转换的细节
public class ForceConvertDetail{
	public static void main(String[] args) {
		
		// 演示强制转换
		// 细节1: 强转只针对最近的操作数有效,往往使用小括号提升优先级
		// int x = (int) 10 * 3.5 + 6 * 1.5; // 编译错误
		int x = (int)(10 * 3.5 + 6 * 1.5);
		System.out.println(x);
		// char类型可以保存int的常量值,但是不能保存int的变量值
		char c1 = 100;
		int m = 100;
		// char c3 = m; //报错
		char c3 = (char)m;
		System.out.println(c3);

		// byte 和short类型计算的,当做int类型处理


	}
}

基本数据类型和String类型的转换

  • 介绍和使用
public class StringToBasic{

	public static void main(String[] args) {
		
		int n1 = 100;
		float f1 = 1.1F;
		double d1 = 4.5;
		boolean b1 = true;

		String s1 = n1 + "";
		String s2 = f1 + "";
		String s3 = d1 + "";
		String s4 = b1 + "";

		System.out.println(s1 + " " + s2 + "  " + s3 + " " + s4);

		// String转换为基本数据类型
		// 通过基本类型的包装类调用parse即可
		String s5 = "123";
		// 会在OOP上详细讲
		int num1 = Integer.parseInt(s5);
		double num2 = Double.parseDouble(s5);
		float num3 = Float.parseFloat(s5);
		long num4 = Long.parseLong(s5);
		byte num5 = Byte.parseByte(s5);
		boolean num6 = Boolean.parseBoolean("true");
		short num7 = Short.parseShort(s5);
		// char num8 = Char.parseChar(s5); //没有
		System.out.println(num1);
		System.out.println(num2);
		System.out.println(num3);
		System.out.println(num4);
		System.out.println(num5);
		System.out.println(num6);
		System.out.println(num7);
		// 怎么把字符串转为字符, 取字符串第一个字符
		System.out.println(s5.charAt(0));


	}
}
  • 注意事项
  • 字符串转换为基本数据类型,要保证数据有效,比如 hello 转换为 数字
  • 如果格式不正确,就会抛出异常,但是编译没有问题
public class StringToBasicDetail{

	public static void main(String[] args) {
		
		String str = "hello";
		// 转换为int
		int n1 = Integer.parseInt(str);
		System.out.println(n1);
	}
}
posted @ 2021-11-28 22:10  心远志高  阅读(39)  评论(0编辑  收藏  举报