java从入门到精通
2023-06-08 19:14:47 0 举报
AI智能生成
java总结思维导图
作者其他创作
大纲/内容
初始Java
java简介
什么是java语言
Java是Sun公司推出的能够跨越多平台的、可移植性最高的一种面向对象的编程语言,也是目前最先进、特征最丰富、功能最强大的计算机语言。利用Java可以编写桌面应用程序、Web应用程序、分布式系统应用程序、嵌入式系统应用程序等,从而使其成为应用最广泛的开发语言
java的应用领域
桌面应用系统开发
嵌入式系统开发
电子商务应用
企业级应用开发
交互级系统开发
多媒体系统开发
分布式系统开发
Web应用系统开发
移动端应用开发
java语言的特性
简单性
面向对象
分布性
可移植性
解释性
安全性
健壮性
多线程
高性能
动态
搭建java环境
JDK下载
解压缩
配置环境变量
测试
熟悉Eclipse开发工具
熟悉Eclipse
Eclipse简介
Eclipse是由蓝色巨人IBM花费巨资开发的一款功能完整且成熟的IDE集成开发环境,它是一个开源的、基于Java的可扩展开发平台,是目前最流行的Java语言开发工具之一。Eclipse具有强大的代码编排功能,可以帮助程序开发人员完成语法修正、代码修正、代码补全、信息提示等工作,大大提高了程序开发的效率。
下载Eclipse及配置Eclipse
下载链接如下:https://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/2022-12/R/eclipse-java-2022-12-R-win32-x86_64.zip
使用Eclipse
写入代码并运行
java语言基础
java主类解构
基本数据类型
变量与常量
标识符与关键字
声明变量与常量
运算符
算数运算符
自增有自减运算符
符号在前先运算后使用
符号在后先使用后计算
符号在后先使用后计算
比较运算符
逻辑运算符
位运算符
三元运算符
运算符优先级
数据类型转换
代码注释与编码规范
流程控制
复合语句
复合语句是以整个块区为单位的语句,又称为块语句,复合语句由开括号”{“开始”}“结束。
条件语句
if语句:效果为“如果满足某条件就执行某段语句”
流程图
if...else:如果满足某条件,就执行某种处理,否则执行另一种处理
流程图
if...else if:如果满足某条件,就进行某种处理,否则如果满足另一条件则执行另一种处理
流程图
switch多分支语句
大意:计算表达式的值,如果与case后的常量值相同则执行该case语句后的若干个语句直到遇到break语句为止,此时,如果该case语句中没有break语句,将继续执行后面case中的语句,直到遇到break,如果没有一个常量的值与表达式的值相同,则执行default后的语句,default语句是可选的,如果不存在,且switch中的表达式的值不与任何case的常量值相同,switch将不做任何处理。
流程图
循环语句
while循环语句
大意:while:也叫条件判断语句,它的循环方式为利用一个条件来控制是否要继续反复执行这个语句
流程图
- do...while循环语句:与while循环语句类似,区别是while先判断条件是否成立再执行循环,而do...while循环语句则先执行一次循环后,在判断条件是否成立,do...while循环语句至少会循环一次。
流程图
for循环语句
大意:for循环可以用来重复执行某条语句,直到某个条件得到满足,for循环有两种语句,一种是传统的for语句,一种是foreach语句
流程图
for语句特殊体
foreach语句:它是for语句的特殊简化版本,不能完全取代for语句,但任何foreach都可以改写为for语句版本,它不是一个关键字
流程图
循环控制
break语句
大意:break可以跳出当前循环,就近原则,哪个循环离它近它跳出哪个循环,不能越级跳出!
流程图
流程图
break语句的补充
continue语句
大意:作用并不是立即跳出当前循环而是跳过本次循环,回到循环的条件判断环节,重新开始判断
流程图
数组
数组概括
数组可以存储多个变量
一维数组
数组的声明
数组元素的类型[] 数组名
数组元素的类型 数组名[]
分配内存
数组名=new 数组元素的类型[数组长度]
分配内存的同时设置初始值
数组名=new 数组元素的类型[]{值1,值2,......值n}
数组元素赋值
数组名[索引] = 值;
二维数组
大意:格子里面存地址指向另一个数组
二维数组被看作数组的数组,即二维数组为一个特殊的一维数组,其每个元素又是一个一维数组
二维数组被看作数组的数组,即二维数组为一个特殊的一维数组,其每个元素又是一个一维数组
二维数组的声明
数组元素的类型[] []数组名
数组元素的类型 数组名[][]
二维数组分配内存
数组名=new 数组元素的类型[行数][列数]
二维数组分配内存的同时设置初始值
数组名=new 数组元素的类型[][]{{值1...},{值1...},......{值1...}};
二维数组的元素赋值
数组名[行号] = {值1,值2...};
数组名[行号] [列号] = 值;
数组的基本操作
遍历数组
大意:遍历二维数组需使用双层for循环,通过数组的length属性可获得数组的长度。
替换数组
Arrays,fill(数组名,值);
替换数组部分元素:前改后不改
Arrays,fill(数组名,前索引 ,后索引,值);
复制数组
复制数组元素:空位补0溢出去掉
新数组名=Arrays,copyOf(旧数据名,新数组长度);
复制数组部分元素:前在后不在
新数组名=Arrays,copyOfRange(旧数据名,前索引,后索引);
数组元素排序
Arrays.sort(数组名);
查询数组元素:先排序再查询
索引=Arrays.binarySearch(数组名,元素);
查询数组元素:先排序再查询 前含后不含
索引=Arrays.binarySearch(数组名,前索引,后索引,元素);
数组的排序算法
冒泡排序
重第一个数字和后面数字比较大小数字大的排在最后依次比较最后排序和最初排序成为冒泡形状
直接冒泡排序
将一排数字中最大的数字排出来将最大的数字挑出来固定位子依次排序
反转排序
数组第一个元素和最后一个替换的第二个和倒数第二个替换依次替换
类和对象
面向对象概述
对象:世间万物都是对象
动态属性
动态属性就是对象可执行的动作
静态属性
静态属性就是不能动的部分,这个部分被称为属性,任何对象都会具备其自身属性
类
类,是同一类事物的统称
类实质上就是封装对象属性和行为的载体
类实质上就是封装对象属性和行为的载体
类是对象的设计图
面向对象具有封装性,继承性和多态性的特点
封装
是面向对象编程的核心,将对象的属性和行为封装起来,载体是类。
封装保证了类内部数据结构的完整性,使用类的用户不能轻易的直接操作类的数据结构,只能执行类允许公开的数据,避免了外部操作对内部数据的影响,提高了系统的可维护性。
继承
继承性主要利用特定对象的共有属性,子类可以继承父类所有的属性,子类还可以衍生子类,但最末尾的类依然能继承父类所有的属性
父类和子类存在一种关系,一个类在继承中它即可以是其他类的父类,为其他类提供属性和行为,也可以是其他类的子类。例如:三角形是图形类的子类也是等边三角形的父类
多态
其实就是父类对象应用于子类的特征就是多态,多态就是继承父类的所有但又会有不属于父类也不同于其他子类的属性就相当于它的个性。
类
成员变量
大框假设是个文件,那么我们知道了成员变量和成员方法就是静态属性和动态属性,就用代码进行封装
成员方法
我们定义了成员变量和成员方法,有{ }的就是方法
权限修饰符
我们通过这些可以知道我们刚刚定义的修饰符是私有的,不能被其他文件和其他文件中的类使用,那么我们可以使用getter(获取) 和setter(设置)方法,可以让变量除本类外也可以使用
局部变量
局部变量是在方法被执行时创建,在方法执行结束时被销毁。
局部变量在使用时必须进行赋值操作或被初始化,否则会出现编译错误
局部变量的有效范围
将局部变量的有效范围称为变量的作用域,局部变量的有效范围从该变量的声明开始到改变量的结束为止
this关键字
public 返回类型 方法名(传入参数) {
返回参数}
返回参数}
this关键字只能在本类中使用
类的构造方法
特点
构造方法没有返回值
构造方法的名称要和本类名称相同
语法
public Book(){...}
静态
静态就是static,可以有静态常量、静态变量、静态方法和多个语句静态
静态是这个类的专属,只有这个类可以用,就是这个文件可以用,只要它们在一个文件里就行
静态是这个类的专属,只有这个类可以用,就是这个文件可以用,只要它们在一个文件里就行
类的主方法
语法:public static viod main(String[] args){...}
对象
test对象被创建出来时,就是一个对象的引用,这个引用在内存中为对象分配了存储空间
对象的引用
真正的操作标识符实质上是一个引用,引用的语法
类名 对象的引用变量
b d1 =new b();
b是类名,d1是引用名,new b对象的实体;
类名 对象的引用变量
b d1 =new b();
b是类名,d1是引用名,new b对象的实体;
对象的销毁
为什么要销毁对象
每个对象都有生命周期,当对象的生命周期结束时,分配给该对象的内存地址需要被回收
每个对象都有生命周期,当对象的生命周期结束时,分配给该对象的内存地址需要被回收
继承,多态,抽象类与接口
extends 继承
父类 写法与普通写法相同
public class 父类类名(){}
public class 父类类名(){}
子类
public class 子类类名 extends 父类类名(){}
public class 子类类名 extends 父类类名(){}
所有类的构造方法第一行都有一个隐藏的“super():”
作用是在执行该构造方法之前调用其父类构造方法
作用是在执行该构造方法之前调用其父类构造方法
子类重写父类的方法
方法的重写:返回参数相同 方法名相同 传入参数相同 只有方法体不相同
方法的重写:返回参数相同 方法名相同 传入参数相同 只有方法体不相同
Object类
定义:Object类比较特殊,他是所以类的父类,类似原神世界树一样的存在,是java类层中的最高层类,用户创建一个类时,除非已经指定要从其他类继承,否则就是默认继承Object。
getClass()方法
语法如下:
getClass().getname();
getClass().getname();
oString方法
将一个对象返回为字符串形式
equals()方法
定义:在java语言中,有两种比较对象的方式,分别为“==”运算符与equals()方法。两者的区别在于:“==”比较的是两个对象引用内存地址是否相等,而equals()方法比较的是两个对象的实际内容
对象类型的转换
向上转型
子类对象赋值给父类引用
Animal a = new Dog();
Animal a = new Dog();
向上转型
父类对象赋值给子类引用
Dog a = (Dog) new Animal();
Dog a = (Dog) new Animal();
instanceof类
定义:对象名 instanceof 类名
判断对象是否属于该类或其子类
判断对象是否属于该类或其子类
判段关键词语法如下:
myobject instanceof ExampleClass;
myobject instanceof ExampleClass;
方法的重载
定义:方法名相同 参数不同
不定语法
返回值 方法名(参数数据类型 不定长 参数名称)
返回值 方法名(参数数据类型 不定长 参数名称)
final关键字
final修饰变量——不能被改变(常量)
final修饰方法——不能被重写
final修饰类——不能被继承
语法如下:
final 类名{}
final 类名{}
多态
定义
public void draw(Square s){} //绘制正方形的方法
public void draw(Circular s){} //绘制圆形的方法
抽象类与接口
定义抽象方法
public abstract class Parent{
abstract viod testAbstract();
}
abstract viod testAbstract();
}
抽象方法
修饰符 abstract 返回参数 方法名(传入参数);
抽象类
定义:有抽像方法的类一定是抽象类
修饰符 abstract class 类名{
}
}
父类如果有抽象方法那么子类作为普通类要想继承父类那么就要重写父类的抽象方法
接口
接口的好处是不同与子类只能继承一个父类接口可以无限个抽象方法并且重写抽象方法
接口 所有方法都是抽象方法
修饰符 interface 接口名{
}
修饰符 interface 接口名{
}
实现 implements
Java语言每个类可以实现多个接口
修饰符 class 类名 implements 接口1 ,接口2,...{
}
Java语言每个类可以实现多个接口
修饰符 class 类名 implements 接口1 ,接口2,...{
}
包和内部类
Java 类包
类名冲突
在程序中定义一个Login类,因业务需要,还要定义一个名称为Login的类,但是这两个类所实现的功能完全不同,于是问题就产生了——编译器不会允许同名的类文件。解决这类问题的办法是将这两个类放置在不同的类包中。
完整的类路径
java.util.Date date = new java.util.Date();
java.sql.Date date2 = new java.sql.Date(1000);
在Java中采用类包机制非常重要,类包不仅可以解决类名冲突问题,还可以在开发庞大的应用程序时,帮助开发人员管理庞大的应用程序组件,方便软件复用。
java.sql.Date date2 = new java.sql.Date(1000);
在Java中采用类包机制非常重要,类包不仅可以解决类名冲突问题,还可以在开发庞大的应用程序时,帮助开发人员管理庞大的应用程序组件,方便软件复用。
创建包
1.在src节点上右击,选择New/Package。
2.弹出New Java Package对话框,在name文本框中输入新建包名,然后点击Finish。
2.弹出New Java Package对话框,在name文本框中输入新建包名,然后点击Finish。
语法
package 包名
导入包
使用 import 关键字导入包
在程序中使用 import 关键字导入 com.mr.Math 类,在程序中使用 Math 类是就会自动选择 com.mr.Math 类
在程序中使用 import 关键字导入 com.mr.Math 类,在程序中使用 Math 类是就会自动选择 com.mr.Math 类
import 关键字的语法
import com.mr.*; //导入 com.mr 包中的所有类
import com.mr.Math //导入 com.mr 包中的 Math 类
import com.mr.Math //导入 com.mr 包中的 Math 类
使用 import 导入静态成员
import static 静态成员
内部类
成员内部类
成员内部类简介
在一个类中使用内部类,可以在内部类中直接存取其所在类的私有成员变量
在一个类中使用内部类,可以在内部类中直接存取其所在类的私有成员变量
语法:class OuterClass{ //外部类
class InnerClass{ //内部类
class InnerClass{ //内部类
成员内部类不止可以在外部类中使用,在其他类中也可以使用。在其他类中创建内部类对象的语法非常特殊
语法:外部类 outer = new 外部类();
外部类.内部类 inner = outer.new 内部类();
外部类.内部类 inner = outer.new 内部类();
2.使用this关键字获取内部类与外部类的引用
如果在外部类中定义的成员变量与内部类的成员变量名称相同,可以使用this关键字。
匿名内部类
匿名类是只在创建对象时才会编写类体的一种写法。匿名类的特点是“现写现用”
语法如下:
new 父类/父接口(){
子类实现的内容
};
new 父类/父接口(){
子类实现的内容
};
异常处理
异常概述
在程序中,可能会因为各种程序员预料不到的异常出现,也可能由超过程序员可控范围的环境因素产生,如用户的坏数据,试图打开一个根本不存在的文件等
异常大全
异常的抛出与捕捉
抛出异常
通常,为了保证程序有效的运行,需要对抛出的异常进行相应的处理
捕捉异常
try,catch语句就是用来捕捉和处理异常的
语法:try{
//程序代码块
}
catch(Exceptiontype1 e){
//对Exceptiontype1的处理
}
catch(Exceptiontype2 e){
//对Exceptiontype2的处理
}
...
fanally{
//程序代码块
}
//程序代码块
}
catch(Exceptiontype1 e){
//对Exceptiontype1的处理
}
catch(Exceptiontype2 e){
//对Exceptiontype2的处理
}
...
fanally{
//程序代码块
}
finally语句
无论程序是否出现异常,都会执行finally语句,但是在以下四种情况不会执行finally语句块
1.在finally语句块中出现异常
2.在前面的代码块中使用了System.exit()退出程序
3.程序所在线程死亡
4.关闭cpu
java常见的异常类
自定义异常类
用户只需要继承Exception类即可自定义异常类,大体可以分为以下几个步骤
1.创建自定义异常类
2.在方法中通过throw关键字抛出异常对象
3.如果在当前抛出异常的方法中处理异常,可以使用try-catch语句块捕获并处理,否则在方法的声明处通过throw关键字指明要抛出给方法调用者的异常,继续进行下一步操作
在方法中抛出异常
使用throws关键字抛出异常
throws关键字通常被用于声明方法时,用来指定可能抛出的异常,多个异常可使用逗号分隔
throw通常用于方法体中,并且抛出一个异常对象,程序在执行到throw语句立刻中断,它后面的语句不会执行
代码运行时异常
RuntimeException异常时程序运行中抛出的异常,java类库的每个包中都定义了异常类所有这些类都是Throwable类的子类,Throwable类派生了两个子类,分别是Exception类和Error类,Error类及其子类用来描述java运行系统中的内部错误以及资源耗尽的错误,这类错误比较严重,Exception类称为非致命性类,可以通过捕捉处理来使程序继续执行,Exception类又根据错误发生的原因分为 RuntimeException异常和除 RuntimeException异常之外的异常
异常的使用原则
java异常强制用户考虑程序的强健性和安全性,异常处理不应用来控制程序的正常流程,其主要作用是捕获程序在运行时发生的异常并进行相应处理,编写代码处理某个方法可能出现异常时,可遵循以下几条原则
1.在当前方法声明中使用try-catch语句捕获异常
2.一个方法被覆盖时,覆盖它的方法必须抛出相同的异常或者异常的子类
3.如果父类抛出多个异常,则覆盖方法必须抛出那些异常的一个子类,不能抛出新异常
字符串
String类
声明字符串
字符串里面必须有("")号
声明字符串变量
String str;
str为声明的数据
str为声明的数据
创建字符串
1.String(char a[])
char[] ch = {'g','o','o','d'};
String st =new String(ch);
String st =new String(ch);
等价于
String s = new String("good");
2.String(Char a[],int offset, int lenght)
char[] cha = {'s','t','u','d','e','n','t'};
String str =new String(cha,0,2);
String str =new String(cha,0,2);
等价于
String s = new String("st");
3.String(Char[] value)
char[] cha = {'s','t','u','d','e','n','t'};
String str =new String(cha);
String str =new String(cha);
等价于
String s = new String("student");
连接字符串
连接多个字符串
使用”+“运算符可实现连接多个字符串的功能“+”运算符可以连接多个String对象并产生一个新的String对象
连接其他数据类型
字符串也可同其他基本数据进行连接。如果将字符串同其他数据类型数据进行连接,会将其他数据类型的数据直接转换成字符串
获取字符串信息
获取字符串长度
格式为:str.length();
String str = "We are students";
int size =str.lenght();
int size =str.lenght();
2.lastIndexOf(substr)
获得指定位置索引的字符
使用charAt()方法可将指定索引处的字符返回
语法如下:
str.charAt(int index)
str.charAt(int index)
str:
任意字符串。
index:
整型值,用于指定要返回字符的下标。
任意字符串。
index:
整型值,用于指定要返回字符的下标。
字符串操作
获取子串
通过String类的substring()方法可对字符串进行截取。substring()方法被两种不同的重载形式,来满足不同的需要。这些形式的共同点就是都利用字符串的下标进行截取,且应明确字符串下标是从0开始的。
substring(int beginlndex)
该方法返回的是从指定的索引位置开始截取直到该字符串结尾的子串
该方法返回的是从指定的索引位置开始截取直到该字符串结尾的子串
语法如下:
str.substring(int beginlndex)
str.substring(int beginlndex)
beginlndex指定从某一索引处开始截取字符串。
截取字符串,代码如下:
String str = "Hello Word";
String substr = str.substring(3);
截取字符串,代码如下:
String str = "Hello Word";
String substr = str.substring(3);
substring(int beginlndex,int endlndex)
该方法返回的是从字符串某一索引位置开始截取至某一索引位置结束的子串
语法:substring(int beginlndex,int endlndex)
beginlndex:
开始截取子字符串的索引位置。
endlndex:
子字符串在整个字符串中的结束位置。
开始截取子字符串的索引位置。
endlndex:
子字符串在整个字符串中的结束位置。
去除空格
trim()方法返回字符串的副本,忽略前导空格和尾部空格
语法如下:
str.trim();
其中,str为任何字符串对象
str.trim();
其中,str为任何字符串对象
字符串的替换
replace()方法可实现将指定的字符或字符串替换成新的字符或字符串
语法:str.replace(charSequence target, CharSequence replacement)
targt: 要替换的字符或字符串。
replacement:用于替换原来字符串的内容。
replace()方法返回的结果是一个新的字符串。如果字符或字符串 oldChar 没有出现在该对象表达式中的字符串序列中,则将原字符串返回。
判断字符串的开始和结尾
startsWith()方法与endsWith()方法分别用于判断字符串是否以指定的内容开始或结束。这两个方法的返回值都为boolean类型
1.startsWith()方法
该方法用于判断当前字符串对象的前缀是否为参数指定的字符串。语法如下:
str.startsWith(String prefix)
其中,prefix是指作为前缀的字符串。
该方法用于判断当前字符串对象的前缀是否为参数指定的字符串。语法如下:
str.startsWith(String prefix)
其中,prefix是指作为前缀的字符串。
2.endsWith()方法
该方法用于判断当前字符串是否为给定的子字符串。语法如下:
str.endsWith(String suffix)
其中,suffix是指作为后缀的字符串。
该方法用于判断当前字符串是否为给定的子字符串。语法如下:
str.endsWith(String suffix)
其中,suffix是指作为后缀的字符串。
判断字符串是否相等
对字符串对象进行比较不能简单地使用比较运算符“==”,因为比较运算符比较的是两个字符串的地址是否相同。即使两个字符串的内容相同,两个对象的内存地址也是不同的,使用两个字符串的内容相同,两个对象的内存地址也是不同的,使用比较运算符仍然会返回false。使用比较运算符比较两个字符串
代码如下:
String tom = new String("l am a student");
String jerry = new String("l am a student");
boolean b = (tom == jerry);
此时,布尔型变量b的值为false,因为字符串是对象,tom、jerry是引用
String tom = new String("l am a student");
String jerry = new String("l am a student");
boolean b = (tom == jerry);
此时,布尔型变量b的值为false,因为字符串是对象,tom、jerry是引用
1.equals()方法
如果两个字符串具有相同的字符和长度,则使用equals()方法进行比较时,返回true。否则返回false。语法如下:
str.equals(String otherstr)
其中,str、otherstr是要比较的两个字符串对象。
如果两个字符串具有相同的字符和长度,则使用equals()方法进行比较时,返回true。否则返回false。语法如下:
str.equals(String otherstr)
其中,str、otherstr是要比较的两个字符串对象。
2.equalsLgnoreCase()方法
使用equals()方法对字符串进行比较时是否分大小写的,而使用equalsLgnoreCase()方法是在忽略了大小写的情况下比较两个字符串是否相等,返回结果仍为boolean类型。语法如下:
equalsLgnoreCase(String otherstr)
其他,str、otherstr是要比较的两个字符串对象
使用equals()方法对字符串进行比较时是否分大小写的,而使用equalsLgnoreCase()方法是在忽略了大小写的情况下比较两个字符串是否相等,返回结果仍为boolean类型。语法如下:
equalsLgnoreCase(String otherstr)
其他,str、otherstr是要比较的两个字符串对象
按字典顺序比较两个字符串
compareTo()方法为按字典顺序比较两个字符串,该比较基于字符串中各个字符的Unicode值,按字典顺序将String对象表示的字符序列与参数字符串所表示的字符序列进行比较。如果按字典顺序此String对象位于参数字符串之前,则比较结果为一个负整数;如果按字典顺序此String对象位于参数字符串之后,则比较结果为一个正整数;如果这两个字符串相等,则结果为0
语法如下:
str.compareTo(String otherstr)
其中,str、otherstr是要比较的两个字符串对象。
str.compareTo(String otherstr)
其中,str、otherstr是要比较的两个字符串对象。
字母大小写转换
String类的toLowerCase()方法可将字符串中的所有大小字母改写为小写字母,而toUpperCase()方法可将字符串中的所有小写字母改写为大写字母。
1.toLowerCase()方法
该方法将字符串中的所有大写字母转换为小写。如果字符串中没有应该被转换的字符,则将原字符串返回;否则将返回一个新的字符串,将原字符串中每个大写字母都转换成小写,字符串长度不变。语法如下:
str.toLowerCase()
其中,str是要进行转换的字符串。
该方法将字符串中的所有大写字母转换为小写。如果字符串中没有应该被转换的字符,则将原字符串返回;否则将返回一个新的字符串,将原字符串中每个大写字母都转换成小写,字符串长度不变。语法如下:
str.toLowerCase()
其中,str是要进行转换的字符串。
2.toUpperCase()方法
该方法将字符串中所有的小写字母转换为大写。如果字符串中没有应该被转换的字符,则将原字符串返回;否则返回一个新字符串,将原字符串中每个小写字母都转换为大写,字符串长度不变,语法如下:
str.toUpperCase()
其中,str是要进行转换的字符串。
该方法将字符串中所有的小写字母转换为大写。如果字符串中没有应该被转换的字符,则将原字符串返回;否则返回一个新字符串,将原字符串中每个小写字母都转换为大写,字符串长度不变,语法如下:
str.toUpperCase()
其中,str是要进行转换的字符串。
常用类库
包装类
定义:Java 是一种面向对象语言,但在 Java 中不能定义基本数据类型的对象,为了能将基本数据类型视为对象进行处理,Java 提出了包装类的概念,它主要是将基本数据类型封装在包装类中,如 int 型的包装类Integer、boolean型的包装类 Boolean等,这样便可以把这些基本数据类型转换为对象进行处理Java中的包装类及其对应的基本数据类型如表
Integer类
java.lang 包中的 Integer 类、Byte 类、Short 类和 Long 类,分别将基本数据类型 int、byte、short和 long 封装成一个类,由于这些类都是 Number 类的子类,区别就是封装不同的数据类型,其包含方法基本相同,所以本节以Integer 类为例讲解整数包装类。
nteger 类在对象中包装了一个基本数据类型 int 的值,该类的对象包含一个 int 类型的字段。此外该类提供了多个方法,能在 int 类型和 String 类型之间互相转换,同时还提供了其他一些处理 int 类时非常有用的常量和方法
nteger 类在对象中包装了一个基本数据类型 int 的值,该类的对象包含一个 int 类型的字段。此外该类提供了多个方法,能在 int 类型和 String 类型之间互相转换,同时还提供了其他一些处理 int 类时非常有用的常量和方法
Double类
Double类和 Float类是对 double、float 基本类型的封装,它们都是Number 类的子类,都是对浮点数进行操作,所以常用方法基本相同,本节将对 Double 类进行讲解。对于 Float 类,可以参考 Double类的相关内容。
Double类在对象中包装一个基本类型为 double 的值,每个Double类的对象都包含一个double类的字段。此外,该类还提供多个方法,可以将 double类型转换为 String类型,将 String类型转换为 doubl类型,也提供了其他一些处理 double 类型时有用的常量和方法。
Double类在对象中包装一个基本类型为 double 的值,每个Double类的对象都包含一个double类的字段。此外,该类还提供多个方法,可以将 double类型转换为 String类型,将 String类型转换为 doubl类型,也提供了其他一些处理 double 类型时有用的常量和方法。
子主题
Double类主要提供了以下常量:
MAX_EXPONENT:返回int 值,表示有限double 变量可能具有的最大指数
MIN_EXPONENT:返回 int 值,表示标准化 double 变量可能具有的最小指数。
NEGATIVE_INFINITY:返回 double 值,表示保存 double 类型的负无穷大值的常量
POSITIVE_INFINITY:返回double 值,表示保存double 类型的正无穷大值的常量
Boolean类
Boolean 类将基本类型为 boolean 的值包装在一个对象中。一个 Boolean 类型的对象只包含一个类型为boolean 的字段。此外,此类还为 boolean 类型和 String 类型的相互转换提供了许多方法,并提供了处理 boolean 类型时非常有用的其他一些常量和方法
Boolean 提供了以下3个常量:
TRUE:对应基值 true的 Boolean 对象。
FALSE:对应基值 false的 Boolean 对象。
TYPE:基本类型 boolean的 Class 对象.
Character类
Character 类在对象中包装一个基本类型为 char 的值,该类提供了多种方法,以确定字符的类别(小写字母、数字等),并可以很方便地将字符从大写转换成小写,反之亦然。Character 类提供了很多方法来完成对字符的操作,
Character 类提供了大量表示特定字符的常量,例如:
CONNECTOR_PUNCTUATION:返回 byte 型值,表示Unicode 规范中的常规类别“Pc”
UNASSIGNED:返回 byte 型值,表示Unicode 规范中的常规类别“Cn”。
TITLECASE_LETTER:返回 byte 型值,表示Unicode 规范中的常规类别“Lt”。
Number类
对于数值型的包装类,它们有一个共同的父类-Number 类,该类是一个抽象类,它是 Byte、Integer、Short、Long、Float 和 Double 类的父类,其子类必须提供将表示的数值转换为 byteint、short、long、float 和 double 的方法。例如,doubleValue()方法返回双精度浮点值,floatValue0方法返回单精度浮点值
数字处理
在 Java 语言中,提供了一个执行数学基本运算的 Math 类,该类包括常用的数学运算方法,如角函数方法、指数函数方法、对数函数方法、平方根函数方法等一些常用数学函数方法。除此之外还提供了一些常用的数学常量,如PI、E等。本节将讲解 Math 类以及其中的一些常用方法。
在实际开发中,随机数的使用是很普遍的,所以要掌握生成随机数的操作。在Java 中主要提供了两种生成随机数的方式,分别为调用 Math 类的random0方法生成随机数和调用 Random类生成各种据类型的随机数。
在Java中,还提供了大数字的操作类,即javamath.BigInteger类与javamath.BigDecimal类。这两个类用于高精度计算,其中 BigInteger 类是针对大整数的处理类,而 BigDecimal类则是针对大小数的处理类。
在实际开发中,随机数的使用是很普遍的,所以要掌握生成随机数的操作。在Java 中主要提供了两种生成随机数的方式,分别为调用 Math 类的random0方法生成随机数和调用 Random类生成各种据类型的随机数。
在Java中,还提供了大数字的操作类,即javamath.BigInteger类与javamath.BigDecimal类。这两个类用于高精度计算,其中 BigInteger 类是针对大整数的处理类,而 BigDecimal类则是针对大小数的处理类。
数字格式化
数字格式化在解决实际问题时应用非常普遍,如表示某超市的商品价格,需要保留两位有效数字数字格式化操作主要针对的是浮点型数据,包括 double 型和 foat 型数据。在 Java 中使用 java.textDecimalFormat格式化数字,本节将着重讲解DecimalFormat类。
在Java 中,没有格式化的数据遵循以下原则:
在Java 中,没有格式化的数据遵循以下原则:
如果数据绝对值大于0.001 并且小于10000000,使以常规小数形式表示
如果数据绝对值小于0.001或者大于10000000,使用科学记数法表示。
由于上述输出格式不能满足解决实际问题的要求,通常将结果格式化为指定形式后输出。在 Java中,可以使用DecimalFormat类进行格式化操作
DecimalForat类是NumberFormat 的一个子类,用于格式化十进制数字。它可以将一些数字格式化为整数、浮点数、百分数等。通过使用该类可以为要输出的数字加上单位或控制数字的精度。一般情况下,可以在实例化 DecimalFormat 对象时传递数字格式,也可以通过 DecimalFormat 类中的applyPatten0方法来实现数字格式化。
当格式化数字时,可在 DecimalFormat类中使用一些特殊字符构成一个格式化模板,使数字按照-定的特殊字符规则进行匹配。表中列举了格式化模板中的特殊字符及其所代表的含义。
由于上述输出格式不能满足解决实际问题的要求,通常将结果格式化为指定形式后输出。在 Java中,可以使用DecimalFormat类进行格式化操作
DecimalForat类是NumberFormat 的一个子类,用于格式化十进制数字。它可以将一些数字格式化为整数、浮点数、百分数等。通过使用该类可以为要输出的数字加上单位或控制数字的精度。一般情况下,可以在实例化 DecimalFormat 对象时传递数字格式,也可以通过 DecimalFormat 类中的applyPatten0方法来实现数字格式化。
当格式化数字时,可在 DecimalFormat类中使用一些特殊字符构成一个格式化模板,使数字按照-定的特殊字符规则进行匹配。表中列举了格式化模板中的特殊字符及其所代表的含义。
Math类
Math 类提供了众多数学函数方法,主要包括三角函数方法,指数函数方法,取整函数方法,取最大值、最小值,以及平均值函数方法。这些方法都被定义为 static 形式,所以在程序中应用比较简便可以使用如下形式调用:
Math.数学方法
在Math 类中,除函数方法外还存在一些常用数学常量,如 PI、E等。这些数学常量作为Math类的成员变量出现,调用起来也很简单。可以使用如下形式调用:
Math.PI
Math.E
Math 类中的常用数学运算方法较多,大致可以将其分为四大类别,分别为三角函数方法,指数函数方法,取整函数方法,以及取最大值、最小值和绝对值函数方法。
Math.数学方法
在Math 类中,除函数方法外还存在一些常用数学常量,如 PI、E等。这些数学常量作为Math类的成员变量出现,调用起来也很简单。可以使用如下形式调用:
Math.PI
Math.E
Math 类中的常用数学运算方法较多,大致可以将其分为四大类别,分别为三角函数方法,指数函数方法,取整函数方法,以及取最大值、最小值和绝对值函数方法。
三角函数方法
Math 类中包含的三角函数方法如下:
public static double sin(double a): 返回角的三角正弦。
public static double cos(double a): 返回角的三角余弦。
public static double tan(double a): 返回角的三角正切。
public static double asin(double a):返回一个值的反正弦。
public static double acos(double a): 返回一个值的反余弦。
public static double atan(double a):返回一个值的反正切。
public static double toRadians(double angdeg): 将角度转换为弧度。
public static double toDegrees(double angrad):将狐度转换为角度
指数函数方法
public static double exp(double a):用于获取e的a次方。
public static double log(double a):用于取自然对数,即取Ina的值。
public static double log10(double a):用于取底数为10 的a的对数。
public static double sqrt(double a): 用于取a的平方根,其中a 的值不能为负值。
public static double cbrt(doublea):用于取a的立方根。
public static double pow(double a,double b): 用于取a的b 次方。
取整函数方法
public static double ceil(double a): 返回大于等于参数的最小整数。
public static double floor(double a):返回小于等于参数的最大整数。
public static double rint(double a): 返回与参数最接近的整数,如果存在两个同样接近的整数V则结果取偶数。
public staticintround(float a):将参数加上0.5后返回与参数最近的整数。
public static longround(double a): 将参数加上0.5 后返与参数最近的整数,然后强制转换为长整型。
取最大、最小值和绝对值函数方法
public static double max(double adouble b): 取a与b之间的最大值。
public static int min(int aint b): 取a与b之间的最小值,参数为整型
public static long min(long a,long b): 取a与b之间的最小值,参数为长整型。
public static float min(float a,floatb):取a与b之间的最小值,参数为单精度浮点型
public static double min(double a,double b):取a与b之间的最小值,参数为双精度浮点型。
public static intabs(int a):返回整参数的绝对值。
public static longabs(long a):返回长整型参数的绝对值。
public static float abs(float a): 返回单精度浮点型参数的绝对值。
public static double abs(double a): 返回双精度浮点型参数的绝对值。
Random类
Random 类是JDK 中的随机数生成器类,可以通过实例化一个 Radom 对象创建一个随机数生器
语法
Random r = new Random();
用户也可以在实例化 Random 类对象时,设置随机数生成器的种子。
语法如下:
Random r = new Random(seedValue);
r: Random类对象。
seedValue:随机数生成器的种子。
在Random 类中,提供了获取各种数据类型随机数的方法,下面列举几个常用的方法:
public intnextInt():返回一个随机整数。
public int nextInt(int n): 返回大于等于0且小于n的随机整数。
public long nextLong0: 返回一个随机长整型值。
public boolean nextBoolean0: 返回一个随机布尔型值。
public float nextFloat0:返回一个随机单精度浮点型值。
public doublenextDouble0:返回一个随机双精度浮点型值。
public double nextGaussian():返回一个概率密度为高斯分布的双精度浮点型值。
BigInteger类
Biginteger 类的数字范围较 Integer 类的数字范围要大得多。前文介绍过 Integer 类是 int 的包装类int 的最大值为 23-1,如果要计算更大的数字,使用 nteer 类就无法实现了,所以 Java 中提供]BigInteger 类来处理更大的数字。Biginteger 类支持任意精度的整数,也就是说,在运算中 BigIntege类可以准确地表示任何大小的整数值而不会丢失信息。
在 BigInteger 类中封装了多种操作,除了基本的加、减、乘、除操作,还提供了绝对值、相反数最大公约数以及判断是否为质数等操作。
使用 BigInteger类,可以实例化一个 BigInteger 对象,并自动调用相应的构造函数。BigInteger类具有很多构造函数,但最直接的一种方式是参数以字符串形式代表要处理的数字。
在 BigInteger 类中封装了多种操作,除了基本的加、减、乘、除操作,还提供了绝对值、相反数最大公约数以及判断是否为质数等操作。
使用 BigInteger类,可以实例化一个 BigInteger 对象,并自动调用相应的构造函数。BigInteger类具有很多构造函数,但最直接的一种方式是参数以字符串形式代表要处理的数字。
BigInteger 类中常用的几种运算方法
public BigInteger add(BigInteger val): 做加法运算。
public BigInteger subtract(BigInteger val): 做减法运算。
public BigInteger multiply(BigInteger val): 做乘法运算。
public BigInteger divide(BigInteger val): 做除法运算。
public BigInteger remainder(BigInteger val): 做取余操作
public BigInteger divideAndRemainder(Biplntegcr val): 用数组返回余数和商,结果数组中第一个值为商,第二个值为余数
public BigInteger pow(intexponent): 进行取参数的exponent 次方操作。
public BigInteger negate0: 取相反数。
public BigInteger shifLeft(intn):将数字左移n位,如果n为负数,做右移操作。
public BigInteger shiftRight(intn):将数字右移n位,如果n为负数,做左移操作。
public BigInteger and(BigInteger val): 做与操作。
public BigInteger or(BigInteger val):做或操作。
publicintcompareTo(BigInteger val):做数字比较操作。
public boolean equals(Object x):当参数x是BigInteger类型的数字并且数值与对象实例的数值相等时,返回true。
public BigInteger min(BigInteger val):返回较小的数值。
public BigInteger max(BigIntegerval):返回较大的数值。
BigDecimal类
BigDecimal类和BigInteger类都能实现大数字的运算,不同的是 BigDecimal类加入了小数的概念般的foat 型和 double 型数据只可以用来做科学计算或工程计算,但由于在商业计算中要求数字精度比较高,所以要用到 BigDecimal类。BigDecimal类支持任何精度的定点数,可以用它来精确计算货币值
在BigDecimal类中,常用的两个构造方法如表:
BigDecimal类型的数字可以用来做超大的浮点数的运算,如加、减、乘、除等,但是在所有的运算中除法是最复杂的,因为在除不尽的情况下商小数点后的末位的处理是需要考虑的。BigDecimal类实现的加、减、乘、除的方法 下表:
在上述方法中,BigDecimal类中divide()方法有多种设置,用于返回商小数点后的末位的处理,这些模式的名称与含义下表:
System类
System类是JDK中提供的系统类,该类是用final修饰的,所以不允许被继承。System类提供了很多系统层面的操作方法,并且这些方法全部但是静态的。
控制台输出字符
System 类提供了标准输入、标准输出和错误输出流,也就是说,System 类提供了3 个静态对象:in、out 和 err。本书中的代码多次使用了这些对象,最常见的就是 out 对象。在控制台输出字符事,验出的方法有两种:
1.不会自动换行的print()方法
print()方法语法如下:
System.out.print(“Hello”);
此方法输出“Hello”文字,输出完毕后,光标会停留在“Hello”文字末尾,不会自动换行。
print()方法语法如下:
System.out.print(“Hello”);
此方法输出“Hello”文字,输出完毕后,光标会停留在“Hello”文字末尾,不会自动换行。
2.可以自动换行的println()方法
printin0方法在print后面加上了“In”后缀(就是 line的简写),语法如下:
System.out.println(“书籍是人类进步的阶梯!”);
此方法输出“书籍是人类进步的阶梯!”后会自动换行。光标停留在下一行的开头。
printin0方法在print后面加上了“In”后缀(就是 line的简写),语法如下:
System.out.println(“书籍是人类进步的阶梯!”);
此方法输出“书籍是人类进步的阶梯!”后会自动换行。光标停留在下一行的开头。
Print()方法和println()方法输出的对比效果下表:
计时
System.currentTimeMillis()方法可以获取1970年1月1日零点至今的毫秒数。虽然 Date日期也有类似的方法,但代码会比System 类多,所以System.currentTimeMillis()方法是为获取当前毫秒梦最常用的方法。因为该方法的返回值精确到毫秒,所以可以利用该方法来记录程序的运行时间。
Scanner类
与C语言不同,Java从控制台中读出用户输入的值,用到的不是一行可以直接使用的代码,而是由一个叫Scanner的类来实现的。Scanner英文直译就是扫描仪,它的用途就和现实生活中的扫描仪一样,可以把数字化信息流为人类可识别的文字。控制台输出内容用到了System.out就表示向控制台输出,System.in就表示从控制台输入,让Scanner扫描System.in就可以获取用户输入的值了。
使用Scanner类首先要引入该类,其语法如下:
import java.util.Scanner;
import java.util.Scanner;
日期时间类
Date类
Date类用于表示日期时间,使用该类表示时间需要使用其构造方法创建对象,其构造方法及其说明如下图:
使用Date类的第2种构造方法创建一个Date类的对象,代码如下:
long timeMillis = System.currentTimeMillis();
Date date = new Date(TimeMillis);
上述代码中的System类的currentTimeMillis()方法主要用于获取当前系统时间距标准时间的毫秒数。另外,这里需要注意的是,创建Date类对象时使用的是long型整数,而不是double型,这主要是因为double类型可能会损失精度。Date类的常用方法及其说明,图如下:
long timeMillis = System.currentTimeMillis();
Date date = new Date(TimeMillis);
上述代码中的System类的currentTimeMillis()方法主要用于获取当前系统时间距标准时间的毫秒数。另外,这里需要注意的是,创建Date类对象时使用的是long型整数,而不是double型,这主要是因为double类型可能会损失精度。Date类的常用方法及其说明,图如下:
日期时间格式化
DateFormat类是日期时间格式化子类的抽象类,可以按照指定的格式对日期或时间进行格式化,DateFormat类提供了很多类方法,以获得基于默认或给定语环境和多种格式化风格的默认日期时间formatter,格式化风格主要包括SHORT、MEDIUM、LONG和FULL4种:
1.SHORT: 完全为数字,如11.13.42或3:30pm。
2.MEDIUM: 较长,如Jan 12,1343。
3.LONG: 更长,如January 12,1343或3:30:32pm。
4.FULL: 完全指定,如Tuesday、April 12、1952AD或3:30:42pm PST。
另外,使用DateFormat类还可以自定义日期时间的格式。要格式化一个当前语言环境下的日期,首先需要创建DateFormat类的一个对象,由于它是抽象类,因此使用其静态方法getDateInstance()进行创建,语法如下:
DateFormat of = DateFormat.getDateInstanse();
1.SHORT: 完全为数字,如11.13.42或3:30pm。
2.MEDIUM: 较长,如Jan 12,1343。
3.LONG: 更长,如January 12,1343或3:30:32pm。
4.FULL: 完全指定,如Tuesday、April 12、1952AD或3:30:42pm PST。
另外,使用DateFormat类还可以自定义日期时间的格式。要格式化一个当前语言环境下的日期,首先需要创建DateFormat类的一个对象,由于它是抽象类,因此使用其静态方法getDateInstance()进行创建,语法如下:
DateFormat of = DateFormat.getDateInstanse();
使用getDateInstance()方法获取的是所在国家或地区的标准日期格式。另外,DateFormat 类还提供了一些其他静态方法。例如,使用 getTimeInstance()方法可获取所在国家或地区的时间格式,使用getDateTimelnstance()方法可获取日期和时间格式。DateFormat 类的常用方法及其说明下表:
由于DateFormat类是一个抽象类,不能用new 创建实例对象。因此,除了使用getXXXInstance()方法创建其对象,还可以使用其子类,如 SimpleDateFormat 类,该类是一个以与语言环境相关的方式来格式化和分析日期的具体类,它允许进行格式化(日期一文本)、分析(文本一日期)和规范化。
SimpleDateFormat类提供了19个格式化字符,可以让开发者随意编写日期格式,这19个格式化字符下表:
SimpleDateFormat类提供了19个格式化字符,可以让开发者随意编写日期格式,这19个格式化字符下表:
通常表中的字符出现的数量会影响数字的格式。例如,yyyy 表示4 位年份,这样输入会显示202l:yy 表示两位,这样输入就会显示为 21; 只有一个y的话,会按照 yyyy 显示:如果超过4个一些常用的日期时间格式如表中所示。y,如yyyyyy,会在4位年份左侧补0,结果为02021。一些常用的日期时间格式下表:
Calendar类
打开JavaAPI 文档可以看到 iava.utilDate 类提供的大部分方法都已经过时了,因为 Date类在设计之初没有考虑到国际化,而且很多方法也不能满足用户需求,比如需要获取指定时间的年月日时分和信息,或者想要对日期时间进行加减运算等复杂的操作,Date 类已经不能胜任,因此JDK 提供了新的时间处理类–Calendar日历类。
Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR等日历字段之间的转换提供了一些方法,并为操作日历字段(如获得下星期的日期)提供了一些方法。另外,该类还为实现包范围外的具体日历系统提供了其他字段和方法,这些字段和方法被定义为 protected。
Calendar 提供了一个类方法 getInstance(),以获得此类型的一个通用的对象。Calendar 类的getInstance()方法返回一个 Calendar 对象,其日历字段已由当前日期和时间初始化,其使用方法如下:
Calendar rightNow = Calendar.getInstance();
Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR等日历字段之间的转换提供了一些方法,并为操作日历字段(如获得下星期的日期)提供了一些方法。另外,该类还为实现包范围外的具体日历系统提供了其他字段和方法,这些字段和方法被定义为 protected。
Calendar 提供了一个类方法 getInstance(),以获得此类型的一个通用的对象。Calendar 类的getInstance()方法返回一个 Calendar 对象,其日历字段已由当前日期和时间初始化,其使用方法如下:
Calendar rightNow = Calendar.getInstance();
Calendar 类提供的常用字段及其说明下表:
Calendar类提供的常用方法及其说明下表:
最后对 Calendar 类的使用做出几点总结:
c.set(Calendar.DAY OF_MONTHO)获取的是上个月的最后一天,所以调用前需要将月份往后加一个月。
Calenda.rMONTH 的第一个月是使用0记录的,所以在获得月份数字后要加1。年和日是从1开始记录的,不需要加 1。
Calendar.DAY_OF_WEEK 的第一天是周日,周一是第二天,周六是最后一天。
Runtime类
Runtime类是JDK提供的运行时类,该类为Java程序提供了与当前运行环境相连接的一个通道,Java程序可以利用该类对当前的运行环境执行一些简单的操作。Runtime 类不能使用 new 关键字创建实例,只能通过 Runtime.getRuntime()方法获取实例
Runtime类的常用方法下表:
执行本地命令
本地命令指的是操作系统的命令。例如,在 Linux 系统下就表示shell命令,在 Windows 系统下表示 cmd 命令。
Runtime类提供exec0方法让Java 代码可以执行系统的命令,exec0方法有很多重载的形式,例如:
process esec(String command)
process esec(String cmdarray)
command:要执行的系统命令,字符串类型。
cmdarray:要执行的命令和相应的命令参数,字符串数组类型。
其实这两个重载方式很类似,如执行“javac hello.java”这行命令,使用第一种重载方式的代码如下:
Runtime.getRuntime().exec(“javac hello.java);
本地命令指的是操作系统的命令。例如,在 Linux 系统下就表示shell命令,在 Windows 系统下表示 cmd 命令。
Runtime类提供exec0方法让Java 代码可以执行系统的命令,exec0方法有很多重载的形式,例如:
process esec(String command)
process esec(String cmdarray)
command:要执行的系统命令,字符串类型。
cmdarray:要执行的命令和相应的命令参数,字符串数组类型。
其实这两个重载方式很类似,如执行“javac hello.java”这行命令,使用第一种重载方式的代码如下:
Runtime.getRuntime().exec(“javac hello.java);
使用第二种重载方式的代码如下:
String command[] = {“javac”,“hello.java”};
Runtime.getRuntime().exec(command);
exec()方法会返回一个 Process 对象。Process 类是 Java中进程类,该类是抽象类,不能使用关键字创建实例。Process类的常用方法下表所示,开发可以使用 getinputStream()方法获取返回的信息。
String command[] = {“javac”,“hello.java”};
Runtime.getRuntime().exec(command);
exec()方法会返回一个 Process 对象。Process 类是 Java中进程类,该类是抽象类,不能使用关键字创建实例。Process类的常用方法下表所示,开发可以使用 getinputStream()方法获取返回的信息。
查看内存
Runtime 类可以通过 freeMemory()方法查看当前Java 虚拟机可用内存的剩余量。如果程序能够实时监控内存剩余量,就可以尽量控制程序对内存的占用,从而避免出现“内存溢出”的情况。同样,也可以用来对测试程序性能,检验程序算法是否导致内存紧张。
收藏
0 条评论
下一页