zoukankan      html  css  js  c++  java
  • Java复习,Java知识点以及Java面试题(一)

    J2SE(Java 2 Platform Standard Edition)

    J2ME(Java 2 Platform Micro Edtion)

    J2EE(Java 2 Platform Enterprise Edition)

    Java语言特点:开源 跨平台(JVM) 面向对象等

    JRE与JDK

    JRE(JVM和jJava类库) 

    JDK包含JDK,以及其他开发工具

    Java源代码----->javac编译------>Java字节码文件------->java执行----->运行结果

    path环境变量里面记录的是可执行性文件,如exe,对可执行文件先在当前路径去找,如果没有找到就去path环境变量中配置的路径去找

    classpath环境变量里记录的是java类的运行文件所在的目录

    ------------------------------------------------------------------------------------------------------------------------------------------------------------

    Java语言基础

    关键字:全小写 在IDE中以不同颜色显示,goto和const作为保留字存在

    标识符:就是给变量,类,接口,方法等起名字 (英文大小写,数字,$ 和 _)以及命名法

      类或接口:首字母大写

      方法或变量:首字母小写

      常量:全大写,单词之间用“_”隔开

    注释://     /* */      /** */

    常量:字面值常量:1.字符串常量 2.整数常量 3.小数常量 4.字符常量 5.布尔常量 6. 空常量

    进制相关:

      1byte = 8bit;1k = 1024byte; 1m = 1024k; 1g = 1024m;1t = 1024g

      二进制(以0b开头),八进制(以0开头),十进制,十六进制(以0x开头)的相互转换

      8421BCD码四位表示一个十进制码,十进制157 = 0001 0101 0111

      原码,反码,补码(计算机都是使用补码来计算的)

        原码:最高位符号位0正1负,其余为数值位

        反码:正数反码与原码相同,负数反码与符号位相同,数值位取反

        补码:正数补码与原码相同,负数补码为反码末位加一

    变量:数据类型 变量名 = 初始化值

    数据类型:

      八种基本数据类型:

      byte:八位,一个字节,有符号,以二进制补码表示的整数,最小值:-128(-2^7)最大值:127(2^7-1)

      short:16位,两个字节,有符号,以二进制补码表示的整数,最小值:-32768(-2^15)最大值:32767(2^15-1)

      int:  32位,四个字节,有符号,以二进制补码表示的整数,最小值:-2^31  最大值:2^31-1

      long:  64位,八个字节,有符号,以二进制补码表示的整数,最小值:-2^63  最大值: 2^63-1 默认值:0L

      float:单精度 32位 四个字节 浮点数 默认值:0.0f

      double: 双精度 64位 八个字节 浮点数  默认值0.0d 浮点数的默认类型位double类型

      boolean:true/false 一个字节

      char:单一的 16 位 Unicode 字符,占两个字节,最小值是 u0000(即为0);最大值是 uffff(即为65,535),char 数据类型可以储存任何字符;(可以储存汉字)

      整数默认int类型,浮点数默认double类型

      级别从低到高为:byte,char,short(这三个平级)–>int–>float–>long–>double

      自动类型转换(默认转换):从低级别到高级别,系统自动转的;

      强制类型转换:什么情况下使用?把一个高级别的数赋给一个比该数的级别低的变量;目标数据类型 变量 = (目标数据类型)(被转换的数据)

      float虽然占4个字节,long占八个字节,但是float表示范围比long大(原因:略,可自行Google)

    //面试题:以下语句会报错吗s's's's
    byte a = 1 , b;fo
    b = a + a;     //会报错,无法编译,因为默认转换a为int,再从int到byte需要强制转换
    //面试题,下列输出是多少:
    byte a = (byte) 214;
    System.out.println(a);
    //因为强制转换,只截最后一个字节,并且这个字节为补码,所要做的就是把补码转为原码即可
    System.out.println('a'+1);
    //输出98,因为‘a’为char类型,根据ACSII表转为int 97
    System.out.println('a'+1);   // 98
    System.out.println("a"+1);  // a1
    System.out.println('a'+1+"a"); //98a
    //字符串后的+为字符串拼接操作

    运算符:

      算数运算符:“/”为除法,整数相除只能得到整数,如果想要小数,需要加小数点.0

            "%"为取余

            ++和--,放在变量前后效果不同,前面是先自增或自减再参与运算,后面是先参运算再自增或自减

            注意:算数运算符的优先级

      赋值运算符:= += -= *= /= %=

    short f = 1;
    f = f+1;
    //会报错cannot convert from int to short,因为会先默认转成int类型
    short f = 1;
    f +=1//不会报错,因为扩展运算符包含强制类型转换,相当于f = (f的数据类型)(f+1)

      关系运算符:==  != > >= < <=

      逻辑运算符:&(与) |(或) ^(异或) !(非) &&(短路与) ||(短路或)

          & :无论左边结果是什么,右边都参与运算。 &&:短路与,如果左边为false,那么右边不参数与运算。

          |:两边都运算。 ||:短路或,如果左边为true,那么右边不参与运算。

      位运算符: &(与运算) |(或运算) ^(异或运算) ~(按位取反)  <<(左移) >>(右移) >>>(无符号右移)

    int a =1,b =2;
    //java实现两个整数变量的交换:
    //  方式一:采用一个中间变量 优点:最简单最好理解的方式
    //  方式二:可以用两个数求和然后相减的方式 缺点:如果 x 和 y 的数值过大的话,超出 int 的值会损失精度。
    a = a + b;
    b = a - b;
    a = a - b;
    //  方式三:利用位运算的方式进行数据的交换,思想原理是:一个数异或同一个数两次,结果还是那个数,而且不会超出int范围(最佳实现)
    a = a^b;
    b = a^b;
    a = a^b;
    //  方式四:利用反射 最为麻烦,切效率低。完全炫技使用
    //最有效的方法算出2乘以8等于几?
    //  2<<3; 表示 2向左移 3位:2 * 2^3(2的3次方) = 2 * 8;
    //  因为一个数左移 n位,就相当于 2的 n次方,那么一个数乘以 8只要将其左移 3位即可,而为运算符的效率最高,所以 2乘以 8等于几的最有效方法是 2<<3。

      三目运算符:  比较表达式?表达式1:表达式2;

    if语句:if(判断语句){执行语句}else if(判断语句){执行语句}else{执行语句}

    switch语句: switch表达式支持的数据类型:基本数据类型:byte, short, char, int;包装数据类型:Byte, Short, Character, Integer;枚举类型:Enum;字符串类型:String(Jdk 7+ 开始支持)

          注意:case 里面必须跟 break,不然程序会一个个 case 执行下去,直到最后一个 break 的 case 或者 default 出现。

             case后面的值只能是常量,不能是变量,而且,多个case后面的值不能重复

    for循环语句:for(初始化语句;判断语句;控制语句){执行语句;}

    while循环语句:初始化语句 while(判断语句){执行语句;控制语句;}   

        能用for尽量用for,因为for中初始化语句中的变量可以尽早在内存中消失,使用while循环可以继续使用控制语句中的变量

    do...while循环语句:初始化语句 do{执行 语句;控制语句;}while(判断语句); do...while循环至少执行一次循环体

    控制跳转语句:break  跳出单层循环;跳出指定循环,使用标签名(不常用)

           continue 跳出一次循环,进入下一次

    方法:格式: 修饰符 返回值类型 方法名 (参数类型 参数名,......){执行语句; return 返回值;}

          实际参数:实际参与运算的参数;形式参数:方法定义的,用于接收实际参数

       方法重载:方法名相同,参数个数以及参数类型不同;与返回值类型无关,只看方法名和参数列表;调用时虚拟机通过参数列表的不同来区分同方法名

    数组:存储基本数据类型,也可以存储引用数据类型。

       格式:数据类型[] 数组名;

          数组类型[][] 数组名 = new 数据类型[m][n]; 数据类型[][] 变量名 = new 数据类型[m][]; 数据类型[][] 变量名 = {{1,2,3},{1},{1,2}};

       初始化:动态初始化:指定数组长度,由系统分配初始值:数据类型[] 数组名 = new 数据类型][数组长度]

           静态初始化:指定每个元素的初始值,由系统判断数组长度:数组类型[] 数组名 = {1,2,3}、

       遍历数组:

       获取最值:

       数组逆序:

       查找元素:

    Java中的参数传递问题:

      基本类型:形式参数的改变对实际参数没有影响。

      引用类型:形式参数的改变直接影响实际参数。因为引用类型做形参,调用的是地址值,对同一块内存进行修改。

    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    Java中的内存分配:

    栈:存储局部变量;用完就释放;栈内存的两个引用指向同一个堆内存空间,无论哪个栈内存中的变量的操作都是针对堆内的同一个地方

    堆:new出来的东西;每个new出来的东西都有地址值;每个变量都有默认值byte,short, int,long 0;float,double 0.0; char 'u0000'; boolean false; 引用类型 null; 使用完毕就成了垃圾,没有立即回收,等GC空闲时回收

    方法区:

    本地方法区:

    寄存器:

  • 相关阅读:
    java.lang.IllegalArgumentException: When allowCredentials is true, allowedOrigins cannot contain the special value "*" since that cannot be set on the "Access-Control-Allow-Origin" response header.
    spring-session-data-redis依赖冲突问题
    centos7启动iptables时报Job for iptables.service failed because the control process exited with error cod
    图片上传后台服务报内存溢出 Out Of Memory Java heap space
    mysql 数据库密码忘记重置 进行远程连接
    打Jar包
    Type interface com.innovationV2.mapper.UserMapper is not known to the MapperRegistry
    关于java基础类型Integer String的clone()
    clion使用clang编译
    token & refresh token 机制总结
  • 原文地址:https://www.cnblogs.com/AICROC/p/12928520.html
Copyright © 2011-2022 走看看