基本语法(二)
一:java语言的八个特性
1:简单 : 相对于C++来说
2:面向对象 : 面向过程关注的是问题解决的步骤和过程. 面向对象关注谁能解决问题. 具有功能的对象.
3:分布式 : 多主机基于网络协作.
4:健壮 : 强类型, 不允许出现没有数据类型约束的数据. 异常处理. GC. 垃圾:应该被释放,但
是没有释放的空间. 应该被清理, 清理的过程就是把此空间重新标记为可用状态
指针安全化 => 引用(reference)
5:安全 : 所有的程序都必须经过类加载器, 类加载器会负责校验…
6:多线程 : 最大化利用,CPU, 实现多任务, 高并发.
7:性能好 : java是编译型. 比解释型语言快.
8:跨平台 : 程序字节码.class文件是面向JVM的指令集.
二:java类,方法,语句之间的关系
1:类包含方法,方法包含语句。
2:类:是程序的基本单位.
3:方法:java程序的独立功能单位。
4:语句:java程序的最小执行单位 ,结尾必须以;结尾。
三:什么是主类?什么是公共类,公共类有什么主意点?
1:主类:带有main方法修饰的类,有入口的类,只有主类可以被执行。
2:公共类:被public修饰的类。公共类的类名必须和源文件的的名字一致,所以一个源文件中,只能有一个公共类。
四:变量是什么
1:内存中的值可以变化的量,内存中的某一块被特定数据类型约束并且被命名空间,此空间中可以保存一个数据类型范围的数据。
(有数据类型约束的被命名的空间. 此空间中可以保存数据)
五:变量的注意事项
1:必须要有数据类型和变量名。
2:先声明,再使用。
3:必须初始化才可以读取(租房)。
4:变量有其作用范围,由声明语句所在的一对{}决定(eg:老师的例子,在其范围).
5:同一作用范围不可以重复声明。
6:变量尤其作用范围.
六:数据类型的作用
1:约束空间的大小
2:决定空间中保存什么
3:空间中的数据能做什么。
4:数据类型分为基本数据类型和引用数据类型
基本数据类型:整数型,浮点型,字符型,布尔型
(整数型:[byte,1个字节,-128~127范围]
[short,2个字节,32768~32767]
[int,4个字节,-20多亿~20多亿]
[long,8个字节,-900多亿亿~900多亿亿])
(浮点型:[float,4个字节,10^38]
[double,8个字节,10^308])
(字符型:[char,2个字符])
(布尔型:[boolean,一个字符])
引用数据类型(reference):内存空间中保存的其他数据的地址.
七:数据类型之间的规则
不同类型的变量互相赋值时
如果右面的范围小于左面变量的范围, 直接自动完成
如果右面的范围大于左面变量的范围, 不能自动完成, 可以借助强制类型转换来完成(有风险)
整数字面量默认使用4字节的int型空间来保存.
浮点数字面量默认使用8字节的double型空间来保存.
兼容性 : 左面的变量可以接收右面的数据类型的多少.
数据范围从小到大
byte < short < int < long < float < double
任意非long整数作运算, 结果总是int型.
混合数据类型的变量作运算, 结果总是参与运算的类型中的最大的那个类型.
八:进制
1:10进制数,
287439
2 * 10 ^ 5 +
8 * 10 ^ 4 +
7 * 10 ^ 3 +
4 * 10 ^ 2 +
3 * 10 ^ 1+
9 * 10 ^ 0
权值 : 以10以底的n次幂
逢10进1, 没有10. 这样的数称为10进制数.
2:16进制
0x5213
5 * 16^3 +
2 * 16^2 +
1 * 16^1 +
3 * 16^0 = 21011
3:进制表
十进制 二进制 十六进制
0 0000 0
1 0001 1
2 0010 2
3 0011 3
4 0100 4
5 0101 5
6 0110 6
7 0111 7
8 1000 8
9 1001 9
10 1010 A
11 1011 B
12 1100 C
13 1101 D
14 1110 E
15 1111 F
每1个16进制数正好对应4个bit. 第2个16进制是一个byte.
九:原码,反码,补码
计算机底层的所有数据的存储全部使用二进制补码形式.
正数的补码就是自身
负数的补码是它的相反数全部取反+1得到.
表示一个数的正负由符号位决定, 符号位永远位于最高位.
0011 1100 -> 如果符号位为0, 表示这个数是正数, 如果符号位为1, 表示这个数是负数.
0x3C => 16*3 + 12 => 60
所以0011 1100就是+60这个数据.
1101 0101 -> 符号位是1, 说明这个数是一个负数的补码. 怎么来的呢? 相反数取反+1得到.
-1 => 1101 0100
取反=> 0010 1011 => 0x2B => 43
所以1101 0101就是-43.
0001 1011
0x1B => 16+11 => 27
1011 1101
-1 => 1011 1100
取反=> 0100 0011 => 0x43 => 67
所以1011 1101就是-67.
byte型数据最大值.
0111 1111 => 0x7F => 7*16+15 => 127
1111 1111 => 这是一个负数
-1 => 1111 1110
取反=> 0000 0001 => 1
所以1111 1111是-1
1111 1111 + 1 => 1 0000 0000
1000 0000 => 这是一个负数
-1 => 0111 1111
取反=> 1000 0000 => 0x80 => 8 * 16 => 128
所以1000 0000是-128
short型最大值
0111 1111 1111 1111 => 0x7FFF => 32767
short型最小值
1000 0000 0000 0000 => 0x8000 => -32768
int型最大值
0111 1111 1111 1111 1111 1111 1111 1111 => 0x7FFFFFFF
int型最小值
1000 0000 0000 0000 0000 0000 0000 0000 => 0x80000000
long型最大
0x7FFFFFFFFFFFFFFF
Long型最小
0x80000000000000
char型最大
1111 1111 1111 1111 => 0xFFFF => 65535
char型最小
0000 0000 0000 0000 => 0x0000
十:变量
1. 变量按照数据类型来分, 分为基本数据类型变量和引用数据类型变量, 请写出基本数据类型变量和引用数据类型变量的区别.
基本数据类型:保存的数据为数值本身。
引用数据类型:保存的是其他数据的地址
2. 列出变量使用注意事项(6点)
1) 变量必须有数据类型和变量名
2) 变量必须先声明后使用
3) 变量必须初始化才能使用
4) 变量的作用范围由其声明语句所在的一对{}决定
5) 同一作用域下变量不能重复声明
6) 变量值有一定的数据范围(变量的内存空间大小有限, 底层都是二进制)
3. 基本数据类型有8种, 写出8种基本数据类型, 并用的16进制形式写出所有整数数据类型的最小值和最大值
byte 0111 1111 => 0x7F 1000 0000 => 0x80
short 0x7FFF 0x8000
int 0x7FFFFFFF 0x80000000
long 0x7FFFFFFFFFFFFFFF 0x8000000000000000
float
double
char 1111 1111 1111 1111 => 0xFFFF, 0x0000
boolean
4. 判断下列的带( )行的对错
int i1 = 20;
short s1 = i1; ( 错)
char c1 = 97; ( 对) char c1 = ‘a’;
char c2 = '我' - '你';(对)
char c3 = (char)(c1 - 32); //可以达到小写变大写的效果(对)
float f1 = i1;( 对)
long l1 = 234234239933;(错)
f1 = l1 * 20;(对)
double d1 = .342;
d1 = i1 * f1 * l1;(对 )
l1 = f1 / 10000;( 错)
boolean b1 = (boolean)1;(错)
5. 相同字面量十六进制表示的数比十进制要大, 对或错? 为什么?
错 不一定
当数值都小于10时, 二者相等
当数值都大于10时, 十六进制大
当符号位为1时, 取决于数据类型.
变量 : 内存中的一块数据类型约束且并命名的空间, 可以保存一个数据.
变量分类
1) 变量按照数据类型来分 :
1) 基本数据类型(primitive) : 内存空间中保存的是数据本身.
1) 数值型
1) 整数
byte
short
char
int
long
2) 浮点数
float
double
2) 布尔型 boolean
2) 引用数据类型(reference) : 内存空间中保存的对象的地址. 地址就是内存中某个字节的编号. 0就是null.
2根据变量的声明语句所在的位置来分 :
1) 局部变量(local variable) : 声明语句在方法中, 范围小, 寿命短.
2) 成员变量(member或field) : 声明在类中方法外, 范围大, 寿命长.
int month = 08; // 以0开始的字面是八进制数.
左移 << 右边补0
有符号右移 >> 左边补符号位
无符号右移 >>> 左边补0
/ 的注意点 : 整数相除,结果仍然 还是整数, 小数部分丢弃
% 取模, 也称为取余
n % m 取余 : 结果总是小于m. 让一个未知数落在一个已经范围内.
n % m 如果结果为0, 说明n能被m整除, 如果结果不为0, 说明n不能被m整除.
n % 2 如果结果为0, 说明n是偶数, 如果结果不为0, 说明n是奇数.
后++, 是先用后加
前++, 是先加后用
a = 10; b = ++a; => b:11, a:11
a = 10; b= a++; => b: 10, a:11
比较运算中的比较大小操作, 只适用于基本数据中的数值型(byte, short, char, int, long, float, double)
比较运算中的相等或不等适用所有数据.
逻辑运算只适用于布尔型.
逻辑与和短路与不一样, 逻辑与本质是按位与, 短路与才是真正的逻辑运算.
短路 : 如果前面的条件直接就能决定结果, 后面的条件不予处理.
三元运算符
变量 = 布尔表达式 ? 表达式1 : 表达式2;
6. 变量分类有两种分法, 第一种是按数据类型来分,另外一种是按照声明位置来分, 每一种又各分为哪些种类型. 各有什么特点?
1) 基本数据类型(保存数据本身)
引用数据类型(保存对象所在的内存中地址) 地址 : 某个字节的编号. 编号为0的地址就是null
2)局部变量(声明语句在类中的方法内,范围小,寿命短)
成员变量 声明语句在类中方法外,范围大,寿命长
7. 计算下列结果, 分析过程, 只需要计算到十六进制形式即可.
byte a = 0x6B; //0110 1011
byte b = 0x5D; //0101 1101
System.out.println(a & b); //0100 1001 => 0x49
System.out.println(a | b); //0111 1111=>0x7F
System.out.println(a ^ b); //0011 0110=>0x36
8. 运算符%的作用是什么? 有什么实际的应用?
取模(取余)
将一个未知数落在一定的范围内 n %m 结果不会超过m
判断一个数的奇偶性 n%2 结果为0是偶数,不为0为奇数
n % m 如果结果为0, 说明n可以被m整除
9. 判断:
1) if else if else if else 语句中, 如果同时有多个条件都为true, 那么将会有多个语句块被执行
错 每条语句是互斥的 只能执行最先满足的那一个条件的语句块.
2) switch case case default 语句中, 如果同时有多个条件都为true, 那么将会有多个语句块被执行
错, case中不可以重复. 编译错误. 看是否有break 语句中有break 结束switch语句
10. 在switch结构中, switch()括号中的要求具体是什么? case后面的要求又是什么?
必须是变量 数据类型为整数 非long型, 字符串, 枚举.
case后面为常量, 字面量和final修饰的量.
11. 列出变量的使用注意事项(至少6点)(尝试解释一下原因)
1:先声明,后使用
2不能重复声明;
3:必须要初始化才能使用;
4:要有变量类型和变量名;
5:变量的作用范围是由其声明语句所在一对{}决定的’
6 变量值有一定的数据范围
12. 变量分类有两种分法, 第一种是按数据类型来分,另外一种是按照声明位置来分, 每一种又各分为哪些种类型. 各有什么特点?
基本数据类型:内存空间中保存的是数据本身;
引用数据类型:内存空间保存的是引用对象的地址。
局部变量: 声明语句在方法中,范围小,寿命短;
成员变量:声明语句方法外,范围大,寿命长;
13. for循环的结构是什么? 执行流程是如何?
for(初始化语句A;循环条件B;迭代语句C;){
循环体D;
}
A – B – D –C –B –D—C—B –D……B
14. 写程序, 打印一个倒直角三角形.
public class Test{
public static void main(String[] args){
for (int i=0;i<10;i++){
for (int j =0; j<10-i;j++){
System.out.print(“*”);
}
Sytem.out.println();
}
}
}
十一:循环
1. 写出while循环和do while循环的区别, 三个循环分别在什么场景下使用?
相比于while, do while会先执行一次语句, 再进行条件判断。
区别在于如果条件为假时, dowhile 至少要执行一次, while不执行.
for 在循环次数确定的情况下使用。
while是在不知道循环次数,但知道循环条件的时候用
do while是不管循环条件如何, 程序都至少得运行一次。
for (int I = 0; I < n; i++) {
}
2. 简述break和continue的作用.
当方法的循环中运行到break的时候, 会跳出当前循环
continue 会中断当次的循环执行, 直接进入下一次循环的开始
3. 声明一个方法包括哪些, 各部分的作用是什么?
修饰符 返回值类型 方法名(数据类型1 形式参数1, 数据类型2 形参2, ….){
方法语句;
return 返回值;
}
修饰符包括: public private, static, final, abstract, native,
返回值类型: 方法运行后返回的数据的数据类型
方法名: 标识符:
形式参数: 用来将实际参数传入方法中.
方法的功能的完成必须需要这些数据, 但是数据具体是多少又不会影响功能.
方法语句: 方法运行时执行的语句
return 返回值: 方法运行结束后, 需要返回给调用者的数据
4. 方法的返回值是什么? 如何使用这个返回值?
方法运行结束后, 期望的一个返回的数据
方法调用本身就是返回值了, 所以在方法调用的时候可以将返回值赋给变量, 从而保存方法运行后的结果
5 什么是方法重载, 为什么要方法重载?
同一个类中, 拥有相同方法名, 但形参列表不同的方法。 形参不同包括数据类型不同, 顺序不同, 个数不同.
简化调用者使用。

浙公网安备 33010602011771号