zoukankan      html  css  js  c++  java
  • Java面试集合(四)

    标题图

    1. jdk,jre,jvm之间的关系

    JVMJava虚拟机,是Java跨平台的重要保障,JVM实现Java跨平台的前提,可以针对不同的操作系统,有不同的JVM

    可以说Java语言是跨平台的,但JVM不是。

    JREJava运行时环境,包含JVM+核心类库。

    JDKJava开发工具包,包含开发工具+JRE

    分析图

    2. Java的分类 - JAVASE、JAVAEE、JAVAME

    JavaSE为标准版,JavaEE为企业版,JavaME为微型版

    3. Java中关键的保留字

    Java中有两个关键字目前没有用,为gotoconst,在Java中,所有的关键字为小写。

    4. 标识符

    标识符规则:可以使用字母,数字,_ ,以及美元符号 $ ,在Java中可以使用中文命名,但建议不用使用,不能使用关键字,也不能以数组开头,注意区分大小写,要见名知意

    5. 驼峰命名法

    1. 类名和接口名,如果有多个单词组成,那么每个单词的首字母要进行大写,如HelloWorld
    2. 变量名和方法名,如果有多个单词组成,那么第一个单词的首字母要小写,其余的单词开头的首字母要大写,如helloWorld
    3. 常量名,无论有多少个单词组成,所有字母都是大写,强调一点的是每个单词之间要以 _ 隔开,如 HELLO_WORLD
    4. 包名,无论有多少个单词组成,所有的字母都是小写,强调一点的是每个单词之间用以 . 隔开,如 cn.dashucoding.com

    6. 注解

    Java中的注解是用来解释说明代码的作用,有何用途,作为一名合格的程序员,必须懂得给代码添加注解。

    单行注释

    // 注释文字
    

    多行注释

    /*注释文字*/
    

    文档注释

    /**注释文字*/
    

    文档注释中的文字是可以提取出来形成文档的

    7. 字面量

    字面量:指的是在计算机中不可变的值

    1.整数常量(所有的整数)
    2.小数常量(所有的小数)
    3.字符常量(将一个字母、数字、符号,用 ‘’ 标识起来)
    4.字符串常量(将一个或者多个字符用 “” 标识起来)
    5.布尔常量(true和false)
    6.空常量(null)

    8. 进制

    二进制:以0b/0B作为开头 (0~1,满2进1)
    八进制:以0作为开头(0~7,满8进1)
    十进制:没有特殊标识(0~9,满10进1)
    十六进制:以0X/0x作为开头(09,af,满16进1)

    进制间的转化

    十进制转二进制:不断除以2,然后取余数
    二进制转十进制:从最低位依次乘以2的位次次幂,然后求和

    同理:
    十进制转其他进制:除以对应的进制数,然后取余数
    其他进制转十进制:从最低位依次开始,按位次乘以进制的位次次幂,然后求和

    二进制转八进制,也是从低位开始,每三位二进制为一组,产生一个八进制数字,最高位不足三位,就补0,凑齐三位即可。
    口诀:三变一

    八进制转二进制,每一位八进制数都会产生三位二进制数字,不足三位就补0即可。
    口诀:一变三

    同理
    二进制转十六位进制:口诀为四变一
    十六位进制转二进制:口诀为一变四

    9. 变量

    格式:

    数据类型 变量名 = 数据;
    int i = 2;
    
    // 变量的声明
    int i;
    // 变量的赋值
    i = 2;
    // 存储
    bit为最小单位,8位为1字节(byte,简写为B)
    

    数据类型

    数据类型:基本数据类型引用数据类型

    基本数据类型

    byte-1 short-2 int-4 long-8
    float-4 double-8 char-2 boolean
    long---l float---f

    基本数据类型.png

    引用数据类型

    引用数据类型:数组,类,接口

    引用数据类型.png

    10. 数据类型的转换

    数据类型的转换:

    1. 自动类型转换 / 隐式转换
    2. 强制类型转换 / 显式转换

    自动类型转换:小的类型可以自动转为大的类型

    大包围小的

    char可以转换为intlong可以转换为float,其他往前转换,可能产生精度损失

    转换

    // short char 
    // ok 可行 字面量如果在范围内允许转化
    short a = ‘b’;
    char c = 97;
    // not 不可行 可能超过范围,所以不允许转化
    char c = ‘a’;
    short b = c;
    

    强制类型转换:大类型强制转化为小类型,会可能会导致数据丢失精度

    // 强制类型转换
    double d = 3.14
    int i = (int)d;
    

    11. 运算符

    + - * / % ++ --
    

    ++ / -- 自增/自减

    int j = i++;  // j = i ; i++
    int j = ++i;  // ++i ; j = ++i
    

    赋值运算符

    = += -= *= /= %= &= |= ^= <<= >>= >>>=
    

    关系运算符

    > < >= <= == !=
    

    逻辑运算符

    & 与
    Or 或
    Not 非
    ^ 亦或
    && 短路与
    || 短路或
    
    短路 表示如果前面的表达式正确,后面的就不再运行
    &&:前边的表达式结果为false,后面的就不再运行
    ||:前面为true,后面就不再运行
    

    位运算

    & | ^ << 左移 >> 右移 >>> 无符号右移 ~ 取反
    

    &,将1看作true,将0看作false,0&任何数为0,1&奇数为1,1&偶数为0。

    | ,有1为1。

    三元运算符

    格式:

    逻辑值?表达式1:表达式2

    运算符的优先级

    () ~ ++ -- ! * / % + - << >> >>> 关系 逻辑 & | ^ 三元 赋值
    

    一元运算 > 二元运算 > 三元运算 > 赋值

    12. 流程控制

    if,if-else, if-else if

    分支结构

    if(逻辑值){
    代码块;
    }
    
    if(逻辑值){
    代码块;
    } else {
    代码块;
    }
    
    switch(逻辑值){
    case 值:
    代码块;
    break;
    case 值:
    代码块;
    break;
    ...
    }
    

    switch支持byte/short/char/int/String

    while(逻辑值){
    代码块;
    }
    
    do{
    代码块;
    } while(逻辑值);
    

    while, do-while

    for(定义循环变量; 控制条件; 改变循环变量){
    	代码块;
    }
    

    13. break和continue

    break:表示终止当前的一层循环结构
    continue:表示跳过当前一次循环继续下一个循环

    14. 数组

    格式:

    数据类型[] 数组名 = new 数据类型[长度];
    数据类型[] 数组名 = new 数据类型[]{元素1, 元素2, 元素3...};
    int[] arr = new int[]{2,3,4,5,6};
    int[] arr = {2,5,7,8,9};

    数组的应用

    • 数组名[下标]
    • 数组名.length
    • 遍历数组
    • 获取数组中最值
    • 数组的排序
    • 反转数组
    • 数组元素的查找
    for(int i = 0; i < arr.length; i++){
    System.out.println(arr[i]);
    }
    
    for(int i : arr){
    System.out.println(i);
    }
    
    // 冒泡排序
    for(int i = 1; i < arr.length; i++){
    for(int j = 1; j <= arr.length - i; j++){ 
    		if(arr[j - 1] > arr[j]){
    			int temp = arr[j - 1];
    			arr[j - 1] = arr[j];
    			arr[j] = temp;
    		}
    	}
    }
    
    // 选择排序
    for(int i = 1; i < arr.length ; i++){ 
    	for(int j = i; j < arr.length; j++){ 
    		if(arr[i - 1] > arr[j]){
    			int temp = arr[i - 1];
    			arr[i - 1] = arr[j];
    			arr[j] = temp;
    		}
    	}
    }
    

    数组:Arrays.sort , Arrays.toString , System.arraycopy , Arrays.copyOf

    15. 内存

    Java内存:
    栈内存、堆内存、方法区、本地方法栈、PC计数器(寄存器)

    栈内存用来存储的是变量
    堆内存用来存储的是对象

    16. 方法

    格式:

    修饰符  返回值类型 方法名(参数列表){
    方法体;
    return 返回值;
    }
    

    方法的重载

    方法名相同但参数列表不同

    方法的传值

    方法的传值,基本类型传实际值,引用类型传地址

    17. 快捷键

    Ctrl + x 剪切
    Alt + / 快捷提示键
    Ctrl + Shift + o 导包
    Ctrl + Shift + f	调整格式
    Ctrl + F 搜索
    Ctrl + D 删除一行
    

    18. 成员变量和局部变量

    • 成员变量在类中,局部变量在方法中
    • 成员变量作用在整个类中,局部变量只能在它的方法中,或者语句中
    • 成员变量存储在堆内存中,并自动赋予默认值;
    • 局部变量存储在栈内存中,不自动赋予默认值

    构造方法,与类名同名,没有返回值,构造方法可以重载
    this关键字,代表本类中的对象的引用
    可以用this调用本来中的对应形式的构造方法
    面向对象的特征为封装,继承,多态

    结语

    • 下面我将继续对JavaAndroid中的其他知识 深入讲解 ,有兴趣可以继续关注
    • 小礼物走一走 or 点赞
  • 相关阅读:
    ORA-01940: cannot drop a user that is currently connected 问题解析
    Oracle11g数据库导入Oracle10g操作成功
    固态硬盘
    Oracle数据库默认的data pump dir在哪
    navicat 关于orcale新建表空间,用户和权限分配
    oracle 11g 完全卸载方法
    完全卸载oracle11g步骤
    架构设计:负载均衡层设计方案(4)——LVS原理
    C++中使用REST操作
    在C#中实现视频播放器
  • 原文地址:https://www.cnblogs.com/dashucoding/p/9527579.html
Copyright © 2011-2022 走看看