文章目录
初始Java
如何运行一个java程序呢?
磁盘上的HelloWorld.java文件经过编译(javac 文件名.java)生成HelloWorld.class(字节码文件,也叫二进制文件),再通过java HelloWorld运行这个程序。
在运行Java程序前,必须先安装好JDK(Java Development Kit即Java开发工具包),JDK里面就包含了javac和 java工具,Java程序最终是在JVM(Java虚拟机)中运行的。
【面试题】 JDK 、 JRE 、 JVM 之间的关系?
JDK(Java Development Kit):Java开发工具包,提供给Java程序员使用,包含了JRE,同时还包含了编译器javac与自带的调试工具Jconsole、jstack等。
JRE(Java Runtime Environment):Java运行时环境,包含了JVM,Java基础类库。是使用Java语言编写程序运行的所需环境。
JVM:Java虚拟机,运行Java代码 。
为什么注释以后编译不过去?
win -> 默认文件的编码格式是UTF-8,有些电脑会默认是GBK
javac执行的时候,是以GBK去编码的,所以需要改为:javac -encoding utf-8 HelloWorld.java
文本注输入:javadoc -d 107Javadoc -author -version -encoding UTF-8 -charset UTF-8 HelloWorld.java后会生成一个帮助文档
main方法的String[] args作用是什么?
运行时命令行参数
数据类型和变量
- boolean
boolean的内存占用没有明确规定,所以不能和其它数据类型进行转换,boolean只有true和false,也不能±1
不论是在16位系统还是32位系统,int都占用4个字节,long都占8个字节
整形和浮点型都是带有符号的
整型默认为int型,浮点型默认为double,因此float类型应该:float a = 3.14f(F大写也可以),同理long加L
在赋值时,如果超过范围,会报错
float的精度最多保留6位
在java当中没有无符号整形这种
计算变量的范围:
System.Out.println(Integer.MIN_VALUE);
System.Out.println(Integer.MAX_VALUE);
只有int的是Integer,char的是Character,剩下的都是大写首字母
- 自动类型转换 ( 隐式 )
数据范围小的转为数据范围大的时会自动进行。
- 强制类型转换 ( 显式 )
**数据范围大的到数据范围小的,需要强制转换 **
int a = 10;
long b = 100L;
b = a; // 可以通过编译
a = b; // 编译失败
a =(int)b;//会丢失精度
- 类型提升
byte a = 10;
byte b = 20;
byte c = a + b;
// 编译报错,不兼容的类型: 从int转换到byte可能会有损失
不同类型的数据混合运算, 范围小的会提升成范围大的.
对于 short, byte 这种比 4 个字节小的类型, 会先提升成 4 个字节的 int , 再运算.
short a =128;
byte b =(byte) a;
//这个时候b = -128;
//因为a是10000000,转换为byte类型是-128
- 注意:在Java里面,没有所谓的字符串以\0截止
数据类型分为:1.基本数据类型,就是基本的8种数据类型
2.引用数据类型,有String,包装类,数组,接口
注意:String不是包装类
- 注意:
int i = 10;
i++;
System.out.println(i);
//会输出10,记住就行
- &&和&的区别
&&有短路作用:表达式1&&表达式2,如果表达式1是false的话,不会执行表达式2
&没有短路的作用:表达式1&表达式2,如果表达式1是false的话,会继续执行表达式2,正常情况和&&一/样
- 无符号右移
>>>
//统统在左边补零,而不是符号位
- 取模运算的不同
在C语言种,%两边的数字必须为整数,而在Java当中,%两边可以是浮点数
比如:11.5%2就会输出1.5
- 数字和字符串的互转
int a = 12345;
String ret = String.valueOf(a);
float f = 12.5f;
String ret2 = String.valueOf(f);
String str = "123";
int ret3 = Integer.valueOf(str);
int ret3 = Integer.parseInt(str);//这上面两种都是可以的
- +=和+的区别
short sh = 12;
sh = sh + 2;//报错,因为2是整形,把整形的赋值给short会错,需要强转
sh+=2;//不会报错,理解为 帮我们进行了类型的转换
分支语句问题
switch的括号内只能是以下类型的表达式:
基本类型:byte、char、short、int,注意不能是long ,float ,double , boolean
引用类型:String常量串、枚举类型
public class Test {
public static void main(String[] args) {
String s = "abc";
switch(s) {
case "abc":
System.out.println("yes");
break;
case "bcd":
System.out.println("no");
break;
default:
System.out.println("err");
break;
}
}
}
随机数
import java.util.Random;
public class Test {
public static void main(String[] args) {
Random r = new Random();
//Random r = new Random(123);//如果在这里面设置数的话,随机数会一直不变
int randNum = r.nextInt(50) + 50;//[50 ~ 100)
System.out.println(randNum);
}
}
一个数的二进制数有多少个1
public class Test {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int count = 0;
while (n != 0) {
n = n & (n-1) ;
count++;
}
System.out.println(count);
}
}
- 题外话知识:方法的压栈,如果有多个参数,是依次从右往左压栈
汉诺塔问题
//pos1 起始位置
//pos2 中转位置
//pos3 目的位置
public static void hanota(int n,char pos1,char pos2,char pos3) {
if(n == 1) {
move(pos1,pos3);
return;
}
hanota(n-1,pos1,pos3,pos2);
move(pos1,pos3);
hanota(n-1,pos2,pos1,pos3);
}
public static void move(char pos1,char pos2) {
System.out.print(pos1 +"->"+pos2+" ");
}
数组
- 定义
int[] array = {
1,2,3,4,5,6};
int[] array1 = new int[]{
1,2,3,4,5,6};
// 注意省略格式不可以拆分, 否则编译失败
int[] array2;
array2 = {
1,2,3,4,5,6};//err
int[] array3 = new int[10];//这后面不能给初始值
- 数组的长度
int[] array = {
1,2,3,4,5,6};
int len = array.length;//array.length 就可以直接算出数组的长度
- 遍历打印数组的一种新方式
for-each的方法:
int[] array = {
1,2,3,4,5,6};
for(int x: array) {
System.out.println(x);
}
//[1, 2, 3, 4, 5, 6]
对方法的另外一种使用:
public static int add(int... array) {
int ret = 0;
for (int i = 0; i < array.length; i++) {
ret += array[i];
}
return ret;
}
public static void main3(String[] args) {
int[] array = {
1,2,3};
System.out.println(add(array));
System.out.println(add(1,2,3,4,5,6,7));
System.out.println(add(1,2,3,4,5));
System.out.println(add(1,2,3,9,8,7,6,5));
}
- 数组直接排序
import java.util.Arrays;
int[] array = {
1,3,5,6,2,4};
Arrays.sort(array);
for(int x: array) {
System.out.println(x);
}
//[1, 2, 3, 4, 5, 6]
- 把其它类型的数组转化为字符串
public class Test {
public static void main(String[] args) {
int[] array = {
1,2,3,4,