1.常量以及常量的分类
常量:在程序的 执行过程中,其值不发生改变的量!
常量的分类:两大类——字面值常量和自定义常量
字面值常量:字符串常量、字符常量、整数常量、小数常量、布尔常量、空常量
字符串常量:使用双引号括起来的内容--- "hello","helloworld","我爱高圆圆,你们呢?"
字符串+任何数据="新的字符串" ? ? //此时的+是字符串拼接符号
任何数据+"字符串" = "新的字符串" //此时的+是字符串拼接符号
System.out.println("hello,高圆圆") ;
System.out.println("hello ? World ....") ;
System.out.println("hello"+7) ; //"hello"+7="hello7"
System.out.println("7"); //"7",字符串7,而非整数int 7
System.out.println(98+"=5+5") ;//98=5+5
字符常量:使用单引号括起来的单个内容 'a','b','0','A','B'
'ab':不行 jvm就认为是一个字符串
当字符不参与运算的时候:本身就是描述的就是字符本身的值
如果字符参与运算的时候,字符就会寻找对应的ASCII码表的值,进行运算!
System.out.println('A') ;
System.out.println('B') ;
System.out.println('C') ;
System.out.println('0') ;
System.out.println('A'+1) ;//此时的+是运算符符号
System.out.println('a'+1) ;
System.out.println('0'+1) ;
//'0'---ASCII码的值 :48 数字字符
//'A'---ASCII码的值 :65 大写字母字符
//'a'---ASCII码的值 :97 小写字母字符
整数常量:包括"进制",二进制,八进制,十进制(整数默认),十六进制
System.out.println(100) ;
System.out.println(9527) ;
System.out.println(19) ;
System.out.println(008) ; //此时八进制,八进制是以"0"开头
小数常量:
System.out.println(1.3415926) ;
System.out.println(1.34-12.56) ;
//减法/除法:小数计算(可能无限近似某个值,计算机的伪计算!)
//Jdk后期提供了一个类BigDecimal(小数的精确计算)
布尔常量:
System.out.println(true) ;
System.out.println(false) ;
空常量:null---引用数据类型的默认值就是null(特殊的引用String)
//Java数据类型--- 基本类型/引用类型
class Test{
public static void main(String[] args){
String s = null ; //引用类型
String s2 = "" ; //有内容,不过是空串
System.out.println(s) ;
System.out.println("s2:"+s2+"---") ; //"s2:"
}
}
自定义常量:(面向对象中讲解---final关键字)
2.变量以及变量的分类(重点/理解/识记)
变量:在程序的执行过程中,其值发生改变的量!
变量的三要素:
1)数据类型
2)变量名:按照标识符的组成规则: 遵循 "小驼峰命名法"
3)初始化值:如果变量使用之前都没有赋值,就"报错了"
格式
数据类型 变量名 = 初始化值 ;
int age = 20 ;
Java中的数据类型(重点):两大类——基本数据类型和引用数据类型
1)基本数据类型(四大类型,8种)
整数类型:默认int类型 ?
byte 字节类型 (占用的字节数1个字节) ? (-128~127:范围)
short 短整类型 (占用的字节数 2个字节)
int ? 默认类型 ? (占用的字节数 4个字节)
long ? 长整型 ? (占用字节数 8个)
实际开发中:整数使用最多int
其次long(以后用作定义时间--记录当前系统时间毫秒值(后期学习类---日期-->毫秒值))
//举例:jdk提供的 System类:里面有一个方法:获取当前系统时间毫秒值
public static long currentTimeMillis()
long time = System.currentTimeMillis() ;
System.out.println(time) ;
浮点类型:默认就是double类型 ? 实际开发中使用最多的就是double了! (举例:商品的价格(商城价格/市场价格)..)
float ? 单精度类型 (占4个字节)
double 双精度类型 (占8个字节)
字符类型
char 占两个字节数
char ch = 'A' ;
char ch = '我' ;
ch = 'A' ;
ch = '0' ;
System.out.println("ch:"+ch) ; ?//'0'
布尔类型 不参与运算(只是提供判断不和其他数据类型转换 ) (占1个字节)
boolean (true/false)
boolean flag = true ; //一般情况变量 flag(标记)
System.out.println("flag:"+flag) ;
2)引用数据类型:类,数组,接口(后期研究的方向)
定义变量的注意事项
1)定义long类型必须在值的后面加上标记:L或者l 这样就表示定义的是长整型的变量
? ? ? ? ? ? ? ? ? long l = 100000000000L; //建议使用L
System.out.println("l的值是:"+l) ;
2)浮点类型默认double,定义单精度float类型的时候,后面的值需要加上标记:F或者f即可!
float f = 12.56F;
System.out.println("f:"+f) ;
/*
面试题
同一行定义了多个变量
byte b, b1 = 3,b2 = 4 ;
1)b = b1 + b2 ; ? //变量相加
2)b = 3+4 ; //两个常量相加
输出b的值
问:
当前代码中 哪一句会编译失败,为什么,指出它的解决思路!
1)编译失败
为什么?因为byte,short,char三者之间不转换,一旦参与运算
优先提升为int
所以b1--先提升为int类型3
b2---提升为int类型的4
两个相加的结果为int类型的 7,而b的类型 byte,接收不了
所以需要强转类型转换
*/
class DataTypeTest{
public static void main(String[] args){
//同一行定义了多个变量
byte b, b1 = 3,b2 = 4 ;
//1)
//b = b1+ b2;//不兼容的类型: 从int转换到byte可能会有损失
//b = (byte)(b1+b2) ; //解决格式:强转
//System.out.println("b:"+b) ;
//2)
b = 3+4 ; //常量相加,先相加,然后看其的结果是否在byte类型 取值范围内,
//在的话,就直接赋值
//超过范围了 (默认整数int类型---强转解决)
System.out.println("b:"+b) ;
}
}
定义的时候的注意事项:
1)同一个变量,不能被定义多次(重复定义),这种情况是因为Java是一个强类型语言
强类型语言:语法和格式是非常严谨的! (Java语言)
若类型语言:JavaScript(前端Js)
js定义变量 var a = 10 ;(分号可以不写,var也可以不写)
2)实际开发中,不建议同一行上定义多个变量(不适合阅读)
一行同时定义多个变量(面试题/笔试题中出现居多)
3)方法定义中的变量:局部变量,它在使用之前必须进行初始化否则报错!
1)要么定义的变量的时候就初始化了
数据类型 变量名 = 初始化值;
2)要么就先去定义,然后在使用之前必须初始化
数据类型 变量名; //声明变量
变量名 = 初始化; //然后初始化了
4)语句结束,都是以"分号结束" ; (英文字符)
?
/*
定义两个变量
int a = 4 ;
byte b = 3 ;
两个变量要进行求和----数据在进行计算的时候,应该要保证数据类型一致!
Java中基本数据类型:存在概念
默认类型提升
byte,short,char三者之间不转换,但是分别自己参与运算的时候
优先提升为int(考点)---long---float---double
boolean类型:不参与任何的运算!它只是描述
逻辑判断的结果(true/false)
*/
class DataTypeDemo3{
public static void main(String[] args){
//定义变量变量
int a = 4 ; //int类型
byte b = 3 ;//byte类型
//两个数据求和
int result = a + b ; //变量相加了
//int result = a + b //先将一个字节的b---直接提升int----变成4个字节3
//结果数据类型:是int类型 = 四个字节的7(int类型)
System.out.println("result:"+result) ;//result:7
}
}
/*
定义两个变量
int a = 4 ;
byte b = 3 ;
现在的接收的结果类型的变量是byte类型,而且a和b要进行变量相加
当前我们变量相加计算的时候,如果接收的类型 范围小于计算结果的数据类型
需要使用Java的强转类型转换-----让我们的数据进行类型匹配,防止出现(jvm提示不兼容的类型:)
显示转换(强制类型转换)----
不仅适用于基本类型,引用数据类型(后期研究引用类型)
格式:
目标数据类型 变量名 = (目标数据类型)(结果) ;
实际开发中,尽量避免强转类型转换,可能会造成数据精度损失
*/
class DataTypeDemo4{
public static void main(String[] args){
//定义这俩个变量
int a = 4 ;
byte b = 3 ;
//结果类型byte
//b提示为int类型
//byte result = a + b ; //错误: 不兼容的类型: 从int转换到byte可能会有损失
// 目标数据类型 变量名 = (目标数据类型)(结果) ;
byte result = (byte)(a+b) ;
System.out.println("result的结果是:"+result) ;//result的结果是:7 (byte类型)
}
}
/*
面试题(考点:byte取值范围)
byte b = 129 ;
在程序中,能编译通过吗?
如果不能,如何解决过,结果是多少,请阐述思路
byte类型的取值范围
-128~127
*/
class DataTypeTest2{
public static void main(String[] args){
//定义一个变量
//byte b = 129 ; //错误: 不兼容的类型: 从int转换到byte可能会有损失
//解决方案:强转类型转换
//格式:目标数据类型 变量名 = (目标数据类型)(结果);
byte b = (byte)129 ;
System.out.println("b:"+b) ; //b:-127 程序运行出来的结果
}
}
/*
当前byte的值如果超出了范围 -128~127 :那么jvm的编译的时候就认为int类型了
byte b = int类型的 数据; ----需要强转类型转换
byte b = (byte)129 ;
129---jvm---int类型 4个字节 ---二进制(原码)
二进制(原码)
00000000 00000000 00000000 10000001
最高符号位 数值位 ? 原码---反码---补码:相同
0 0000000 00000000 00000000 10000001
byte b = (byte)129 ; 将补码进行截取---三个字节---变成byte类型 (1个字节)
(0 0000000 00000000 00000000) 10000001---
10000001---截取后的补码结果-----反码----原码(需要的结果)
最高符号位 数值位 ? ? ? 补码
1 0000001
- 1
-----------------------
1 0000000 反码
-----------------------
1 1111111 原码
- ?
=-64+32+16+8+4+2+1
=-127
*/
?
/*
面试题:
1) 请描述下面的代码的含义:
? float f = 12.34F ;
? float f2 = (float)78.56 ;
? double d = 12.78 ;
?
当前变量f:本身就定义的是一个单精度类型 加了一个标记F
f2:是通过强制类型转换而来的,可能会造成数据的精度损失
? 目标类型 变量名 = (目标类型)(结果) ;
?
? d变量:本身默认的double类型
?
2)关于字符串拼接符号
字符串+任何数据="新的字符串"
任何数据+字符串="新的字符串"
看以下程序,写成结果!
*/
?
class DataTypeTest3{
public static void main(String[] args){
System.out.println("hello"+'a'+1) ; //"hello"+'a'="helloa"+1 ="helloa1"
System.out.println('A'+1+"hello"+"world"+"JavaEE!");
//66+"hello"="66hello"+"world"="66helloworld"+"JavaEE!"="66helloworldJavaEE!"
System.out.println("-----------------------------") ;
System.out.println("5+5="+5+5) ;//"5+5=5"+5="5+5=55"
System.out.println(5+5+"=5+5") ; //10+"=5+5" = "10=5+5"
//int a = 10 ;
//System.out.println(a+"") ;
}
}
|