java基础汇总

2020-11-06  本文已影响0人  kaixingdeshui

本遍主要是记录下最近复习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中所有的复制都是浅层复制,浅层复制的效率快,能适用大部分场景。

上一篇 下一篇

猜你喜欢

热点阅读