第二章 Java编程基础概念
1.Java基本数据类型和基本类型的类包装?
Java基本数据类型
基本数据类型有八种可以分为三类: 字符类型:char 布尔类型:boolean 数值类型:byte,short,int,long,float,double 数值类型又可以分为整数类型:byte,short,int,long 浮点数类型:float,double 按精度从低到高排序:byte short char int long float double
数据类型说明
数据类型 | 大小 | 取值范围 |
byte | 1字节8位 | -128~+127 |
int | 4字节32位 | -2147483648(-231) ~ + 2147483647(231-1) |
short | 2字节16位 | -32768 (-215) ~ + 32767 (+215-1) |
long | 8字节64位 | -263 ~ + 263-1 |
float | 4字节32位浮点数 | 1.4E-45 ~ 3.4E+38 , -1.4E-45 ~ -3.4E+38 |
double | 8字节64位浮点数 | 4.9E-324 ~ 1.7E+308, -4.9E-324 ~ -1.7E+308 |
基本数据类型有什么好处?
在Java中,new一个对象是存储在堆里的,通过栈中的引用来使用这些对象,所以对象本身是比较消耗资源的,对于我们经常需要使用到的类型,比如int,若每次使用时都需要new一个对象,这样就消耗资源,Java提供了基本数据类型,这样数据的变量不需要再通过new对象来创建,同时也不会在堆上创建,而是直接在栈内存中存储,因此会更加高效。
自动类型转换规则和强制类型转换规则
规则1:如果一个操作数为double型,则整个表达式可提升为double型 规则2:满足自动类型转换的条件 两种类型要兼容 数值类型(整型和浮点型)互相兼容 目标类型大于源类型: 例如:double 型大于 int 型 1.小类型与大类型进行运算的时候,会默认转成大类型 2.大类型接收小类型的时候,小类型默认转成大类型 3.小类型接收大类型的时候,需要强制类型转换 4.强制类型转换有可能造成溢出问题,会舍弃精度
包装类和基本数据类型的对应关系
基本数据类型 | 包装类 |
byte | Byte |
boolean | Boolean |
short | Short |
char | Character |
int | Integer |
long | Long |
float | Float |
double | Double |
2.Java基本语法?
基础语法
大小写敏感 类名:所有类来说,首字母应该大写 包名:尽量保证小写 方法名:首字母需要小写,后面每个单词字母都需要大写
方法的定义
修饰符:public static 返回值类型为:void,则表示没有返回值 参数列表:方法在运算过程中的未知数据,调用者调用方法时传递 return:将方法执行后的结果带给调用者,方法执行到return,整体方法运行结束
形参和实参的区别 形参:在定义函数名和函数体时,使用的参数 目的是用来接收调用该函数时传入的参数,在调用函数时,实参将赋值给形参 实参:可以是常量,变量,表达式,函数等
标识符与关键字
标识符:用来标识类名,变量名,方法名,类型名,数组名,文件名的有效字符序列称为标识符。 关键字:关键字就是Java语言中已经被赋予特定意义的一些单词。
运算符
赋值运算符 变量名 = 表达式; 表达式就是符号(如加号、减号)与操作数(如b,3等)的组合 算数运算符 基本的算术运算 +、-、*、/、%、++、-- 复合算术运算符 +=、-=、*=、/=、%=
关系运算符
运算符 | 含义 | 范例 | 结果 |
== | 等于 | 5==6 | false |
!= | 不等于 | 5!=6 | true |
> | 大于 | 5>6 | false |
< | 小于 | 5<6 | true |
>= | 大于等于 | 5>=6 | false |
<= | 小于等于 | 5<=6 | true |
=为赋值运算符,==为等于运算符 关系表达式的结果为布尔值 >、<、>=、<= 运算符的优先级别高于==、!= 、<、>=、<=运算符只支持数值类型的数据比较
逻辑运算符
运算符 | 含义 | 运算规则 |
&& | 短路与 | 两个操作数都是true,结果才是true |
|| | 短路或 | 两个操作数一个是true,结果就是true |
! | 非 | 操作数为true,结果为false |
! | 非 | 操作数为false,结果为true |
如果第一个操作数已经能确定表达式的值,第二个操作数就不必计算了; 优先级别 ! > && > ||
运算符优先级
单目运算符包括! ++ --,优先级别高 优先级别最低的是赋值运算符 可以通过()控制表达式的运算顺序,()优先级最高 从右向左结合性的只有赋值运算符、三目运算符和单目运算符 算术运算符 > 关系运算符 > 逻辑运算符
3.Java中的各种变量?
用static来定义变量
只能是类变量,或者说静态变量,而且其定义位置只能在类中,方法霍代码块外,变量的副本只有一个。
不用static来声明变量,则有三种变量的叫法
定义在构造方法,代码块,方法外的变量被称为实例变量,实例变量的副本数量和实力的数量一样。 定义在方法,构造方法,代码块内的变量被称为局部变量。 定义在方法参数中的变量被称为参数。
4.if-else代码优化的N种方案?
基本的if选择结构
if选择结构是根据条件判断结果选择不同的处理
使用if-else选择结构
if ( 条件 ) { //代码块1 }else { //代码块2 }
为什么使用多重if选择结构
单个if选择结构无法完成 多个if选择结构麻烦且效率低 if ( score>=80) { //代码块1 } else if score>=60) { //代码块2 } else { //代码块3 }
嵌套if选择结构
嵌套if控制语句可以通过外层语句和内层语句的协作,增强程序的灵活性 if(条件1) { if(条件2) { 代码块1 } else { 代码块2 } } else { 代码块3 }
优化方案一:提前return,去除不必要的else 优化方案二:使用条件三目运算符 优化方案三:使用枚举 优化方案四:合并条件表达式 优化方案五:使用Optional 优化方案六:表驱动法 优化方案七:优化逻辑结构,让正常流程走主干 优化方案八:策略模式+工厂方法消除if else 优化方案九:策略模式+反射解决方法