在JAVA中,我们需要记录一些数据
但这些数据的值是不固定的,总在变,我们可以把这些数据理解为变量。
我们通过三个元素来描述变量:变量类型 变量名以及变量值。
定义变量的两种格式:
格式一:声明变量时并且赋值:int age = 18;
格式二:先声明变量:String tel ; 然后给变量赋值:tel = 119;
注意:
-
变量名必须是一个有效的标识符
-
变量名不可以使用java关键字
-
变量名不能重复
在程序运行过程中,值一直不会改变的量成为常量。(后续会进一步学习,略…)
============================================================================
变量要保存值,这个值是存在内存中的,所以就需要向内存申请存储空间
java是一个强类型的语言
为了方便内存管理系统根据变量类型更加合理的分配内存空间
会把我们常见的数据,分成不同类型
不同类型分配的内存大小是不同的,这个大小的单位就是字节Byte
拓展:常用的转换关系:
位 bit,来自英文bit,音译为“比特”,表示二进制位。
1 Byte = 8 Bits (1字节 = 8位)
1 KB = 1024 Bytes 1 MB = 1024 KB 1 GB = 1024 MB
创建包: cn.tedu.basic
创建类: TestInfo.java
需求: 在控制台打印: java架构师今年20岁,月薪100000.99,感慨java是世界上最好的语言
package cn.tedu.basic;
/*本类用于完成个人信息输出案例/
public class TestInfo {
//1.添加程序的入口函数main()
public static void main(String[] args) {
/*1.定义变量的规则:变量的类型 变量名 变量的值/
/*2.String是字符串类型,用来保存多个字符/
//2.定义变量
String name = “泡泡”;//定义一个String变量用来保存姓名"江江"
int age = 16;//定义一个age变量用来保存年龄16
double salary = 100000.66;//定义一个变量salary用来保存工资
//3.我们可以通过打印语句查看变量的值
System.out.println(name);
System.out.println(“java架构师”+name+“,今年”+age+“岁,月薪”+salary+“,感慨Java是世界上最好的语言!”);
}
}
创建包: cn.tedu.basic
创建类: TestTypeScope.java
package cn.tedu.basic;
/*本类用于测试基本类型/
public class TestTypeScope {
//1.创建程序的入口函数
public static void main(String[] args) {
/*1.整形类型:byte short int long/
/**2.Java给8大基本类型都提供了类型对应的“工具箱”*/
/*3.int类型的工具箱比较特殊,叫做:Integer/
//2.定义对应类型的变量:格式:类型 名字 = 值 ;
byte byteMin = Byte.MIN_VALUE;
byte byteMax = Byte.MAX_VALUE;
System.out.println(“byte类型的最小值为:” + byteMin);
System.out.println(“byte类型的最大值为:” + byteMax);
short shortMin = Short.MIN_VALUE;
short shortMax = Short.MAX_VALUE;
System.out.println(“short类型的最小值为:” + shortMin);
System.out.println(“short类型的最大值为:” + shortMax);
int intMin = Integer.MIN_VALUE;
int intMax = Integer.MAX_VALUE;
System.out.println(“int类型的最小值为:” + intMin);
System.out.println(“int类型的最大值为:” + intMax);
long longMin = Long.MIN_VALUE;
long longMax = Long.MAX_VALUE;
System.out.println(“long类型的最小值为:” + longMin);
System.out.println(“long类型的最大值为:” + longMax);
/*4.浮点类型 :float double/
float floatMin = Float.MIN_VALUE;
float floatMax = Float.MAX_VALUE;
System.out.println(“float类型的最小值为:” + floatMin);
System.out.println(“float类型的最大值为:” + floatMax);
double doubleMin = Double.MIN_VALUE;
double doubleMax = Double.MAX_VALUE;
System.out.println(“double类型的最小值为:”+ doubleMin);
System.out.println(“double类型的最大值为:”+ doubleMax);
/**5.boolean布尔类型只有两个值true与false
- 虽然true和false不是关键字,但是也不可以用作标识符*/
boolean b1 = true;
boolean b2 = false;
/**6.测试char 字符类型
-
字符型的数据需要使用单引号 ’ ’ 来包裹
-
char类型可以存数字,但是会从ASCII码表查出这个数字对应的字符来打印
-
128~65535这些数字,也可以保存,但是eclispe一般显示为?*/
char c1 = ‘a’;//字符型可以保存一个字母
char c2 = ‘中’;//字符型还可以保存一个汉字
char c3 = ‘7’;//字符型可以保存一个字符7
char c4 = 97;//字符型可以保存数字,但是会查ASCII,打印的是字符a
char c5 = 55;//字符型可以保存数字,但是会查ASCII,打印的是字符7
char c6 = 199;
System.out.println(c1);
System.out.println(c2);
System.out.println(c3);
System.out.println(c4);
System.out.println(c5);
System.out.println(c6);
}
}
需求:求出指定半径圆的面积
公式:圆的面积:π * r * r
创建包: cn.tedu.basic
创建类: TestCircleArea.java
package cn.tedu.basic;
import java.util.Scanner;
/*本类用于求圆形的面积/
public class TestCircleArea {
//1.创建程序的入口函数main()
public static void main(String[] args) {
/*等号右边的值赋值给等号左边的变量来保存/
//1.提示用户输入圆的半径:
System.out.println(“请您输入要求的半径值:”);
/*变量的第二种定义方式:先定义,再赋值/
//2.1定义一个变量用来保存圆的半径
//double r = 5.5;
double r ;
//2.2接收用户在键盘上输入的数据,并把这个数据交给r保存
//开启扫描(发出一个系统指令,准备接收控制台输入的数据)
//nextDouble()控制用户只能输入double类型的数据,否则报错
r = new Scanner(System.in).nextDouble();
//根据半径值求出圆的面积
double circleArea = 3.14 * r * r;
//打印计算的结果
System.out.println(“圆的面积是:”+circleArea);
}
}
需求: 接收用户输入的两个值:假设a=1,b=2,并将这两个变量的值进行互换
创建包: cn.tedu.basic
创建类: TestValueExchage.java
package cn.tedu.basic;
import java.util.Scanner;
/*本类用于练习值交换案例/
public class TestValueExchange {
//1.创建程序的入口函数main
public static void main(String[] args) {
//2.提示并接受用户在控制台输入的两个整数
System.out.println(“请输入要交换的第一个整数:”);
int a = new Scanner(System.in).nextInt();
System.out.println(“请输入要交换的第二个整数:”);
int b = new Scanner(System.in).nextInt();
System.out.println(“a的值:”+a);
System.out.println(“b的值:”+b);
//3.交换 a b 这两个变量保存的值
int t;//定义一个变量用来辅助值交换
t = a;//把a的值交给t来保存
a = b;//把b的值交给a来保存
b = t;//把t的值交给b来保存
System.out.println(“交换后,a的值:”+a);
System.out.println(“交换后,b的值:”+b);
}
}
除了基本类型以外的所有类型都是引用类型
目前我们只遇到了String字符串类型,需要用双引号包裹
引用类型是一个对象类型,值是什么呢?
它的值是指向内存空间的引用,就是地址,所指向的内存中保存着变量所表示的一个值或一组值。如:类,接口,数组,后面讲。。。
(后续会进一步学习,略…)
====================================================================================
也就是说,我们只要写一个整数,就被认为是int类型
int x = 99999;
//byte y = 300;//错,300是int类型,byte存不下
//int z = 999999999999;//错,虽然是int类型,但是超出范围
long h = 999999999999L;//如果要定义long类型需要加后缀L
也就是说,我们只要写一个小数,就被认为是double类型
double d = 3.14;
//float f = 3.14;//错,3.14认为自己是double类型
float f = 3.14F;//如果要定义float类型需要加后缀F
double d2 = 3D;//如果要定义的小数是整数,最好加D方便阅读
3.3 byte,short,char三种比int小的整数可以用范围内的值直接赋值
byte b1=127;//对,
byte b2=128;//错,超出byte的范围
char c1=97;//对,对应的是码表中的’a’
char c2 =69999;//错,超出char的范围
long x =99999999999L;//字面值是int类型,需转成long类型的数据,加字面值后缀L即可
float b = 3.0F;//3.0字面值是double类型,加后缀F会变成float类型
double d = 3D;//3字面值是int类型,加后缀D,会变成double类型
0b - 标识这是2进制 ,如:0b0101
0 - 标识这是8进制, 8进制是三位,如: 023
0x - 标识这是16进制,如: 0x0001
//10进制,底数为10:10^2 10^1 10^0 =100+0+0=100
System.out.println(100);//默认10进制,打印100
//2进制,底数为2:2^2 2^1 2^0 =4+0+0=4
System.out.println(0b100);//2进制,打印4
//8进制,底数为8:8^2 8^1 8^0 =64+0+0=64
System.out.println(0100);//8进制,打印64
//16进制,底数为16:16^2 16^1 16^0 =256+0+0=256
System.out.println(0x100);//16进制,打印256
=================================================================================
箭头开始的地方是小类型,箭头指向的地方是大类型
我们此处所指的"大"和"小",指的是对应类型的取值范围,不是字节数哦
byte m = 120;
int n = m;//小转大,右面的m是小类型,给左面的n大类型赋值,可以直接使用
float f = 3.2f; double d = f; -->可以执行
容量大的类型转换为容量小的类型时必须使用强制类型转换。
int x = 999;
byte y =(byte)x;//大转小,右面x给左面的y小类型赋值,不可以,需要强制类型转换
- 转换过程中可能导致溢出或损失精度
例如:int i =128; byte b = (byte)i; //打印的结果是-128
因为 byte 类型是 8 位,最大值为127,所以当 int 强制转换为 byte 类型时,值 128 时候就会导致溢出。
- 浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入
例如:float f = 32.7f; int a2 =(int) f; //打印的结果是32
- 不能对boolean类型进行类型转换。