java从入门到精通
2023-06-10 18:40:54 11 举报
AI智能生成
Java
作者其他创作
大纲/内容
Java是Sun公司推出的能够跨越多平台的、可移植性最高的一种面向对象的编程语言,也是目前最先进、特征最丰富、功能最强大的计算机语言
Java简介
1. 面向对象 Java 是一种面向对象的语言,它对对象中的类、对象、继承、封装、多态、接口、包等均有很好的支持。 为了简单起见,Java 只支持类之间的单继承,但是可以使用接口来实现多继承。 ...2. 平台无关性 平台无关性的具体表现在于,Java 是“一次编写,到处运行(Write Once,Run any Where)”的语言 ,因此 采用 Java 语言编写的程序具有很好的可移植性, 而保证这一点的正是 Java 的虚拟机机制。 ...3. 简单性 Java 语言的语法与 C 语言和 C++ 语言很相近,使得很多程序员学起来很容易。 ...4. 解释执行 Java 程序在 Java 平台运行时会被编译成字节码文件,然后可以在有 Java 环境的操作系统上运行。 ...
Java语言的特性
JDK下载和配置环境变量
搭建Java环境
初识Java
Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境
熟悉Eclipse
使用Eclipse
程序调试
熟悉Eclipse开发工具
Java语言是面向对象的程序设计语言,Java程序的基本组成单元是类
Java主类结构
整数类型简称整形,用来存储整数数值,即没有小数部分的数值。可以是正数,也可以是负数。整数数据根据他所占内存的大小,也可分为byte,short,int,long4种类型
整数类型
浮点类型简称浮点型,用来存储含有小数部分的数值。Java语言中浮点类型分为单精度浮点类型和双精度浮点类型
浮点类型
char型,字符类型(char)用于存储单个字符,占用16位的内存空间转义字符,是一种特殊的字符变量,以反斜杠“\\”开头,后跟一个或者多个字符
字符类型
布尔类型又称逻辑类型,简称布尔型,通过关键字boolean来定义布尔类型变量。布尔类型只有trne和false两个值,分别代表布尔逻辑中的\"真\"和\"假\"
布尔类型
基本数据类型
标识符可以简单理解为一个名字,用来标识类名,变量名,方法名,数组名,文件名的有效字符序列关键字又称保留字,是Java语言中已经被赋予特定意义的一些单词,不可以把这些单词作为标识符来使用
标识符和关键字
变量的使用是程序设计中一个十分重要的环节。声明变量就是要告诉编译器这个变量的数据类型,作业编译器才知道需要配置多少空间给它,以及它能存放什么样的数据
声明变量
在程序运行过程中一直不会改变的量称为常量,通常也称为“final变量”。常量在整个程序中只能被赋值一次
声明常量
由于变量被定义出来只是暂存在内存中,等到程序执行到某一个点,该变量会被释放掉,也就说变量有他的生命周期,因此,变量的有效范围是指程序代码能够访问该变量的区域,若超出该区域,则在编译时会出现错误
变量的有效范围
变量与常量
赋值运算符用“=”表示,它是一个二元运算符,其功能是将右方操作数所含的值赋给左方的操作数
赋值运算符
Java中的算术运算符主要有+ - * \\ %,它们都是二元运算符
算术运算符
自增,自减运算符是单目运算符,可以放在操作元之前,也可以放在操作元之后,操作元必须是一个整形或浮点型变量。自增,自减运算符的作用是是变量的值增1或减1。符号在前,先运算后使用,符号在后,先使用后运算。
自增和自减运算符
比较运算符属于二元运算符,用于程序中的变量之间,变量和自变量之间以及其他类型的信息之间的比较。比较运算符的运算结果是boolean型。
比较运算符
返回类型为布尔型的表达式,如比较运算符,可以被组合在一起构成一个更复杂的表达式,这是通过逻辑运算符来实现的(&& 两者都为真,结果才是真。||只要有一者为真,结果就是真)非真即假,非假即真(&两者都是1,结果才是1。只要有一者为1,结果就是1)
逻辑运算符
按位取反运算,运算符为“~”1为0,0为1按位异或运算,运算符是“^”两者相同为0,不相同为1移位操作,<<左移:整体左移,空位补0,溢出去掉>>右移:整体右移,正数补0,负数补1,溢出去掉>>>无符号右移:整体右移,空位补0,溢出去掉
位运算符
返回值=判断公式?结果1:结果2
三元运算符
优先级由高到低的顺序依次是增量和减量运算算术运算比较运算逻辑运算赋值运算
运算符优先级
运算符
隐式类型转换,又叫自动类型转换,一定不会丢失数据
隐式类型转换
显示类型转换,又叫强制类型转换,有可能会丢失数据
显式类型转换
数据类型转换
单行注释://多行注释:/* */文档注释:/** */
代码注释
编码规范
代码注释与编码规范
Java语言基础
复合语句
if(布尔表达式){ 语句序列}
if条件语句
switch语句中表达的值必须是整型,字符型,字符串类型或枚举类型,常量值1~n的数据类型必须与表达式的值的类型相同
switch条件语句
条件语句
while语句也称条件判断语句,它的循环方式为利用一个条件来控制是否要继续反复执行这个语句
while循环语句
do...while循环语句与while循环语句类似,他们之间的区别是while语句为先判断条件是否成立再执行循环,而do...while语句是先执行一次循环再判断条件是否成立
do...while循环语句
for循环是Java程序中最有用的循环之一,一个for循环可以用来重复执行某条语句,直到某个条件得到满足
for循环语句
循环语句
使用break语句可以跳出switch结构,在循环语句中,同样也可用break语句跳出当前循环体,从而中断当前循环
break语句
continue语句是针对break语句的补充,continue语句不是跳出当前循环,而是跳过本次循环,回到循环的条件测试部分,重新开始执行循环
continue语句
循环控制
流程控制
数组是具有相同数据类型的一组数据的集合,数组中的每个元素具有相同的数据类型在Java中同样将数组看做一个对象,虽然基本数据类型不是对象,但由基本数据类型组成的数组确是对象。在程序设计中引入数组可以更有效的管理和处理数据。可根据数组的维数将数组分为一维数组,二维数组......
数组概述
先声明,再用new关键字进行内存分配。声明一维数组有以下两种方式 数组元素类型 数组名字【】; 数组元素类型【】 数组名字;
创建一维数组
数组与基本数据类型一样可以进行初始化操作,数组的初始化可以初始化数组中的每个元素
初始化一维数组
一维数组
数组的声明:数组元素的类型【】 数组名;数元素的类型 数组名 【】;
创建二维数组
子主题
初始化二维数组
二维数组
遍历数组就是获取数组中的每个元素,通常遍历数组都是用for循环来实现
遍历数组
填充替换数组元素
通过Array类的静态方法sort()可以对数组进行排序语法:Array.sort(数组名)
对数组进行排序
复制数组
查询数组
数组的基本操作
是最常用的数组排序算法之一,它排序数组元素的过程总是将小的数往前放,较大的往后放,类似水中冒泡往上升的动作,所以叫冒泡排序
冒泡排序
属于一种选择排序,排序速度要比冒泡排序快点,也是常用的排序
直接选择排序
以相反的顺序把原有数组的元素重新排序,也是经常用到的一种排序方法
反转排序
数组排序算法
数组
静态部分:不能动的部分,称为“属性\"
动态部分:对象可执行的动作,称为“行为”
对象是事物存在的实体,世间万物皆对象。对象分为两个部分,即静态部分与动态对象部分
对象
类是统一事物的统称,如果将现实世界中的一事物抽象成对象,类就是这类对象的统称。 类是对象的设计图;类是封装对象的属性和行为的载体,具有相同属性和行为的一类实体被称为类。类对象的行为是以方法的形式定义的,对象的属性是以成员变量的形式定义的,所以类包括对象的属性和方法。
类
面向对象程序设计具有以下特点:封装性、继承性和多态性。封装是面向对象编程的核心思想。将对象的属性和行为封装起来,其载体就是类,类通常对客户隐藏其实现细节,这就是封装的思想。
封装
类与类之间同样具有关系,这种关系被称为关联。两个类之间的关系有很多种,继承是关联中的一种。设计软件时,使用继承思想可以缩短软件开发的周期,复用那些已经定义好的类可以提高系统性能,减少系统在使用过程中出现错误的概率。
继承
将父类对象应用与子类的特征就是多态
多态
面向对象概述
在Java中,对象的属性也称为成员变量,成员变量可以是任意类型,整个类中均为成员变量作用范围。
成员变量
在Java语言中,使用成员方法对应于类对象的行为。定义成员方法的语法格式如下:权限修饰符 返回值类型 方法名(参数类型 参数名){.... //方法体return 返回值;}
成员方法
权限修饰符
如果在成员方法内定义一个变量,那么这个变量被称为局部变量。在实际上,方法中的形参也可以作为一个局部变量。
局部变量
可以将局部变量的有效范围称为变量的作用域
局部变量的有效范围
this关键字用于表示本类当前的变量当前对象不是某个new出来的实体对象,而是正在编辑的类,this关键字只能在本类中使用
this关键字
在类中,出成员方法外,还存在一种特殊类型的方法,那就是构造方法。构造方法是一个与类同名的方法,对象的创建就是通过构造方法完成的。构造方法的特点:构造方法没有返回值。构造方法的名称要与本类的名称相同。 构造方法的定义语法格式:(public :构造方法修饰符;Name:构造方法的名称)public Name(){..... //构造方法体}
类的构造方法
由static修饰的变量和方法被称为静态变量和动态方法。被声明为static的变量和方法被称为静态成员。静态成员属于类所有,区别于个别对象,可以在本类或其他类使用类名和”.“运算符调用静态成员。语法如下:类名.静态类成员
静态变量和静态方法
主方法是类的入口点,它定义了程序从何处开始。主方法提供对程序流向的控制,Java编译器通过主方法来执行程序。在主方法的定义中可以看到其具有以下特点:主方法是静态的,所以如要直接在主方法中条用其他方法,则该方法必须也是静态的。主方法没有返回值。
类的主方法
对象可以认为是在一类事物中抽象出某一个特例,可以通过这个特例来处理这类事物出现的问题
对象的创建
使用new操作符创建一个对象后,可以使用\"对象.类成员\"来获取对象的属性和行为
访问对象的属性和行为
在Java中,尽管一切都可以看作是对象,但真正的操作标识符实质上是一个引用引用表现方式:类名 对象的引用变量
对象的引用
每个对象都有生命周期,当对象的生命周期结束,分配给该对象的内存地址需要被回收
对象的销毁
类和对象
父类Parent
子类Child
继承在面向对象开发思想中是一个非常重要的概念,它使整个程序架构具有一定的弹性,在程序中复用已经定义完善的类不仅可以减少软件开发周期,还可以提高软件的可维护性和可扩展性。
类的继承
学习使用class关键字定义类时 ,就应用了继承原理 ,因为在Java中,所有的类都直接或间接继承了java.lang.Object类。Object类是比较特殊的类,它是所有类的父类,是Java类层中的最高层类
Object类
向上转型可以理解为将子类类型的对象转换为父类类型的对象,即把子类类型的对象直接赋值给父类类型的对象,进而实现按照父类描述子类的效果
向上转型
向下转型可以被理解为将父类类型的对象转换为子类类型的对象。但是,运用向下转型,如果一个较抽象的类的对象转换为一个较具体的类的对象,这样的转型通常会出现错误
向下转型
对象类型的转换
instanceof是Java语言的关键字,在Java语言中的关键字都为小写
使用instanceof关键词判断对象类型
构造方法的名称由类名决定,构造方法只有一个名称,但如果希望以不同的方式来实例化对象,就需要使用多个构造方法来完成。由于这些构造方法都需要根据类名进行命名,为了让方法名相同而形参不同的构造方法同时存在,必须用到“方法重载”
方法的重载
final关键字可用于变量声明,一旦该变量被设定,就不可以再改变该变量的值。通常,由final定义的变量为常量
final变量
定义为fǐnal的方法不能被重写。将方法定义为fǐnal类型可以防止子类修改该类的定义与实现方式,同时定义final的方法的执行效率要高于非final方法
final方法
定义为fǐnal的类不能被继承。如果希望一个类不允许任何类继承,并且不允许其他人对这个类进行任何改动,可以将这个类设置为fǐnal形式
final类
final关键词
利用多态可以使程序具有良好的扩展性,并可以对所有类对象进行通用的处理假如现在要编写一个绘制图形的方法 draw(),如果传入正方形对象就绘制正方形,如果传入圆形对象就绘制圆形,这种场景可以使用重载来实现,定义如下:
Java中定义抽象类时,需要使用abstract关键字,其语法如下:[权限修饰符] abstract class 类名 { 类体 }使用abstract关键字定义的类称为抽象类,而使用abstract关键字定义的方法称为抽象方法。抽象方法的定义语法如下:[权限修饰符] abstract 返回参数 方法名 (传入参数);
抽象类
接口是抽象类的延伸,可以将它看作是纯粹的抽象类,接口中的所有方法都没有方法体。可以将draw)方法封装到一个接口中,这样可以让一个类既能继承图形类,又能实现draw)方法接口,这就是接口存在的必要性。在下图中描述了各个子类继承图形类后使用接口的关系。
接口
抽象类与接口
继承,多态,抽象类与接口
在Java中,我们可以使用class关键字来进行定义一个类,在程序被编译后就会产生一个.class文件。类的定义是规定类名不能重复的,如果程序内只定义了少量的类,那自然不用担心这个问题。但是,随着类的数量增多,那么难免会出现这个问题,如果根据需求需要定义两个名字相同但是程序逻辑不同的类时,那么该如何解决呢,最好的方法就是将这个两个类放置在不同的包下面。
类名冲突
如果一个程序内存在多个同名不同包的max类,在使用该类时使用该类的类路径,也成为绝对路径。
完整的类路径
在进行创建包的时候需要注意的是,Java包的命名规则建议使用全小写字母进行命名
创建包
在Java中,如果需要使用到其它包内的类的话,除了使用该类的绝对路径之外,我们还可以使用Java中 import 关键字来指定。例如,如果在其它包内也定义了一个Math,那么假如我们只想使用该Math类的话,那么我们可以使用import关键字进行导包
导入包
Java类包
定义在一个类成员位置的内部类,称为成员内部类,在成员内部类中可以使用外部类的的任意成员变量与成员方法,即使该外部类成员变量被private所修饰
成员内部类
匿名内部类本质是一个隐藏了名字的内部类。匿名类是只有在创建时才会编写类体的一种写法。语法格式:new 继承/实现(){ //重写的方法};匿名内部类在一对大括号 { } 的范围内是一个类,整体却是一个new出来的对象
匿名内部类
内部类
包和内部类
在程序中,可能会因为各种程序员预料不到的异常出现,也可能由超过程序员可控范围的环境因素产生,如用户的坏数据,试图打开一个根本不存在的文件等,在java中,被称为异常
异常概述
通常,为了保证程序有效的运行,需要对抛出的异常进行相应的处理
抛出异常
try,catch语句就是用来捕捉和处理异常的
捕捉异常
异常的抛出与捕捉
Java常见的异常类
用户只需要继承Exception类即可自定义异常类,大体可以分为以下几个步骤:1.创建自定义异常类2.在方法中通过throw关键字抛出异常对象3.如果在当前抛出异常的方法中处理异常,可以使用try-catch语句块捕获并处理,否则在方法的声明处通过throw关键字指明要抛出给方法调用者的异常,继续进行下一步操作
自定义异常
throws关键字通常被用于声明方法时,用来指定可能抛出的异常,多个异常可使用逗号分隔
使用throws关键字抛出异常
throw通常用于方法体中,并且抛出一个异常对象,程序在执行到throw语句立刻中断,它后面的语句不会执行
使用throw关键字抛出异常
在方法中抛出异常
RuntimeException异常时程序运行中抛出的异常,java类库的每个包中都定义了异常类所有这些类都是Throwable类的子类,Throwable类派生了两个子类,分别是Exception类和Error类,Error类及其子类用来描述java运行系统中的内部错误以及资源耗尽的错误,这类错误比较严重,Exception类称为非致命性类,可以通过捕捉处理来使程序继续执行,Exception类又根据错误发生的原因分为 RuntimeException异常和除 RuntimeException异常之外的异常。
运行时异常
java异常强制用户考虑程序的强健性和安全性,异常处理不应用来控制程序的正常流程,其主要作用是捕获程序在运行时发生的异常并进行相应处理,编写代码处理某个方法可能出现异常时,可遵循以下几条原则:1.在当前方法声明中使用try-catch语句捕获异常2.一个方法被覆盖时,覆盖它的方法必须抛出相同的异常或者异常的子类3.如果父类抛出多个异常,则覆盖方法必须抛出那些异常的一个子类,不能抛出新异常
异常的使用原则
异常处理
在Java语言中,字符串必须包含在一堆双引号(\"\")之内。例如:\"23.23\"、\"ABCDE\"、\"你好\"可以通过以下语法格式莱声明字符串变量:String str;String:指定该变量为字符串类型。str:任意有效的标识符,表示字符串变量的名称声明字符串变量s,代码如下 :String s;
声明字符串
在Java语言中,将字符串作为对象来处理,因此可以像创建其他类对象一样来创建字符串对象。创建对象要使用类的构造方法。String类的常用构造方法如下:1.String(char a[])该方法用一个字符数组a创建String对象
创建字符串
String类
使用“+”运算符可实现连接多个字符串的功能。“+”运算符可以连接多个String对象并产生一个新的String对象。
连接多个字符串
字符串也可同其他基本数据类型进行连接。如果将字符串同其他数据类型进行连接,会将其他数据类型的数据直接转换成字符串
连接其他数字类型
连接字符串
使用String类的length()方法可获取声明的字符串对象的长度。语法如下: str.length();str为字符串对象
获取字符串长度
String类提供了两种查找字符串的方法,是indexOf()与lastIndexOf方法。1.indexOf(String s)该方法用于但会参数字符串s在指定字符串中首次出现的索引位置语法:str.indexOf(substr)str:任意字符串对象substr: 要搜索的字符串查找字符a在字符串str中的索引位置,代码如下;String str =\"We are students\";int size = str.indexOf(\"a\") //变量size的值是32.lastIndexOf(String str)该方法用于但会指定字符串最后一次出现的索引位置语法:str.lastIndexOf(substr)str:任意字符串对象substr:要搜索的字符串注意:如果lastIndexOf()方法中的参数是空字符串\"\"(注意没有空格),则返回的结果与调用length()方法的返回结果相同。
字符串查找
使用charAt()方法可将指定索引处的字符返回。语法:str.charAt(int index)str:任意字符串。index:整型值,用于指定要返回字符的下标
获取指定索引位置的字符
获取字符串信息
通过String类的substring()方法可对字符串进行截取。substring()方法被两种不同的重载形式,来满足不同的需要
获取子字符串
trim()方法返回字符串的副本,忽略前导空格和尾部空格语法:str.trim()str为任意字符串对象
去除空格
字符串替换
stsrtsWith()方法与endsWith()方法分别于判断是否以指定的内容开始或结束。这两个方法的返回值都为boolean类型。1.stsrtsWith()方法该方法用于判断当前字符串对象的前缀是否为参数指定的字符串语法:str.stsrtsWith(String prefix) //prefix是指作为后缀的字符串2.endsWith()方法该方法用于判断当前字符串是否为以给定的子字符串结束语法:str.endWith(String suffix) //suffix是指作为后缀的字符串
判断字符串的开始与结尾
对字符串对象进行比较不能简单地使用比较运算符“==”
判断字符串是否相等
compareToO方法为按字典顺序比较两个字符串,该比较基于字符串中各个字符的Unicode值,按字典顺序将String对象表示的字符序列与参数字符串所表示的字符序列进行比较。如果按字典顺序此String对象位于参数字符串之前,则比较结果为一个负整数;如果按字典顺序此String对象位于参数字符串之后,则比较结果为一个正整数;如果这两个字符串相等,则结果为0。
按字典顺序比较两个字符串
String 类的toLowerCase()方法可将字符串中的所有大写字母改写为小写字母,而toUpperCase()方法可将字符串中的所有小写字母改写为大写字母。
字母大小写转换
1.split(String sign)该方法可根据给定的分割符对字符串进行拆分语法:str.split(String sign) //sign为分割字符串的分割符,也可以使用正则表达式 2.split(String sign,int limit)该方法可根据给定的分割符对字符串进行拆分,并限定拆分的次数语法:str.split(String sign,int limit)sign:分割字符串的分割符,也可以使用正则表达式limit:限制的分割次数
字符串分割
字符串操作
日期和时间字符串格式化
常规类型格式化可应用于任何参数类型,可通过表中的转换符来实现。
常规类型格式化
格式化字符串
正则表达式通常被用于判断语句中,用来检查某一字符串是否满足某一格式。正则表达式是含有-些具有特殊意义字符的字符串,这些特殊字符称为正则表达式的元字符。例如,“\\\\d”表示数字0~9中的任何一个,“\\d”就是元字符。正则表达式中的元字符及其意义如表中所示。
使用正则表达式
创建成功的字符串对象,其长度是固定的,内容不能被改变和编译。虽然使用“+”可以达到附加新字符或字符串的目的,但“+”会产生一个新的 String 实例,会在内存中创建新的字符串对象。如重复地对字符串进行修改,将极大地增加系统开销。而JDK 新增了可变的字符序列 StringBuilder类大大提高了频繁增加字符串的效率。
字符串生成器
字符串
Integer 类在对象中包装了一个基本数据类型 int 的值,该类的对象包含了一个 int 类型的字节。
integer类
Double 类在对象中包装一个基本数据类型为 double 的值,每个 Double 类的对象都包含一个 double 类型的字段。此外,该类还提供了多个方法,可以将 double 类型转换为 String 类型,将 String 类型转化为 double 类型。
Double类
Boolean类
该提供了多种方法,以确定字符的类别(小写字母、数字等),并可以很方便地将字符从大写转化为小写,反之亦然。
Characterleiq
前面介绍了 java 中的包装类,对于数值型的包装类,它们有一个共同的父类——Number 类,该类是一个抽象类。数值型包装类共有方法:
Number类
包装类
数字格式化操作主要针对的是浮点型数据,包括 double 型和 float 型数据。在 Java 中使用 java.textDecimalFormat 格式化数字。
数字格式化
Math 类 提供了众多数学函数方法。主要包括三角函数方法,指数函数方法,取整函数方法,取最大值、最小值,以及平均值函数方法。这些方法都被定义为 static 形式,所以在程序中应用比较简便。
Math类
Random 类是 JDK 中的随机数生成器类,可以通过实例化一个 Random 对象创建一个随机数生成器,语法如下:Random r = new Random();也可以设置随机数生成器的种子。语法如下:Random r = new Random(seedValue);
Random类
BigInteger 类的数字范围教 Integer 类的数字范围大的多。在 BigInteger 类中封装了多种操作,除了基本的加、减、乘、除操作,还提供了绝对值、相反数、最大公约数以及判断是否为质数等操作。使用 BigInteger 类。可以实例化一个 BigInteger 对象,并自动调用相应的构造函数。BigInteger 类具有很多构造函数,但最直接的一种方式是参数以字符串形式代表要处理的数字。
BigInteger类
BigDecimal 类和 BigInteger 类都能实现大数字的运算,不同的是 BigDecimal 类加入了小数的概念。
BigDecimal类
数字处理
1. 不会自动换行的 print() 方法System.out.print(\"Hello\");2.可以自动换行的 println() 方法System.out.println(\"Hello\");
控制台输出字符
System.currentTimeMillis() 方法可以获取自1970年1月1日零点至今的毫秒数
计时
System类
使用Scanner 类首先要引入该类,其语法如下:import.java.util.Scanner;
使用 Scanner 类扫描控制台的代码如下:Scanner sc = new Scanner(System.in);
Scanner类
Date 类用于表示日期时间,使用该类表示时间需要使用其构造方法创建对象
Date类
如果在程序中直接输出Date对象,显示的是“Mon Feb 29 17:39:50 CST 2016”这种格式的日期时间,将其显示成另外的“2016-02-29”或者“17:39:50”这样的格式Java中提供了DeatFormat类来实现类似的功能
日期时间格式化
Calendar类是一个抽象类,它为特定瞬间与一组诸如YEAR MONTH等日历字段之间的转换提供了一些方法,并为操作日历字段提供了一些方法
Calendar类
日期时间类
本地命令指的是操作系统的命令,例如在Linux系统下就表示shell命令,在Windows系统下就表示cmd命令
执行本地命令
Runtime类可以通过freeMemory()方法查看当前Java虚拟机可用内存的剩余量
查看内存
Runtime类
常用类库
java从入门到精通
收藏
0 条评论
回复 删除
下一页