Java 知识点汇总 -- 深度版

初始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 =128byte 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,
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值