Java SE

一,Java介绍

1,Java是什么/strong>

Java由Sun公司于1995年5月推出的面向对象的程序设计语言。它吸收了C/C++的优点,是一种健壮的语言,具有跨平台,安全性高等特性。

2,Java为什么能跨平台/strong>

Java之所以能在各种操作系统运行是因为Java有针对各个操作系统的虚拟机,因此想要运行Java程序只需装上对应的Java虚拟机即可。(**注意:**Java虚拟机不是跨平台的

3,Java两种核心的机制

(1)Java虚拟机:

? 可以理解成一个可运行 Java 字节码的虚拟计算机系统,它有一个解释器组件,可以实现 Java 字节码和计算机操作系统之间的通信,对于不同的运行平台,有不同的jvm。

(2)垃圾回收器:

? JVM 提供了一种系统线程跟踪存储空间的分配情况。并在 JVM 的空闲时,检查并释放那些可以被释放的存储空间。垃圾回收器在 Java 程序运行过程中自动启用,程序员无法精确控制和干预。

4,JDK与JRE的区别/strong>

  1. Jdk是Java开发工具集,一般是针对于开发人员使用的,其中包含了jre和一些开发工具(Java 编译器(javac.exe)、Java 运行时解释器(java.exe)、Java 文档化化工具 (javadoc.exe)及其它工具及资源)
  2. Jre是运行java运行时环境,一般是针对于客户使用的

5,Java语法

  1. 注释 :java 程序有三种注释方式
  2. 单行注释://注释
  3. 多行注释:/注释/
  4. 文档注释:/*注释/
  5. java 代码的位置
  6. class 必须编写在.java 文件中 (具体详情参考 helloWorld 工程)
  7. 语法规则:
  8. java 是严格区分大小写的
  9. java 是一种自由格式的语言
  10. 代码分为结构定义语句和功能执行语句
  11. 功能执行语句的最后必须用分 结束

6,jdk安装

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eGiOCKG6-1609159647287)(file:///C:Users张浪浪AppDataLocalTempksohtml1732wps1.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5wCP2PKB-1609159647291)(file:///C:Users张浪浪AppDataLocalTempksohtml1732wps2.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ptXzKdo4-1609159647294)(file:///C:Users张浪浪AppDataLocalTempksohtml1732wps3.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DNP2F58q-1609159647298)(file:///C:Users张浪浪AppDataLocalTempksohtml1732wps4.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-68XrLSAp-1609159647300)(file:///C:Users张浪浪AppDataLocalTempksohtml1732wps5.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fcZgyYrJ-1609159647302)(file:///C:Users张浪浪AppDataLocalTempksohtml1732wps6.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QhKkO01q-1609159647303)(file:///C:Users张浪浪AppDataLocalTempksohtml1732wps7.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FuUuc5nb-1609159647304)(file:///C:Users张浪浪AppDataLocalTempksohtml1732wps8.jpg)]

二,基础语法

1,数据类型

(1)基本数据类型(四类八大种)

  1. 整型:long (8个字节,默认值0),short (2个字节,默认值0),int (4个字节,默认值0),byte (1个字节,默认值0,范围:-128~127)
  2. 浮点型:float (4个字节,默认值0.0f),double(8个字节,默认值0.0d)
  3. 布尔:boolean (1个字节,默认值false)
  4. 字符:char (2个字节,默认值‘u0000 ’)

(2)引用数据类型

  • 接口
  • 数组等

2,类型转换

  • boolean 类型不能转换成任何其它数据类型。
  • 自动类型转换:容量小的类型自动转换成容量大的数据类型
  • byte,short,int -> float ->long ->double
  • byte,short,int 不会互相转换,它们三者在计算时会转换成 int 类型

3,标识符

  • 由字母、数字、下划线(_)和美元符 ($)组成
  • 不能以数字开头
  • 区分大小
  • 长度无限制
  • 不能是 Java 中的保留关键字(goto,const)

三,流程控制

1,分支结构

(1)if条件语句

if 条件结构是根据条件判断之后再做处理

  • if(条件语句){…}
  • if (条件语句){…}else{…}
  • if (条件语句){…}else if(条件语句){…}
  • if (条件语句){…}else if(条件语句){…}else{…}

(2)switch语句

switch(表达式){

case 取值 1: 语句块 1;break;

case 取值 n: 语句块 n;break;

default: 语句块 n+1;break;

}

switch 语句有关规则

  1. 表达式的返回值必须是下述几种类型之一:int, byte, char, short,String;
  2. case 子句中的取值必须是常量,且所有 case 子句中的取值应是不同的;
  3. default 子句是可选的;
  4. break 语句用来在执行完一个 case 分支后使程序跳出 switch 语句块;如果 case 后面没有写 break 则直接往下面执行!
  5. Case 后面的执行体可写{ }也可以不写{ }

2,循环语句

(1)for循环

语法:for(初始化参数;判断条件 ;更新循环变量){

? 循环体;

? }

(2)while循环

符合条件,循环继续执行;否则,循环退出

特点:先判断,再执行

语法:while(条件表达式){

? //语句块;

? }

(3)do-while循环

先执行一遍循环操作,符合条件,循环继续执行;否则,循环退出

特点:先执行,再判断 ,最少执行一次循环

语法:do {

? 循环操作

? }while ( 条件表达式 );

四,数组

1,概述

数组是相同数据类型的多个数据的容器,它既可以存储基本数据类型也可以存储引用数据类型

2,数组的创建

格式 1. 数据类型[] 数组名称 = new 数据类型[数组长度];

格式 2. 数据类型[] 数组名称 = {数组内容 1,数组内容 2,数组内容 3…数组内容 n};

格式 3. 数据类型[] 数组名;

格式 3 属于只创建了数组引用名, 并未在内存创建数组空间。

格式 4. 数据类型[] 数组名称 = new 数据类型[]{内容 1,内容 2,内容 3…内容 n};

3,数组常用算法

(1)冒泡排序

原理:

– 比较相邻的元素。如果第一个比第二个大,就交换他们两个。

– 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的

数。

– 针对所有的元素重复以上的步骤,除了最后一个。

– 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较

  • 升序排列的口诀:

N个数字来排队

两两相比小靠前,

外层 循环length-1

内层循环length-i-1

  • 降序排序的口诀:

N个数字来排队

两两相比大靠前,

**外层 循环length-**1

内层循环length-i-1

代码实现:

(2)二分查找

首先,假设数组中元素是按升序排列,将数组中间位置的数据与查找数据比较,如果两者相等,则查找成功;否则利用 中间位置记录将数组分成前、后两个子数组,如果中间位置数据大于查找数据,则进一步查找前子数组,否则进一步查 找后子数组。 重复以上过程,直到找到满足条件的数据,则表示查找成功, 直到子数组不存在为止,表示查找不成功。

代码实现:

五,面向对象基础

1,面向对象思想

(1)概述

面向对象(Object Oriented)是软件开发方法。面向对象的概念和应用已超越了程序设计和软件开发,是一种对现

实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。

面向对象是相对于面向过程来讲的,指的是把 相关的数据和方法组织为一个整体 来看待,从更高的层次来进行系

统建模,更贴近事物的自然运行模式。

面向过程到面向对象思想层面的转变:

面向过程关注的是执行的过程,面向对象关注的是具备功能的对象。

面向过程到面向对象,是程序员思想上 从执行者到指挥者的转变。

(2)三大思想

面向对象思想从概念上讲分为以下三种:OOA、OOD、OOP

  1. OOA:面向对象分析(Object Oriented Analysis)
  2. OOD:面向对象设计(Object Oriented Design)
  3. OOP:面向对象程序(Object Oriented Programming

(3)三大特征

  • 封装性:所有的内容对外部不可见
  • 继承性:将其他的功能继承下来继续发展
  • 多态性:方法的重载本身就是一个多态性的体现

2,类与对象

类表示一个共性的产物,是一个综合的特征,而对象,是一个个性的产物,是一个个体的特征。

类似生活中的图纸与实物的概念。)

类必须通过对象才可以使用,对象的所有操作都在类中定义。

类由属性和方法组成

3,创建对象内存分析

(1)栈内存

存储的是: 基本数据类型的数据 以及 引用数据类型的引用!

栈存储的特点是, 先进后出

存储速度快的原因:

栈内存, 通过 ‘栈指针’ 来创建空间与释放空间 !

指针向下移动, 会创建新的内存, 向上移动, 会释放这些内存 !

(2)堆内存

存放的是类的对象

堆内存与栈内存不同, 优点在于我们创建对象时 , 不必关注堆内存中需要开辟多少存储空间 , 也不需要关注内存占用 时长 ,堆内存中内存的释放是由GC(垃圾回收器)完成的

圾回收器 回收堆内存的规则:

当栈内存中不存在此对象的引用时,则视其为垃圾 , 等待垃圾回收器回收 !

(3)方法区

存放的是

– 类信息

– 静态的变量

– 常量

– 成员方法

方法区中包含了一个特殊的区域 ( 常量池 )(存储的是使用static修饰的成员)

4,构造函数

作用:用于对象初始化。

执行时机: 在创建对象时,自动调用

特点:所有的Java类中都会至少存在一个构造方法。 如果一个类中没有明确的编写构造方法, 则编译器会自动生成一个无参的构造方法, 构造方法中没有任何的代 码! 如果自行编写了任意一个构造器, 则编译器不会再自动生成无参的构造方法。

5,方法重载

  • 方法名称相同, 参数类型或参数长度不同, 可以完成方法的重载 ! 方法的重载与返回值无关!
  • 方法的重载 ,可以让我们在不同的需求下, 通过传递不同的参数调用方法来完成具体的功能

六,面向对象进阶

1,封装(关键字:private)

在开发中, 为了避免出现逻辑错误, 我们建议对所有属性进行封装,并为其提供setter及getter方法进行设置和取得操作。

2,this关键字

在Java基础中,this关键字是一个最重要的概念。使用this关键字可以完成以下的操作:

  • 调用类中的属性
  • 调用类中的方法或构造方法
  • 表示当前对象

3,static关键字

概述:

static表示“静态”的意思,可以用来修饰成员变量和成员方法(后续还会学习 静态代码块 和 静态内部类)。

static的主要作用在于创建独立于具体对象的域变量或者方法

简单理解:

被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访

问。

并且不会因为对象的多次创建 而在内存中建立多份数据

重点:

  • 静态成员 在类加载时加载并初始化。
  • 无论一个类存在多少个对象 , 静态的属性, 永远在内存中只有一份( 可以理解为所有对象公用 )
  • 在访问时: 静态不能访问非静态 , 非静态可以访问静态 !

4,代码块

(1)普通代码块

在方法中出现的 代码块, 我们称其为普通代码块。

作用:限定变量生命周期,及早释放,提高内存利用率。

(2)构造代码块

在类中方法外的代码块, 我们称其为构造代码块, 在每次对象创建时执行, 执行在构造方法之前。

作用:多个构造方法中相同的代码存放到一起,每次调用构造都执行,并且在构造方法之前执行。

(3)静态代码块

在类中使用static修饰的成员代码块, 我们称其为静态代码块, 在类加载时执行。 每次程序启动到关闭 ,只会

执行一次的代码块。

作用:用于加载驱动。

(4)同步代码块

在后续多线程技术中学习。

(5)面试题

构造方法 与 构造代码块 以及 静态代码块的执行顺序:

静态代码块 –> 构造代码块 –> 构造方法

七,面向对象高级

1,抽象类

抽象类必须使用abstract class声明

一个抽象类中可以没有抽象方法。抽象方法必须写在抽象类或者接口中。

格式:

abstract class 类名{ // 抽象类

}

(1)常见问题

  1. 抽象类能否使用final声明/strong>

不能,因为final属修饰的类是不能有子类的 , 而抽象类必须有子类才有意义,所以不能。

  1. 抽象类能否有构造方法/strong>

能有构造方法,而且子类对象实例化的时候的流程与普通类的继承是一样的,都是要先调用父类中的

构造方法(默认是无参的),之后再调用子类自己的构造方法。

(2)抽象类与普通类的区别

抽象类必须用public或procted 修饰(如果为private修饰,那么子类则无法继承,也就无法实现其

抽象方法)。默认缺省为 public

抽象类不可以使用new关键字创建对象, 但是在子类创建对象时, 抽象父类也会被JVM实例化。

如果一个子类继承抽象类,那么必须实现其所有的抽象方法。如果有未实现的抽象方法,那么子类也必

须定义为 abstract类

2,接口

(1)接口的继承

接口因为都是抽象部分, 不存在具体的实现, 所以允许多继承,例如:

interface C extends A,B{

}

(2)接口和抽象类的区别

1、抽象类要被子类继承,接口要被类实现。

2、接口只能声明抽象方法,抽象类中可以声明抽象方法,也可以写非抽象方法。

3、接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。

4、抽象类使用继承来使用, 无法多继承。 接口使用实现来使用, 可以多实现

5、抽象类中可以包含static方法 ,但是接口中不允许(静态方法不能被子类重写,因此接口中不能声明

静态方法)

6、接口不能有构造方法,但是抽象类可以有

3,多态

对象的多态性,从概念上非常好理解,在类中有子类和父类之分,子类就是父类的一种形态 ,对象多态性

就从此而来。

ps: 方法的重载 和 重写 也是多态的一种, 不过是方法的多态(相同方法名的多种形态)。

重载: 一个类中方法的多态性体现

重写: 子父类中方法的多态性体现

4.instanceof

作用:

判断某个对象是否是指定类的实例,则可以使用instanceof关键字

格式:

实例化对象 instanceof 类 //此操作返回boolean类型的数据

5,Object类

Object类是所有类的父类(基类),如果一个类没有明确的继承某一个具体的类,则将默认继承Object

(1)toString

建议重写Object中的toString方法。 此方法的作用:返回对象的字符串表示形式。

Object的toString方法, 返回对象的内存地址

(2)equlse

建议重写Object中的equals(Object obj)方法,此方法的作用:指示某个其他对象是否“等于”此对

象。

Object的equals方法:实现了对象上最具区别的可能等价关系; 也就是说,对于任何非空引用值x和

y ,当且仅当x和y引用同一对象( x == y具有值true )时,此方法返回true 。

equals方法重写时的五个特性:

自反性 :对于任何非空的参考值x , x.equals(x)应该返回true 。

对称性 :对于任何非空引用值x和y , x.equals(y)应该返回true当且仅当y.equals(x)回

true 。

传递性 :对于任何非空引用值x , y和z ,如果x.equals(y)回 true个y.equals(z)回 true

,然后x.equals(z)应该返回true 。

一致性 :对于任何非空引用值x和y ,多次调用x.equals(y)始终返回true或始终返回false ,前

提是未修改对象上的equals比较中使用的信息。

非空性 :对于任何非空的参考值x , x.equals(null)应该返回false 。

6,包装类

  • 1 int Integer
  • 2 char Character
  • 3 float Float
  • 4 double Double
  • 5 boolean Boolean
  • 6 byte Byte
  • 7 short Short
  • 8 long Long

以上的八种包装类,可以将基本数据类型按照类的形式进行操作。

但是,以上的八种包装类也是分为两种大的类型的:

· Number:Integer、Short、Long、Double、Float、Byte都是Number的子类表示是一个

数字。

· Object:Character、Boolean都是Object的直接子类

7,自动拆装箱

(1)装箱操作:

在JDK1.4之前 ,如果要想装箱,直接使用各个包装类的构造方法即可,例如:

int temp = 10 ; // 基本数据类型

Integer x = new Integer(temp) ; // 将基本数据类型变为包装类

在JDK1.5,Java新增了自动装箱和自动拆箱,而且可以直接通过包装类进行四则运算和自增自建操作。例

如:

Float f = 10.3f ; // 自动装箱

float x = f ; // 自动拆箱

System.out.println(f * f) ; // 直接利用包装类完成

System.out.println(x * x) ; // 直接利用包装类完成

(2)字符串转换

使用包装类还有一个很优秀的地方在于:可以将一个字符串变为指定的基本数据类型,此点一般在接收输入

数据上使用较多。

在Integer类中提供了以下的操作方法:

public static int parseInt(String s) :将String变为int型数据

在Float类中提供了以下的操作方法:

public static float parseFloat(String s) :将String变为Float

在Boolean 类中提供了以下操作方法:

public static boolean parseBoolean(String s) :将String变为boolean

8,可变参数

一个方法中定义完了参数,则在调用的时候必须传入与其一一对应的参数,但是在JDK 1.5之后提供了新的

功能,可以根据需要自动传入任意个数的参数。

语法:

返回值类型 方法名称(数据类型…参数名称){

//参数在方法内部 , 以数组的形式来接收

}

注意:

可变参数只能出现在参数列表的最后

八,异常

1,jvm默认处理异常的方式

当主函数接收异常会有两种处理方式

  1. 自己处理异常,并继续执行一下程序,也就是try,catch的方式
  2. 自己处理不了就抛给jvm,jvm收到异常,将该异常的名称以及信息打印到控制台上,并将将程序

2,编译器异常与运行期异常的区别

所有的RuntimeException及其子类的实例被称为运行期异常,其他均为编译期异常。

  • 编译器异常:java程序必须显示处理,否则就会出错,无法编译通过。
  • 运行期异常:无需显示处理,也可以和编译期异常异常一起处理

3,throw概述

在功能方法内部出现某种情况,程序将不能继续运行,需要进行跳转时,就用throw把异常抛出。

4,throw与throws的区别

  • throws:用在方法声明后面。跟的是异常类名。可以跟多个异常类名,用逗 隔开。表示抛出异常,由该方法的调用者处理
  • throw:用在方法内部,跟的是异常对象,只能抛出一个异常对象。表示抛出异常,由该方法体内的语句处理。

5,关键字finally特点

被finally控制的语句一定会执行,除非在此之前退出Java虚拟机(如:System.exit(0)),用于释放资源。

6,final,finally,finalize的区别

  • final:修饰类,该类不能被继承,修饰方法,该方法不能被重写,修饰的变量是常量。
  • finally:写在try catch语句用于释放资源
  • finalize:是一个方法,在垃圾回收是调用。

7,如何使用异常处理

原则:如果该功能内部可以将问题处理用try,处理不了,用throws

区别:后续程序需要继续运行用try,不需要继续运行用throws

九,常用类库

1,String概述

String是一个不可变的字符序列

(1)常用构造方法

(2)String类的判断功能

(3)String类的获取功能

(4)String类的转换功能

(5)String类的其他功能

2,Arrays类的概述和方法使用

3,Math类概述和方法使用

Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。


                                                        

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年11月25日
下一篇 2020年11月25日

相关推荐