• 4Java基础变量


    变量介绍

    为什么需要变量?

    • 一个程序就是一个世界,世界上拥有什么东西,在程序里就会体现
    • 变量是程序的基本组成单位
      变量有三个基本要素,类型+名称+值
      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);
    	}
    }
    
  • 相关阅读:
    java内部私有类的构造函数
    java 日志
    java Random.nextInt()方法
    迭代器是快速失败的
    java Calendar
    java null?
    EclEmma
    Java泛型、泛型协变&&类型擦除
    java 声明实例化初始化三连
    写在Ruby之前。
  • 原文地址:https://www.cnblogs.com/jly1/p/15616895.html
Copyright © 2020-2023  润新知