变量介绍
为什么需要变量?
- 一个程序就是一个世界,世界上拥有什么东西,在程序里就会体现
- 变量是程序的基本组成单位
变量有三个基本要素,类型+名称+值
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);
}
}
变量的注意事项
- 变量表示内存中的存储区域,类型不同,占用的空间大小不同
- 该区域有自己的名称和类型
- 变量必须先声明,在使用
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; // 对
}
}
+号的使用
- 当左右两边都是数值时,则做加法运算
- 当左右两边有一方是字符串,则拼接运算
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);
}
}
数据类型
- java的数据类型分两种,一种是基础数据类型,引用类型
- 基本数据类型有8种,byte 1, short 2, int 4, long 8, float 4, double 8, char12, boolean 1
- 引用类型,类,接口,数组
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);
}
}