一,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>
- Jdk是Java开发工具集,一般是针对于开发人员使用的,其中包含了jre和一些开发工具(Java 编译器(javac.exe)、Java 运行时解释器(java.exe)、Java 文档化化工具 (javadoc.exe)及其它工具及资源)
- Jre是运行java运行时环境,一般是针对于客户使用的
5,Java语法
- 注释 :java 程序有三种注释方式
- 单行注释://注释
- 多行注释:/注释/
- 文档注释:/*注释/
- java 代码的位置
- class 必须编写在.java 文件中 (具体详情参考 helloWorld 工程)
- 语法规则:
- java 是严格区分大小写的
- java 是一种自由格式的语言
- 代码分为结构定义语句和功能执行语句
- 功能执行语句的最后必须用分 结束
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)基本数据类型(四类八大种)
- 整型:long (8个字节,默认值0),short (2个字节,默认值0),int (4个字节,默认值0),byte (1个字节,默认值0,范围:-128~127)
- 浮点型:float (4个字节,默认值0.0f),double(8个字节,默认值0.0d)
- 布尔:boolean (1个字节,默认值false)
- 字符: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 语句有关规则
- 表达式的返回值必须是下述几种类型之一:int, byte, char, short,String;
- case 子句中的取值必须是常量,且所有 case 子句中的取值应是不同的;
- default 子句是可选的;
- break 语句用来在执行完一个 case 分支后使程序跳出 switch 语句块;如果 case 后面没有写 break 则直接往下面执行!
- 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
- OOA:面向对象分析(Object Oriented Analysis)
- OOD:面向对象设计(Object Oriented Design)
- 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)常见问题
- 抽象类能否使用final声明/strong>
不能,因为final属修饰的类是不能有子类的 , 而抽象类必须有子类才有意义,所以不能。
- 抽象类能否有构造方法/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默认处理异常的方式
当主函数接收异常会有两种处理方式
- 自己处理异常,并继续执行一下程序,也就是try,catch的方式
- 自己处理不了就抛给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进行处理,非常感谢!