美文网首页
java基础汇总

java基础汇总

作者: kaixingdeshui | 来源:发表于2020-11-06 00:08 被阅读0次

    本遍主要是记录下最近复习java基础的一些情况。

    什么是java?

    java语言是美国Sun公司(Stanford University Network),在1995年推出的高级编程语言。
    编程语言:是计算机的语言,人们可以使用编程语言对计算机下达命令,让计算机完成人们需要的功能。

    java发展史

    1991.4 Sun公司成立Green项目小组(James Gosling),开发出Oak橡树语言
    1995.5 Oak更名为java,提出'Write One,Run Anywhere'的口号
    1996.1 JDK1.0发布,代表技术包括:Java虚拟机,Applet,Awt等
    1997.2 JDK1.1发布
    1998.12 JDK1.2 Playground发布,分为J2SE,J2EE和J2ME三大版本
    2006.11 JavaOne大会,Sun公司宣布将Java开源
    2006.12 JDK6 Mustang发布
    2009.4 Oracle收购Sun
    2014.3 Oracle发布JDK8

    java 版本的介绍

    JavaSE(Java Platform Standard Edition):可以理解为JavaSE是java的基石,如果将java程序想像成一座大厦,那么javaSE就是地基,它是学习整个java需掌握的基础;
    JAVAEE(Java Platform Enterprise Edition):是Sun公司为企业级应用退出的标准平台,用来开发大型企业级的应用系统;
    JavaME(Java Platform Micro Edition):是为机顶盒,移动电话和PDA之类嵌入式消费电子设备提供java语言平台,包括虚拟机和一系列标准化的Java API;目前已经不使用了;

    Java特点

    简单
    跨平台
    面向对象

    JVM,JDK,JRE三者的解释
    JVM(Java Virtual Machine):Java 虚拟机,简称JVM,是运行所有java程序的假想计算机,是Java程序的运行环境,是Java最具吸引力的特性之一。编写的java代码都运行在JVM之上。
    JDK(Java Develpment Kit):是Java程序开发工具包,包含JRE和开发工具;
    JRE(Java runtime Environment):是Java程序的运行时环境,包含JVM和运行时所需的核心类库。

    Java代码编译与执行

    java文件通过JRE编译后成class字节码文件,再到装有JVM虚拟机的各平台执行(Windows,Unix,Mac OS,Ohters)。

    Java执行原理

    Java源文件-->class字节码文件-->jvm-操作系统
    编译期:通过javac命令把java源代码编译成class字节码文件
    运行期:通过命令启动JVM,JVM加载class文件,运行class文件

    一个java文件,里面可以有多个类,但是只能有一个public修饰的类,并且public修饰的类的名称,必须跟文件名完全一样;
    一类中,只能出现一个主函数(main方法),但是可以出现多个其它函数,每个类都可以有自己的主函数,若有多个,执行的时候,会让你选择要执行的主函数;
    一个java文件编译后,里面的每个类都会编译成单独的class文件;

    语法:package包名;
    位置:必须位于java文件的第一行;
    作用:类似于文件夹,用来分类管理代码和字节码文件的;
    起名规则:使用域名倒置的写法;

    Java 数据类型和运算符

    变量:是内存中的一小块区域,使用变量名来访问这这块区域。即程序执行中数据可变的数据。

    Java变量使用前必须先声明和初始化(赋初值)

    变量声明语法格式:数据类型 变量名[=值];

    java是强类型语言,所有的变量必须有数据类型。

    变量作用域:某个变量有效的范围称为作用域范围,在这个作用域内,该变量可以随时使用以及重复赋值,但是不能再次声明,超过这个范围,变量会被垃圾回收进行回收掉。

    变量分类:全局变量,局部变量,常量和直接量

    标识符
    在程序中,定义的各种名字,比如类的名字,方法的名字和变量的名字等等,都是标识符。

    标识符的命名规则
    由大小英文字母,数字,下划线和$组成
    不能以数字开头
    不能是关键字

    标识符的命名规范

    类名规范:首字母大写,后面每个单词首字母大写(大驼峰式)
    方法名规范:首字母小写,后面每个单词首字母大写(小驼峰式)
    变量名规范:全部小写

    关键字
    指程序中,Java已经定义好的单词,具有特殊含义。

    Java数据类型:基本数据类型,引用数据类型
    基本数据类型:整数,小数,布尔,字符
    引用数据类型:字符串,数组,对象

    8种数据类型
    整数

    类型 字节 取值范围 取值范围
    byte 1字节 -2^7 ~ 2^7-1 -128 ~127
    short 2字节 -2^15 ~ 2^15-1 -32768 ~ 32767
    int 4字节 -2^31 ~ 2^31-1 -2147483648 ~ 2147483647
    long 8字节 -2^63 ~ 2^63-1 -9223372036854775808 ~ 9223372036854775807

    浮点数

    类型 字节 负数取值范围 正数取值范围
    float 4字节 -3.4E+38 ~ -1.4E-45 1.4E-45 ~3.4E+38
    double 8字节 -1.7E+308 ~ -4.9E-324 4.9E-324 ~ 1.7E+308

    布尔

    类型 字节 取值范围(无符号数) 字节编码
    char 2字节 0 ~ 65535 Unicode字符集

    转义字符

    转义字符 描述
    \n 换行符
    \t 缩进(制表位)
    \ 反斜线
    ' 单引号
    " 双引号

    类型转换
    自动转换,强制转换;同类型转换;不同类型转换;整形转字符;

    运算符
    算术运算符:2个数的运算:+加 -减 *乘 /除 %求余
    一个数的运算:++加加,--减减

    比较运算符:是两个数据之间进行比较的运算,运算结果都是布尔值true或false。

    操作符 描述
    > 大于
    < 小于
    >= 大于等于
    <= 小于等于
    == 等于
    != 不等于

    逻辑, 三元运算符
    逻辑运算符:是用来连接两个布尔类型结果的运算符,运算结果都是布尔值true或者false。

    操作符 语义 描述
    && 与(并且) 两个操作数,同时为真,结果为真
    || 或 (或者) 两个操作数,有一个为真,结果为真
    ! 非 (取反) 不是,真即是假,假即是真

    三元运算符(三目运算符):先判断后处理

    操作符 语义 描述
    ? : 布尔表达式?结果1:结果2 当表达式结果为真,获得结果1,当表达式结果为假,获得结果2

    java数组

    1.容器

    将多个不同的数据存储在一起,这个存储这些数据的地方。容器里的每个数据称该容器的元素。
    常见容器:java容器分为 数组集合

    2.数组

    存储指定数据长度的容器,并且保证数组里的数据的数据类型要一致。

    数组初始化

    静态初始化

    数组在定义出来就是有数据的,在后期很少进行更改的初始化

    定义的方式

    数据类型 [] 数组名 = new 数据类型[]{元素1,元素2,...};

    数组的长度定义出来不能更改。

    动态初始化

    数组在定义的时候,往往还无法确定里面的元素以及数组的大小,所以只是定义了元素的类型和长度,在具体的业务逻辑中进行扩容及元素的赋值

    定义方式

    数据类型 [] 数组名 = new 数组存储的数据类型[长度];

    数组的访问

    数组的长度

    每个数组都具有长度而且是固定的,java中赋予了数组一个属性,可以获取到数组的长度:数组名.length,属性length的执行结果是数组的长度,int类型结果。即数组的最大索引值为数组名.lenth-1 。

    索引

    每一个存储到数组的元素,都会自动的拥有一个编号,从0开始,这自动编号称为数组索引(index),可以通过数组的索引访问到数组中的元素。

    数组的访问和赋值

    数组的访问: 变量 = 数组名[索引],获取出数组中的元素
    数组的赋值: 数组名 [索引] = 数值,为数组中的元素赋值

    遍历

    将容器中的每个元素分别获取出来,遍历方式往往使用for循环或者是forearch循环。

    foreach 遍历

    for(元素类型 变量名: 要遍历的容器对象){
    变量名就是容器中的元素
    }

    foreach循环特点:必须从头循环到尾,没有 i 作为下标进行操作,所以整体循环的速度比 for 循环快,但是灵活性不如for循环

    数组排序

    选择排序

    选择排序的工作原理是把一个数组中的所有元素分成两部分,一部分为被比较元素,一部分为比较元素,然后不断的拿着比较的元素来逐一跟被比较元素进行比较,如果比 被比较的小,则调换位置,比较完一轮之后,可以拿到最小值,然后把元素下标往前移动一位继续进行比较,直到完成排序.
    Java代码的实现

    /**
         * 选择排序
         * 外层:比较元素的移动轨迹,从0到倒数第二个
         * 内层:被比较元素的移动轨迹,从i+1到最后一个
         */
        public static void choiceSort(){
            int [] arr = {3,1,6,4,5,2,7,9,8};
            System.out.println(Arrays.toString(arr));
            for (int i=0;i<arr.length;i++){
                for (int j=i+1;j<arr.length;j++){
                    //元素交换
                    if (arr[i]>arr[j]){
                        int temp = arr[i];
                        arr[i] = arr[j];
                        arr[j] = temp;
                    }
                }
            }
            System.out.println(Arrays.toString(arr));
        }
    
    冒泡排序

    它会遍历若干次要排序的数列,每次遍历时,它都会从前往后依次的比较相邻两个数的大小;如果前者比后者大,则交换它们的位置。这样,一次遍历之后,最大的元素就在数列的末尾;采用相同的方法再次遍历时,第二大的元素就被排列在最大元素之前;重复此操作,直到整个数列都有序为此。

     /**
         * 冒泡排序
         * 外层:元素比较的轮数,需要完成多少次大的轮回才能获得最终的排序结果:0~length-1
         * 内层:两两元素比较的轨迹,0~length-1-i
         */
        public static void bubbleSort(){
            int [] arr = {3,1,6,4,5,2,7,9,8};
            System.out.println(Arrays.toString(arr));
            for (int i=0;i<arr.length-1;i++){
                for (int j=0;j<arr.length-1-i;j++){
                    //元素交换
                    if (arr[j]>arr[j+1]){
                        int temp = arr[j];
                        arr[j] = arr[j+1];
                        arr[j+1] = temp;
                    }
                }
            }
            System.out.println(Arrays.toString(arr));
        }
    

    十大经典排序算法
    https://www.runoob.com/w3cnote/ten-sorting-algorithm.html

    Java API

    API(Application Programming Interface)应用程序编程接口,Java API 是一本程序员字典,是JDK中提供给我们使用的类的说明文档。

    jdk1.8官方文档
    https://docs.oracle.com/javase/8/docs/api

    image.png

    常用的类
    Math类

    包含执行基本数学运算的方法,如指数,对数,平方根和三角函数

    Math类中的常量

    static double E:比任何其他值都更接近e的double值。
    static double PI:比任何其他值都更接近PI的double值。
    Math类中的常用方法:
    abs:求绝对值
    floor:去掉小数位
    round:去掉小数位(四舍五入)
    random:求随机数

    System类

    包含一些有用的类字段和方法。它不能被实例化。

    System类中的常量

    err:错误输出流
    in:输入流
    out: 输出流

    System类中常用方法

    exit : 退出程序
    arrarycopy :数组复制
    currentTimeMillis() : 获取当前的时间ms,1970,时间戳

    Arrays类

    包含用来操作数组(排序和搜索)的各种方法

    Arrays类中常用的方法

    binarySearch:使用二分查找指定的元素在数组中的位置
    copyOf:数组复制
    equals:数组中的内容是否相同
    fill:把数组里面的元素填充指定的内容
    sort: 数组的排序
    toString:把数组里面的内容按照指定格式输出

    数组的复制
    通过Arrays类

    Arrays.copyOf(Object[] original, int newLength);
    Arrays.copyOfRange(Object[] original, int from, int to);

    通过System类

    System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length);

    Arrays和System这两种复制的区别:
    1.Arrays里的复制方法底层是System的复制,在System基础上封装,变得更加方便使用;
    2.Arrays完成复制之后,会把新数组返回,而System则需要你提前定义好一个数组;

    深复制和浅复制
    深复制

    不仅复制外层容器,还复制了容器里面的所有元素,常用的深层复制方式是使用IO流中的序列化和反序列化,效率低,只适合一些特殊场合。

    浅复制

    只复制最外层容器,而不复制容器里面的元素,Java API中所有的复制都是浅层复制,浅层复制的效率快,能适用大部分场景。

    相关文章

      网友评论

          本文标题:java基础汇总

          本文链接:https://www.haomeiwen.com/subject/nnlavktx.html