Java基础知识
一、Java基础0
1. JDK,JRE,JVM分别是什么?
JDK:Java Development Kit的缩写;
JRE:Java Runtime Environment的缩写,意为Java运行时环境,它包含虚拟机但不包含编译器;
JVM:Java Virtual Machine(Java虚拟机)的缩写。Java虚拟机是一个可以执行Java字节码的虚拟机进程。Java源文件被编译成能被Java虚拟机执行的字节码文件。
JDK和JRE的区别:
JRE是Java Runtime Environment的缩写,意为java运行时环境,包含了java虚拟机,java基础类库。是使用java语言编写的程序运行所需要的软件环境,是提供给想运行java程序的用户使用的,还有所有的Java类库的class文件,都在jre的lib目录下,并且都打包成了jar。
JDK是Java Development Kit的缩写,意思是java开发工具包,是程序员使用java语言编写java程序所需的开发工具包,是提供给程序员使用的。JDK包含了JRE,同时包含了编译java源码的编译器javac,以及java程序调试和分析的工具软件:jconsole,jvisualvm等,还包含了java程序编写所需的文档和demo程序。
2. Java语言是跨平台的吗?JVM是跨平台的吗?
Java语言与操作系统无关,是跨平台运行的;JVM不能跨平台,不同平台需要安装对应的版本才能运行,但是JVM确保了Java的跨平台性,是它将java的字节码文件翻译成与系统平台对应的机器码。
3. 环境变量path和classpath的区别?
path用来指定可执行文件的路径,如果要执行的可执行文件不在当前目录下,系统就会搜索path中设置的路径;
classpath是指定你在程序中所使用的的类文件的路径,就是告诉编译器去哪找这个类。
4. 一个”.java“源文件中是否可以包括多个类(不是内部类)?有什么限制?
可以。必须只有一个类名与文件名相同。
二、Java基础1
1. 数据类型
(1) Java是一种强类型语言,针对每种数据都提供了对应的数据类型。
(2) 分类:
A:基本数据类型:4类8种
B:引用数据类型:类,接口,数组。
(3) 基本数据类型
| A:整数 | 占用字节数 |
| byte | 1 |
| short | 2 |
| int | 4 |
| long | 8 |
| B:浮点数 | |
| float | 4 |
| double | 8 |
| C:字符 | |
| char | 2 |
| D:布尔 | |
| boolean | 1 |
注意:
整数默认是int类型,浮点数默认是double。
长整数要加L或者l,如果在int范围内,则可以不加L或l但还是建议加L。
单精度的浮点数要加F或者f。
2. 数据类型转换
(1)boolean类型不参与转换
(2)默认转换
A: 从小到大
B: byte,short,char --> int --> long --> float --> double
C: byte,short,char之间不相互转换,直接转成int类型参与运算。
(3)强制转换
A:从大到小
B:可能会有精度的损失,一般不建议这样使用。
C:格式:
目标数据类型 变量名 = (目标数据类型) (被转换的数据);
(4)思考题:
A:下面两种方式有区别吗?
float f1 = 12.345f;
float f2 = (float)12.345;
有区别,float f1=12.345f定义一个float类型的变量,float f2 = (float)12.345是把double类型的12.345强制转换为float类型的变量。
B:下面的程序有问题吗,如果有,在哪里呢?
byte b1 = 3;
byte b2 = 4;
byte b3 = b1 + b2;
byte b4 = 3 + 4;
其中byte b3 = b1 + b2;是有问题的因为两个byte类型的变量相加首先会把byte提升为int再做加法运算再把结果int类型的结果赋值给byte类型的变量b3会有问题;
而byte b4 = 3 + 4;没问题是因为3+4是一个常量计算,然后把结果赋值给byte类型的b4,如果结果在byte的范围之类就不会报错,显然byte的范围是-127-128所以不会有问题。
C:下面的操作结果是什么呢?
byte b = (byte)130;
结果是-126,已知补码求原码
D:字符参与运算
是查找ASCII里面的值
'a' -> 97,'z' -> 122 'A' -> 65,'Z' -> 90 '0' -> 48,'9' -> 57
3. 思考题
(1) char型变量中能不能存贮一个中文汉字?为什么?
java采用unicode编码,2个字节(16位)来表示一个字符,无论是汉字还是数字,字母,或其他语言都可以存储。2.char在java中是2个字节,所以可以存储中文。
三、Java基础2
1. 运算符
(1) 算术运算符
(2) 赋值运算符
A:=,+=,-=,*=,/=,%=等
B:=叫做赋值运算符,也是最基本的赋值运算符
int x = 10; 把10赋值给int类型的变量x。
C:扩展的赋值运算符的特点
隐含了自动强制转换。
思考题:
short s = 1;
s = s + 1;(s+1运算结果是int型,需要强制转换类型)
short s = 1;
s += 1;(可以正确编译,+=内置运算符运算时可自动变换数据类型)
(3) 比较运算符
A:== 和 equals 的区别是什么?
“==”比较的是两个引用在内存中的地址是否相同,也就是说在内存中的地址是否一样。
equals方法是由Object类提供的,可以由子类来进行重写。默认的实现只有当对象和自身进行比较时才会返回true, 这个时候和 “==”是等价的。
String类重写了equals方法,比较的是内存空间存放的数据是否相同。
B:两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?
答案肯定是不一定。同时反过来equals为true,hashCode也不一定相同。
类的hashCode方法和equals方法都可以重写,返回的值完全在于自己定义。
hashCode()返回该对象的哈希码值;equals()返回两个对象是否相等。
(4) 逻辑运算符
A:&,|,^,!,&&,||
B:逻辑运算符用于连接boolean类型的式子
C:结论
&:有false则false
|:有true则true
^:相同则false,不同则true。
情侣关系。男男,男女,女男,女女。
!:非true则false,非false则true
&&:结果和&是一样的,只不过有短路效果。左边是false,右边不执行。&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)。
||:结果和|是一样的,只不过有短路效果。左边是true,右边不执行。
(5) 位运算符
A:^的特殊用法
一个数据针对另一个数据位异或两次,该数不变
B:思考题
a:请实现两个变量的交换
**方式1采用第三方变量
**方式2用位异或运算符
左边a,b,a
右边a^b
**方式3用变量相加的做法
左边a,b,a
右边a+b,a-b,a-b
**方式4一句话搞定
b = (a+b) - (a=b);
b:请用最有效率的方式计算出2乘以8的结果
2<<3
(6) 三元运算符
A:格式
比较表达式?表达式1:表达式2;
B:执行流程:
首先计算比较表达式的值,看是true还是false。
如果是true,表达式1就是结果。
如果是false,表达式2就是结果。
C:案例:
a:比较两个数据是否相等
b:获取两个数据中的最大值
c:获取三个数据中的最大值
四、Java基础3
1. switch语句
(1) 格式:
switch(表达式) {
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
...
default:
语句体n+1;
break;
}
格式解释说明:
switch:说明这是switch语句。
表达式:可以是byte,short,int,char。JDK5以后可以是枚举。JDK7以后可以是字符串。
case:后面的值就是要和表达式进行比较的值。
break:表示程序到这里中断,跳出switch语句。
default:如果所有的情况都不匹配,就执行这里,相当于if语句中的else。
(2) 思考题
switch语句的表达式可以是byte吗?可以是long吗?可以是String吗?
可以,不可以,JDK7以后可以
(3) 执行流程:
A:首先计算表达式的值
B:和每一个case进行匹配,如果有就执行对应的语句体,看到break就结束。
C:如果没有匹配,就执行default的语句体n+1。
(4) 注意事项:
A:case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的
B:default可以省略吗?
可以省略,但是不建议,因为它的作用是对不正确的情况给出提示。
特殊情况:case就可以把值固定。
C:break可以省略吗?
可以省略,但是结果可能不是我们想要的。会出现一个现象:case穿透。最终我们建议不要省略。
D:default一定要在最后吗?
不是,可以在任意位置。但是建议在最后。
E:switch语句的结束条件
a:遇到break就结束了 b:执行到末尾就结束了
(5) if语句和switch语句各自的场景
A:if
针对boolean类型的判断;针对一个范围的判断;针对几个常量的判断
B:switch
针对几个常量的判断
2. 循环语句
(1) 有三种:for,while,do...while
(2) do...while循环
A:基本格式
do {
循环体语句;
}while(判断条件语句);
扩展格式:
初始化语句;
do {
循环体语句;
控制条件语句;
}while(判断条件语句);
通过查看格式,我们就可以看出其实三种循环的格式可以是统一的。
B:三种循环的区别
a:do...while循环至少执行一次循环体
b:for和while必须先判断条件是否是true,然后后才能决定是否执行循环体
(3) 循环使用的注意事项(死循环)
A:一定要注意修改控制条件,否则容易出现死循环。
B:最简单的死循环格式
a:while(true){...}
b:for(;;){}
3. 控制跳转语句
(1) break:中断的意思
A:用在循环和switch语句中,离开此应用场景无意义。
B:作用
a:跳出单层循环(当前循环)
b:跳出多层循环,需要标签语句的配合
(2) continue:继续
A:用在循环中,离开此应用场景无意义。
B:作用
a:跳出单层循环的一次,可以继续下一次
(3) return:返回
A:用于结束方法。
B:一旦遇到return,程序就不会在继续往后执行(返回值为void时只用写return后面不用跟其他的,程序就返回了)。

浙公网安备 33010602011771号