JAVA学习笔记(3)
提示:关于java系列的内容只是本人在老师的指导下和自学过程中的一些学习笔记,如果存在错误敬请批评指正!
文章目录
前言
提示:本文涉及变量,强制转换运算符及Java变量中的一些常见面试题等。
提示:以下是本篇文章正文内容,下面案例可供参考
1.变量中的测试(定义变量注意事项)
定义变量的注意事事项:
1)定义long类型必须在值的后面加上标记:
L或者l(一般都用L)
2)浮点类型默认的数据类型是double类型
所以定义float类型时在值后面加上F或者f(一般都用大写)
其他注意事项:
1)同一个变量,不能被定义多次(不能被重复定义),这是因为java是一个强类型语言(语言和格式是非常严谨的!(java语言))
2)实际开发中,不建议同一行上定义多个变量
3)方法定义中的变量:局部变量,它在使用之前必须进行初始化
方法定义中的变量:有两种初始化方法
1)要么定义变量的时候对变量进行初始化
数据类型 变量名 = 初始化值 ;
eg: int a = 1 ;
2)要么就先定义,然后在使用的时候再初始化(必须初始化!!!)
数据类型 变量名; //声明变量
变量名 = 初始化; //然后初始化了
eg:class Demo{
public static void main(String[] args){
int a = 1 ;
int b = 2 ;
Boolean temp ; //声明变量
if(a == b){
temp = true ; //变量初始化
}else{
temp = false ; //变量初始化
}
}
}
4)语句结束的时候,都是以分号结束的(必须是英文字符)
2.Java中的基本数据类型—默认类型提升(隐式转换)
默认数据类型提升:
1)byte short char三者之间不转换,但是分别自己参与运算时优先提升为int类型—long—float—double
2)boolean类型:不参与任何的运算!它只是描述
逻辑判断的结果(true/false)
3.JAVA中的强转类型转换(强转):不仅适用于基本类型/引用类型
当变量相加计算的时候,如果接收的类型范围小于计算结果的数据类型需要强制类型转换,让我们的数据进行类型匹配,防止出现(jvm提示不兼容的类型:)
显示转换(强制类型转换)----不仅适用于基本类型,引用数据类型(后期研究引用类型)
格式:目标数据类型 变量名 = (目标数据类型)(结果) ;
实际开发中,尽量避免强转类型转换,可能会造成数据精度损失
4.Java变量常见的面试题
面试题(考点:强制类型转换):
同一行定义了多个变量
byte b, b1 = 3,b2 = 4 ;
1)b = b1 + b2 ; //变量相加
2)b = 3+4 ; //两个常量相加
输出b的值
b = b1 + b2 编译失败
b = 3 + 4 可以成功
1)编译失败(原因分析)
因为byte,short,char三者之间不转换,一旦参与运算
优先提升为int
所以b1–先提升为int类型3
b2—提升为int类型的4
两个相加的结果为int类型的 7,而b的类型 byte,接收不了 所以需要强转类型转换
面试题(考点:byte取值范围)
byte b = 129 ;
在程序中,能编译通过吗?
如果不能,如何解决过,结果是多少,请阐述思路
解决方案:强转类型转换
格式:目标数据类型 变量名 = (目标数据类型)(结果);
//当前byte的值如果超出了范围 -128~127 :那么jvm的编译的时候就认为int类型了
byte b = int类型的 数据 ; ----需要强转类型转换
解决方案:byte b = (byte)129 ;
面试题:
1) 请描述下面的代码的含义:
float f = 12.34F ;
float f2 = (float)78.56 ;
double d = 12.78 ;
当前变量
f:本身就定义的是一个单精度类型 加了一个标记F
f2:是通过强制类型转换而来的,可能会造成数据的精度损失
格式: 目标类型 变量名 = (目标类型)(结果) ;
d变量:本身默认的double类型
2)关于字符串拼接符号
字符串+任何数据="新的字符串"
任何数据+字符串="新的字符串"
思考:要比较两个变量是否相等/求两个变量中的最大值/要计算他们的对某个数据的求余数/三个数据如何进行获取最大值呢?
5.运算符
1)算术运算符
算术运算符:+,-,*,/,%(模)
2)赋值运算符
赋值运算符:=
举例:int a = 10 ; 将10赋值给int类型的变量a
3)比较运算符(关系运算符)
关系(比较)运算符<,>,<=,>=,!=,==
拓展的算术运算符: ++ 和 – --
场景1:
单独使用
后期的循环语句for
for(int x = 0 ; x < 10 ; x ++){
}
结论:无论++或者–在数据的前面还是后面,都是对当前数据本身进行自增1或者自减1
场景2:
参与运算使用(笔试题中出现)
参与运算:
++或者- -如果在数据的前面,先自增或者自减,然后在参与运算!
++或者- -如果在数据的后面,先运算,然后在自增或者自减
++a:先自增,再参与运算
a++:先参与运算,再自增
赋值运算符:
基本的赋值运算符 :=
扩展的赋值运算符 :+=,-=,*=,/=,%= (它有自己的特点)
基本的赋值运算符 =
将等号右边的数据赋值给等号左边的变量
eg:
int x = 100 ; 意思:将100赋值给int类型的变量x
== 是用来进行判断的 两者不能等共同
扩展的赋值运算符:
特点:隐藏了强转类型转换
+=,-=,*=,/=,%=
eg: short s = 1 ;
s +=1 ; //扩展的赋值运算符:特点 隐藏了强转类型转换
//等价于: s = (short)(s+1) ;
4)逻辑运算符(重点: 进行逻辑判断)
逻辑运算符:
逻辑单与&,逻辑单或|,逻辑异或^,逻辑非!
基本的逻辑运算符
逻辑单与& (并列关系)
特点:有false,则false
逻辑单或| (或的关系)
特点: 有true,则true
逻辑异或^
特点: 相同则为false,不同则为true
==简单记忆:
男女关系问题
男男 :false
女女 :false
男女 : true
女男 : true
逻辑非!
特点:非true,则false;非false,则true
偶数个非是它本身!
重点:逻辑双与&&特点
面试题
逻辑双与&&和逻辑单与&有什么区别?
共同点:
都是表示并列关系,基本特点:有false,则false
不同点:
具有"短路"效果
逻辑双与&& 连接的表达式:如果左边是一个false,右边就不执行了!
5)位运算符
基本位与&,位或|,位异或^
<<,>>,>>> 移位符号
位运算符: 就是对当前这些数据进行计算的(补码进行计算的)
基本位运算符:
位与&: 有0则0
位或|: 有1,则1
位异或^: 相同则为0,不同则为1
有另一个特点(面试题考点)
一个数据被另一个数据如果位异或两次,其值是它本身!
~反码: 全部按位取反(0变1,1变0)
其他的位运算符:移位符号
<<:左移
>>:右移
>>>:无符号右移
面试官实际就是想问对位运算符的位异或的特点:
实现两个变量的数据进行交互
举例
int a = 10 ;
int b = 20 ;
最终要将a和b进行互换
方式1:使用中间第三方变量(最常用的一种方式:推荐使用第一种)
方式2:使用位异或的特点^:一个数据被另一个数据位异或两次,其值是它本身
6)三目(三元)运算符号
三元运算符---(三目运算符)
二目运算符 int m =20,n =10;
单目运算符 int a = 10 ;
三元运算符的格式
(表达式)?执行 true的结果:执行false 的结果;
表达式:可以简单可以非常复杂
流程:
首先判断表达式是否成立,如果成立,则执行true的结果
否则,执行false的结果;
举例: 有两个变量 ,需要比较两个数据中的最大值;
比较较两个数据中的最大值
格式:(表达式)?执行 true的结果:执行false 的结果;
定义最终结果变量
方式1:定义中间变量
方式2:三元运算符是可以嵌套的 (一步走)
`
6.键盘录入数据----让程序更灵活一些
在写程序的过程中,想让程序更加灵活,使用Scanner类:
jdk提供的这个类----作用 "一个简单的文本扫描器"
目前:就是录入int类型数据
操作步骤
1)导包 import(关键字) java.util.Scanner ; 格式必须class类上面
需要在我当前的代码中使用jdk提供的这个类Scanner
2)创建一个文本扫描器对象 (键盘录入对象)
固定格式
Scanner 对象名(自己起名字) = new Scanner(System.in) ;
3)友情提示并录入int类型数据
System.out.println("请您输入一个数据:") ;
表示:录入的是int类型数据
int 接收的变量名 = 对象名.nextInt() ; //nextInt() ;键盘录入Scanenr的方法
4)然后 "接收的变量名 "输出出来"