一,基本知识.
1、jre和jdk的用途
jre:JVM+类库
JDK:jre+java的开发工具
2、jdk的bin目录:
java编译器javac.exe,
java运行工具java.exe,
打包工具jar.exe,
文档生成工具javadoc.exe
3、控制台运行java文件:
1、javac Hello.java(编译后生成.class)
2、java Hello (运行)
4、java标识符
规则:英文大小写字母,数字字符,$和_
注意事项:不能以数字开头,不能用java中的关键字,区分大小写
5,包名要求全部小写,一般是公司的域名倒着写
类或接口按所有单词驼峰命名法
方法和变量第一个单词首字母小写,企业的按驼峰命名法
常量的所有字母大写,两个单词之间用下划线分开
二,数据类型
1,常量
字符串常量:双引号括起来的内容
整数常量:所有整数
小数常量:所有小数
字符常量:用单引号括起来(必须是单个数字或单个字符)
System.out.println('10');会报错.
布尔常量:true和false
空常量 null
2, 存储单位运算
1byte=8bit
1k=1024b
1m=1024k
1g=1024m
平时买的500g硬盘往往显示是大约465g的原因是:
厂商是按1000进制算的,而电脑是按1024算的
就如:500g=500*1000*1000*1000/1024/1024/1024约等465g
3,java的各种进制的写法
二进制:0b100,0B100
八进制:0100
十进制:100
十六进制:0x100
原码和补码的转换:
原码–>补码
0b1 0110100
0b1 1001011
+ 0b0 0000001
———————-
0b1 1001100
(负数)补码-->原码
(正数的3种码都一样)
0b1 1101110
-0b0 0000001
0b1 1101101
0b1 0010010
4,数据类型
- 整数型
- byte 占一个字节 -128到127
- short 占两个字 -2^15~2^15-1
- int 占四个字节 -2^31~2^31-1
- long 占八个字节 -2^63~2^63-1
- 浮点型
- float 占四个字节 -3.403E38~3.403E38 单精度
- double 占八个字节-1.798E308~1.798E308 双精度
- 字符型
- char 占两个字节 0~65535
- 布尔型boolean
- boolean理论上是占八分之一个字节,因为一个开关就可以决定是true和false了,但是java中boolean类型没有明确指定他的大小
5,java基本数据运算注意事项:
//byte与byte(或short,char)进行运算时会提升为int,两个int类型
//相加有可能会超出byte取值范围
/*
b1和b2是两个变量,变量存储的值是变化的,在编译时无法判断里面具体的值,
相加可能会超出byte的取值范围.
*/
byte b1=3;
byte b2=4;
byte b3=b1+b2; //这样会报错的
而
byte b4=3+4;//为什么不报错呢,因为java有常量优化机制.在编译时就将字面小于-128~127之间相加起来赋值.
long与float的取值范围谁大谁小
* 进行混合运算的时候,byte,short,char不会相互转换,都会自动类型提升为int类型,其他类型进行混合运算的是小的数据类型提升为大的
* byte,short,char – int – long – float – double
* long: 8个字节
* float:4个字节
* IEEE754
* 4个字节是32个二进制位
* 1位是符号位
* 8位是指数位
* 00000000 11111111
* 0到255
* 1到254
* -126到127
* 23位是尾数位
* 每个指数位减去127
* A:它们底层的存储结构不同。
* **B:float表示的数据范围比long的范围要大**
* long:2^63-1
* float:3.4*10^38 > 2*10^38 > 2*8^38 = 2*2^3^38 = 2*2^114 > 2^63-1
char i='爱';//java的字符char是可以存储一个中文的
//因为java语言采用的Unicode编码,Unicode编码的每个字符占用两个字节,而中文也是占两个字节
System.out.println(10/3.0);除法时注意,整数与整数相除等到的是整数
- B:案例演示
- 请分别计算出x,y的值?
int x = 4;
int y = (x++)+(++x)+(x*10);
- C:面试题
* byte b = 10;
* b++;
* b = b + 1;
问哪句会报错,为什么
答案是b = b + 1;,由于b是先提升为int类型,然后才相加,就会得到一个int类型,而b++是因为需要有结果的,底层已经做了强制转换
面试题:以下哪条语句报错
1,short s=1;s=s+1;
2,short s=1;s+=1;
第一句报错.原因和上面的一样.
三,运算符
&与&&的区别:(按位运算和逻辑运算的区别)
* 最终结果一样。
* &&具有短路效果。左边是false,右边不执行。
* &是无论左边是false还是true,右边都会执行
int x=3;
int y=4;
System.out.println((++x == 3) & (y++ ==4));
System.out.println("x = "+ x +";"+"y ="+ y);
位运算符 ^
异或运算:一个数据异或两次一样的数还是其本身.面试题:
两个变量的交换(不使用第三方变量)第一种:(有缺点,可能相加超出该类型的范围)
x=x+y;
y=x-y;
x=x-y;第二种方法:
x = x ^ y;
y = x ^ y;
x = x ^ y;
面试题2:
- 向左移动(每移动一位乘于2)<<
- 向右移动(除以2)>>
- 无符号移动>>>
三目运算符
z=( x > y ) ? x : y;键盘录入:
import java.util.Scanner;
Scanner sc=new Scanner(System.in);
System.out.println(“请输入”);
int len=sc.nextInt();
System.out.println(len);if语句和三元运算符的区别
当if 语句控制的操作是一个输出语句时就不能用.
原因:因为三元运算符是一个运算符,运算符操作完毕应该有一个结果,而不是一个输出.选择结构if语句和switch语句的区别
break可以省略吗?
* 最后一个可以省略,其他最好不要省略
* 会出现一个现象:case穿透。
* 最终我们建议不要省略面试题:
- byte可以作为switch的表达式(自动类型可以提升为int都可以的)
- long不可以作为switch的表达式(自动类型提升是long,所以不能.
- 而String 类型的在1.7版本后就可以了.
总结switch语句和if语句的各自使用场景
* switch建议判断固定值的时候用
* if建议判断区间或范围的时候用
- 练习:获取水仙花数
如153=1*1*1+5*5*5+3*3*3 的数
for(int i=99;i<1000;i++){
int ge = i % 10;
int shi = i / 10 % 10;
int bai = i / 10 / 10 % 100;
if(ge*ge*ge+shi*shi*shi+bai*bai*bai==i){
System.out.println(i);
}
}
四,循环的面试题:
请在控制台输出一个倒三角形;
例如:如下
for (int i = 0; i<8; i++ )
{
for (int j = 0; j<i; j++)
{
System.out.print(" ");
}
for (int k = 0; k<2*(8-i)-1; k++)
{
System.out.print("*");
}
System.out.println();
}
2,练习题:输出乘法表
for(int i=1;i<=9;i++){
for(int j=1;j<=i;j++){
System.out.print(i + "*" + j+" = "+(i+j));
System.out.print(" ");
}
System.out.println();
}
五,三大跳转关键字的区别
break语句:
只能用于跳出循环和switch语句continue关键字:
只能用于循环语句中.return的作用
返回
其实它的作用不是结束循环的,而是结束方法的.也就是
方法中return以后所有的语句是不会执行的.标号:标记某个循环对其控制
- 标号组成规则:其实就是合法的标识符
如果面试题代码中出现:
http://ww.baidu.com;
只能说http是一个标号.