变量
变量的基本概念
声明变量的本质就是在内存中申请一个存储单元
存放数据内容大小不同,存储单元大小也不同,使用数据类型加以描述,为了下次访问墟制定名字,用于记录该变量对应的存储单元。
变量的声明方式
数据类型 变量名=初始值;
其中=初始值可以省略,但;不可以省略
/*
编程实现变量的声明和使用
*/
public class Vartest{
public static void main(String [] args){
//1、声明一个变量并初始化 数据类型 变量名=初始值;
int age=18;
//2、打印变量的数值 +字符串连接符 用于将两边的内容拼接/连接起来结果还是字符串
System.out.println("年龄="+age);//age=18
System.out.println("-------------------------------------");
//3、使用变量的注意事项
//3.1使用变量之前需要声明
//System.out.println("name="+name);//错误,找不到符号
//3.2使用变量之前需要初始化
//String name'
//System.out.println("name="+name);//错误;可能尚未初始化变量name
String name="帅比";
System.out.println("name="+name);//name=陈雨
//3.3变量不能重复声明
//int age=17;//错误:已在方法main(String[])中定义/声明了变量
}
}
`
标识符的命名法则(笔试)
有数字、字母、下划线以及$等组成,其中数字不能开头。
不能使用java中的关键字,所谓关键字就是java语言用于表示特殊含义的单词。
区分大小写,长度没有限制但不宜过长。
尽量做到见名知义,支持中文但不推荐使用。
标识符可以给类、变量、属性、方法、包 起名字。
变量输入输出的案例实现
案例题目
提示用户从键盘输入自己的姓名和年龄信息并打印出来。
第一步 应该先准备两个变量,一个记录姓名,一个记录年龄
第二步 提示用户从键盘输入姓名和年龄
第三步 将变量的数值打印出来
/*
编程实现变量的输入输出
*/
//导入java目录中util目录的Scanner类
import java.util.Scanner;
public class VarIOTest {
public static void main(String[] args){
//1.声明两个变量用于记录姓名和年龄信息
String name;
int age;
//2.提示用户从键盘输入姓名和年龄信息并放到变量中
System.out.println("请输入您的姓名和年龄信息:");
//创建一个扫描器来扫描键盘输入的内容 System.in 代表键盘输入
Scanner sc=new Scanner(System.in);
//通过扫描器读取一个字符串数据放入变量name中
name=sc.next();
//通过扫描器读取一个证书数据放入变量age中
age=sc.nextInt();
//3.打印变量的数值
System.out.println("name="+name);
System.out.println("age="+age);
}
}
优化
/*
编程实现变量的输入输出
*/
//导入java目录中util目录的Scanner类
import java.util.Scanner;
public class VarIOTest {
public static void main(String[] args){
//1.声明两个变量用于记录姓名和年龄信息
//String name;
//int age;
//2.提示用户从键盘输入姓名和年龄信息并放到变量中 变量随时用随时声明
System.out.println("请输入您的姓名和年龄信息:");
//创建一个扫描器来扫描键盘输入的内容 System.in 代表键盘输入
Scanner sc=new Scanner(System.in);
//通过扫描器读取一个字符串数据放入变量name中
String name=sc.next();
//通过扫描器读取一个整数数据放入变量age中
int age=sc.nextInt();
//3.打印变量的数值
//System.out.println("name="+name);
//System.out.println("age="+age);
System.out.println("name="+name+",age="+age);
}
}
数据类型
数据类型的分类
主要分为两大类
(1)基本数据类型
byte、short、int、long、float、double、boolean、char
(2)引用数据类型(了解)
数组、类、接口、枚举、标注
进制之间的转换
正十进制数转换二进制
a、除二取余法
b、拆分法
负十进制转换为二进制的方式
a、先将十进制的绝对值转换为二进制,然后进行按位取反再加1.
负数的需要补码:按位取反,再加1。
正负二进制数相加,高位溢出,丢弃。
负二进制转换为十进制的方式
a、先减1再按位取反,合并为十进制整数后再加上负号。
单个字节所能表示的整数范围(重中之重)
非负数所能表示的整数范围:0000 0000~0111 1111=>0127=>02……7-1
负数所能表示的整数范围:1000 0000~1111 1111=>-128-1=。-2^7-2^0
单个字节表示的范围是:-27~27-1,也就是-128~127.
整数类型
byte类型在内存空间中占1个字节,表示范围是:-27~27-1
short占2个字节,表示范围-215~215-1
int占4个字节,表示范围-231~231-1
long占8个字节,表示范围-263~263-1
在java中直接写出的整数数据叫做直接量/字面值/常量,默认为int类型。若希望表达更大的直接量,则在直接量的后面加上l或者L,推荐L。
整数类型的编程使用
/*
编程实现整数类型的使用
*/
public class IntTest1{
public static void main(String[] args) {
//1.声明一个byte类型的变量并初始化
byte b1=25;
//byte b1=250; //错误:不兼容的类型:从int转换到byte可能会有损失 250这样直接写出的整数数据叫做直接量/常量/字面值 默认为int类型
//2.打印变量的数值
System.out.println("b1="+b1);//b1=25
System.out.println("-----------------------------");
//3.声明一个short类型的变量并初始化
short s1=250;
//short s1=250250;//错误:不兼容的类型:从int转换到short可能会有损失
System.out.println("s1="+s1);//s1=250
System.out.println("-----------------------------");
//4.声明一个int类型的变量并初始化
int i1=250250;
//int i1=2502505006;//错误:整数太大 默认为int类型,这个数据自身已经出错
//int i1=2502505006L;//错误:不兼容的类型:从long转换到int可能会有损失
System.out.println("i1="+i1);//i1=250250
System.out.println("-----------------------------");
//5.声明一个long类型的变量并初始化,若描述比long类型还大的数据则使用java.math.BigInteger类型
long g1=2502505006L;
System.out.println("g1="+g1);//g1=250250500
}
}
整数类型的笔试考点
根据上述代码的long类型可以明白我们为什么标识符不能用数字开头。
请问下面的代码是否有错误?若有请指出并说明原因
int i2=25;
byte b2=i2;
System.out.println(“b2=”+b2);
发生报错,直接量数据类型可以直接判断是否在范围里,而这段代码i2并不是一个直接量,而是一个变量,byte不能判断是否在范围内,只能报错。
浮点类型
java中用于描述小数的类型就是浮点类型,包括float、double,推荐使用double类型
其中float类型占4个字节,称为单精度浮点数,可以表示7位有效数字,范围 -3.403E38~3.403E38。
double占8个字节,双精度浮点数,可以表示15位有效数字,范围-1.798E308~1.798E308。
java中直接写出的小数数据叫做直接量,默认为double类型,若希望表达float类型的直接量,则需要在直接量的后面加上f或者F。
/*
编程实现浮点类型的使用
*/
public class DoubleTest{
public static void main(String[] args){
//1.声明一个float类型的变量并初始化
//float f1=3.1415926;//错误:不兼容的类型: 从double转换到float可能会有损失 小数数据叫做直接量,默认为double类型
float f1=3.1415926f;
//2.打印变量的数值
System.out.println("f1="+f1);//f1=3.1415925 默认是7位有效数字
System.out.println("-----------------------------");
//3.声明一个double类型的变量并初始化
double d1=3.1415926;
System.out.println("d1="+d1);//d1=3.1415926 一般是15位有效数字
System.out.println("-----------------------------");
//4.笔试考点
System.out.println(0.1+0.2);//0.30000000000000004 运算时可能 会有误差,若希望实现精确运算则借助java.math.BigDecimal类型
}
}
布尔类型
java中用于描述真假信息类型有:boolean,数值只有:true和false。
布尔类型在内存空间中所占大小没有明确的规定,可以认为是1个字节。
/*
编程实现布尔类型的使用
*/
public class BoolTest{
public static void main(String [] args){
//1.声明一个boolean类型的变量并初始化
boolean b1=true;
//2.打印变量的数值
System.out.println("b1="+b1);//b1=true
System.out.println("----------------------");
//3.修改变量b1的值=赋值运算符,用于将=右边的数据赋值给=左边的变量,覆盖变量中原来的数值
b1=false;
System.out.println("b1="+b1);//b1=false
System.out.println("----------------------");
//b1=1;//错误:不兼容的类型:int无法转换为boolean
}
}
字符类型
java 语言中用于描述单个字符的数据类型:char类型。如:‘a’、'中’等
占两个字节并且没有符号位,表示的范围是:0~65535,由于现实生活中很少有数据能够被单个字符描述,因此以后的开发中更多的使用由多个字符串起来组成的字符串,使用Steing类型加以描述,如:“hello”、“奇点”等。
计算机的底层只是别0和1组成的二进制序列,对于字符‘a’这样的团来说不满足改规则,因此改数据无法直接在计算机中存储,为了使得该数据能够存储起来就可以给该数据制定一个编号,然后将编号存储起来即可,该编号就叫做ASCII。
要求掌握的ASCII有:‘0’-48 ‘A’-65 ‘a’-97 空格-32 换行符-10
要求掌握的转义字符有:"-" ‘-’ \-\ \t-制表符 \n-换行符
Unicode字符集
java字符类型采用Unicode字符集编码。Unicode是世界通用的定长字符集,所有的字符都是16位。
/*
编程实现字符类型的使用
*/
public class CharTest{
public static void main(String [] args){
//1.声明一个char类型的变量并初始化
char c1='a';
//2.打印变量的数值
System.out.println("c1="+c1);//c1=a
System.out.println("对应的编号是:"+(int)c1);//表示将char强行转换为int类型并打印 97
System.out.println("--------------------------");
//2.声明一个char类型的变量并初始化
char c2=98;
System.out.println("c2="+c2);//c2=b
System.out.println("对应的编号是:"+(int)c2);
System.out.println("--------------------------");
//3.使用Unicode字符集来表示一下我的名字 奇点 对应的编号是\u5947\u70b9
char c3='\u5947';
char c4='\u70b9';
System.out.println("最终的结果是:"+c3+c4);//奇点
System.out.println("--------------------------");
//4.特殊字符的使用 双引号本身有两个含义:a.字符串的开头和结尾标志 b.双引号自身 \专一就是转换原有的含义
System.out.println("我想过过\"过过过过的生活!");// \"-"
System.out.println("我想过过\'过过过过的生活!");// \'-'
System.out.println("我想过过\\过过过过的生活!");// \\-\
System.out.println("我想过过\t过过过过的生活!");// \t-制表符
System.out.println("我想过过\n过过过过的生活!");// \n-换行符
}
}
基本数据类型的转换
方式:自动类型转换和强制类型转换。
自动:从小类型到大类型之间的转换。
long到float是小到大,虽然long8个字节,float4个字节,但是float的范围比long要大得多
强制:从大到小 语法格式:目标类型 变量名=(目标类型)源类型变量名;
强转有风险,操作需谨慎
/*
编程实现基本数据之间转换的使用
*/
public class TransformTest{
public static void main(String [] args){
//1.声明两个变量并初始化
byte b1=10;
short s1=20;
//2.打印变量的数值
System.out.println("b1="+b1);//b1=10
System.out.println("s1="+s1);//s=20
System.out.println("--------------------------");
//3.实现自动类型转换的使用
//表示将变量b1的数值赋值给变量s1,并覆盖变量s1中原来的数值,相当于从byte类型到short类型的转换,小到大 自动转换
s1=b1;
System.out.println("b1="+b1);//b1=10
System.out.println("s1="+s1);//s1=10
System.out.println("--------------------------");
//4.实现强制类型转换的使用
//表示将变量s1的数值赋值给变量b1,并覆盖变量b1中雨来的数值,相当于从short类型到byte类型的转换,大到小 强制转换
//b1=s1; //错误: 不兼容的类型: 从short转换到byte可能会有损失
s1=128; //故意加上该行代码 128:0000 0000 1000 0000 =>1000 0000=>0111 1111=>1000 0000=>128=>-128
b1=(byte)s1;
System.out.println("b1="+b1);//b1=10
System.out.println("s1="+s1);//s1=10
}
}