本帖最后由 znvoid 于 2018-4-2 22:50 编辑
通过十几天对java基础的学习,我对就java这门编程语言有了初步的了解和掌握
分享下我的笔记和总结
1、环境搭建
学好一门编程语言,对其开发环境的搭建掌握是必不可少的
JVM java虚拟机
JRE =JVM +类库 java运行时环境
JDK =JRE+java开发工具 java开发工具包
2、常量、变量
变量定义格式
数据类型 变量名 = 初始化值;
例: int a=10;
常量:它是在编译时期确定其值,后面不能改变其值。
3、数据类型:
基本数据类型
整数
byte 一个字节
short 两个字节
int 四个字节
long 八个字节
小数
float 4个字节
double 8个字节
字符
char 2个字节
布尔
boolean
引用数据类型
数组、对象
float double 在内存中存放结构(了解一下)
float一共32位,其结构定义如下:
|-------- 31 -------|------------ 30-23 ------------ |------------ 22-0 ------------|
符号位(sign) 指数部分(exp) 小数部分(mag)
sign:符号位就一位,0表示正数,1表示负数
exp: 指数部分,无符号正数
mag:小数部分,定点小数,小数点在最左边。
float的表达式 : pow(-1,sign) * (1+mag) * pow(2,exp-127)
----------------------------------------------------------------------------------
疑问:同类型数据(如两个byte)做运算其结果的类型可能不是前面数据的类型
byte b2 = 120+3;
它在编译前它们能确定其值。当你输入javac命令进行编译时java编译器默认为你进行强制转换为byte
byte b2 =(byte)(120+3);
byte b1 =12;
byte b2 =15;
byte b3 = b1+b2;不能编译通过,因为b1,b2为变量编译前无法知道它们确定的值
混合运算的时候,byte,short,char不会相互转换,都会自动将类型提升为int类型,其他类型进行混合运算时都是将小的数据类型提升为大的
4、算数运算
+ - * / % ++ --
加 减 乘 除 取余 自增 自减
注意点:
两个整数相除其结果还是整数
单独使用的时候,++或者--无论是放在变量的前面还是后面,结果是一样的
如果++或者--在变量的后面,先拿变量参与操作,后变量做++或者--
如果++或者--在变量的前面,先变量做++或者--,后拿变量参与操作
5、逻辑运算
& | ! ^
&& ||
与:& 有false则false
或:| 有true则true
异或:^ 相同则false,不同则true。(男女朋友)
非:! true则false,false则true
&&具有短路效果。左边是false,右边不执行,结果与&相同
||具有短路效果.左边是true,右边不执行,结果与|相同
三元运算符
关系表达式?表达式1:表达式2;
int c=a>b?a:b;
不能单独存在,结果必须被接收。关系表达式为真则返回表达式1,为假则返回表达式2
6、条件语句
if(关系表达式) {
语句体
}
执行流程:
首先判断关系表达式看其结果是true还是false
如果是true就执行语句体
如果是false就不执行语句体
switch(表达式){
case 值:
break;
default:
break;
}
表达式可以是 int short byte char String(jdk1.7)
case后面跟的是要和表达式进行比较的值,匹配成功则从此处执行,没有匹配的则从default 处执行
break 表示中断,结束的意思,可以结束switch语句,如果没有则会发生穿透现象。
7、循环语句
for(初始化语句;判断条件语句;控制条件语句){
循环体语句;
}
执行顺序:
1、初始化语句
2、判断条件语句 如果为真则执行3 否则结束循环
3、 循环体语句
4、控制条件语句
5 、跳到第二步
while(判断条件语句){
循环体语句;
}
执行顺序:
1、判断条件语句 真则走第2步 假就结束
2、循环体语句
3.、跳到第1步
do{
循环体语句;
}while(判断条件语句);
执行顺序:
1、do 中循环体语句
2、判断条件语句 真则走第1步 假就结束
8、跳转语句
break 跳出当前循环体
continue 结束本次循环跳到下次循环
return 结束方法
9数组
声明数组:数据类型[] 数组名;
数组赋值: 数组名=new 数组类型[数组长度];
数组名=new 数组类型[]{数据1,数据2,...};
数组进行初始化
* a:动态初始化 只指定长度,由系统给出初始化值
* int[] arr = new int[5];
* b:静态初始化 给出初始化值,由系统决定长度
int[] arr = new int[]{1,2,3,4,5};
简写:int[] arr = {1,2,3,4,5};
*c 不能动静结合的初始化 如int[] arr = new int[5]{1,2,3,4,5};编译不会通过
例子:int[] arr =new int[5];//动态初始化
int arr =new int[]{1,2,3,4,5};//静态初始化
int arr =new int[5]{1,2,3,4,5}; 错误的表示编译报错
二维、多维数组
int[][] arr=new int[m][n];
几个面试小题目
问:如下程序语句有什么问题吗?
short s1 = 1;
s1 = s1 + 1; //1
short s2 = 1;
s2 += 1; //2
答:对于注释 1 来说,在 s1+1 运算时会自动提升表达式的类型为 int,所以将 int 赋予给 short 类型的变量 s1 会出现类型转换错误(无法编译,IDE 提示错误),除非主动加上强转。对于注释 2 来说 += 是 java 语法规定的运算符,所以 java 编译器会对它进行转换特殊处理,故可以正确编译执行。
问:java 中 char 类型变量能不能储存一个中文的汉字,为什么?
答:java 的 char 类型变量是用来储存 Unicode 编码字符的,Unicode 字符集包含了汉字,所以 char 类型自然就能存储汉字,但是在某些特殊情况下某个生僻汉字可能没有包含在 Unicode 编码字符集中,这种情况下 char 类型就不能存储该生僻汉字了。
问:java 的 Integer 和 int 有什么区别?
答:int 是 java 内置基本数据类型之一,java 为每个基本类型都提供了一个封装类,Integer 就是 int 的封装类(也叫包装类型);int 变量的默认值为 0,Integer 变量的默认值为 null,所以 Integer 可以区分出未赋值和值为 0 的区别;Integer 类内部提供了一些关于整数操作的方法,例如上文用到的表示整数的最大值和最小值。
问:能否在不进行强制转换的情况下将一个 double 值赋值给 long 类型的变量?
答:不行,我们不能在没有强制类型转换的前提下将一个 double 值赋值给 long 类型的变量,因为 double 类型的范围比 long 类型更广,所以必须要进行强制转换。
问:java 中 float f = 3.4; 是否正确?
答:不正确,3.4 是双精度数,将双精度型(double)赋值给浮点型(float)属于向下转型(down-casting,也称为窄化)会造成精度损失,因此需要强制类型转换 float f = (float)3.4; 或者写成 float f = 3.4F; 才可以。
|
|