• 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空闲时回收

    方法区:

    本地方法区:

    寄存器:

  • 相关阅读:
    领域驱动设计学习笔记
    Entity Framework 入门
    2019秋招复习笔记--面试经历记录总结
    Windows10 系统更新之后找不到输入法
    jumper-server-部署官网版
    docker java环境 直接做成镜像 跑自己的java包
    联想thinkpad如何关闭触摸板
    docker 安装
    阿里yum源与华为yum源的配置
    Backbone简介
  • 原文地址:https://www.cnblogs.com/AICROC/p/12928520.html
Copyright © 2020-2023  润新知