(王恩恒)java从入门到精通
2023-06-10 14:06:22 0 举报
AI智能生成
java从入门到精通流程图复习
作者其他创作
大纲/内容
1.初始java
Java简介
什么是java语言
Java是一种面向对象的编程语言,由Sun Microsystems(现在为Oracle Corporation)于20世纪90年代初开发,旨在为数字电视行业开发软件应用程序。Java语言以其简单性、可移植性、强大的API支持、可靠性和安全性而闻名。
java的应用领域
- 桌面应用系统开发,嵌入式系统开发,电子商务应用,企业级应用开发,交互式系统开发,多媒体系统开发,多布式系统开发,web应用系统开发,移动端应用开发
Java的版本
- Java SE 和Java EE
怎么学好java
- 明确目标,多思考·多实践多请教,多查阅资料阅读其他人的源代码
javaAPI文档
- Java API文档是Java开发人员在开发和编写Java程序时可以使用的在线文档
Java语言的特性
- 简单,面向对象,分布性,可移植性,解释型,安全性,健壮性,多线程,高性能,动态
搭建java环境
JDK下载
在系统10下搭建JDK环境
2.熟悉Eclipse开发工具
熟悉Eclipse
Eclipse简介
下载Eclipse
安装Eclipse的中文语言包
Eclipse的配置与启动
Eclipse工作台
透视图与视图
菜单栏
工具栏
"包资源管理器"视图
"控制台"视图
使用Eclipse
创建Java项目
创建Java类文件
使用编辑器编写程序代码
运行Java程序
程序调试
3.java语言基础
java主类结构
包声明
- 一个Java应用程序是由若干个类组成的
声明成员变量和局部变量
- 通常将类的属性称为类的全局变量(成员变量),将方法中的属性称为局部变量
编写主方法
- main()方法是类体中的主方法。该方法从"{"开始,至"}"结束。
导入API类库
基本数据类型
整数类型
- byte,short,int,long
浮点类型
- float,double
字符类型
- char
布尔类型
- boolean
变量与常量
标识符和关键字
- 标识符可以简单地理解为一个名字,是用来标识类名,变量名,方法名,数组名,文件名的有效字符序列。
声明变量
- 声明一个整数类型变量和声明一个字符类型变量。对于变量的命名并不是随意的,应该遵守几条规则:1,变量名必须是一个有效的标识符。2,变量名不可以使用java中的关键字。3,变量名不能重复。4,应选择有意义的单词作为变量名。
变量的有效范围
- 就近原则
运算符
赋值运算符
- 从右往左处理
算术运算符
自增和自减运算符
- 符号在前:先运算后使用;符号在后:先使用再运算。
比较运算符
逻辑运算符
- "|"或:只要有一者为1,结果就是1。
- "~"取反:0变1,1变0。
- "^"异或:两者相同即为0,不同为1。
- "<<"左移:空位补0,溢出去掉。
- ">>"右移:正数补0,负数补1溢出去掉。
- ">>>"无符号右移:整体右移,空位补0,溢出去掉
位运算符
三元运算符
运算符优先级
- java中是表达式就是使用运算符连接起来的符合java规则的式子。运算符的优先级决定了表达式中运算符执行的先后顺序。通常优先级由高到低的顺序依次是:增量和减量运算;算术运算;比较运算;逻辑运算;赋值运算。
数据类型转换
隐式类型转换(自动类型转换,不会丢失数据)
- 从低级到高级类型转换,系统将自动执行,程序员无须进行任何操作。
显性类型转换(强制类型转换,可能会丢失数据)
- 当把高精度的变量的赋值给低精度的变量时,必须使用显式类型转换运算(又称强制类型转换)占用字节数大的转小的
代码注释与编码规范
代码注释
编码规范
4.流程控制
复合语句
条件语句
if条件语句
- if条件语句是一个重要的编程语句,用于告诉程序在某一个条件成立的情况下执行某段语句。而在另一种情况下执行另外的语句。
2.if...else语句:if...else语句设条件语句中最常用的一种形式,他会针对某种条件有选择地作出处理。通常表现为“如何满足某种条件就进行某种处理,否则就进行另一种处理。”
if(条件表达式){
语句序列1
}else{
语句序列2
}
if(条件表达式){
语句序列1
}else{
语句序列2
}
3.if...else if多分支语句:if...else if多分支语句用于针对某一事件的多种情况进行处理。通常表现为。如果满足某种条件进行某种处理,就进行某种处理,否则如果满足另一种条件就执行另一种处理。
if(条件表达式1){
语句序列1
}else if(条件表达式2){
语句序列2
}
...
else if (条件表达式n){
语句序列n
}
if(条件表达式1){
语句序列1
}else if(条件表达式2){
语句序列2
}
...
else if (条件表达式n){
语句序列n
}
4.witch多分支语句:在编程中,一个常见的问题就是检测一个变量是否符合某个条件。如果不符合,再用另一个词来检测,以此类推。当然,这种问题使用If条件语句也可以完成。
if(grade=='A'){
System.out.println("真棒");
}
if(grade=='B'){
System.out.println("做得不错");
}
语法:
switch(){
case 常量值1:
语句块1
[break;]
...
case 常量值n:
语句块n
[break;]
default:
语句块n+1;
[break;]
}
if(grade=='A'){
System.out.println("真棒");
}
if(grade=='B'){
System.out.println("做得不错");
}
语法:
switch(){
case 常量值1:
语句块1
[break;]
...
case 常量值n:
语句块n
[break;]
default:
语句块n+1;
[break;]
}
switch多分支语句
if(grade=='A'){
System.out.println("真棒");
}
if(grade=='B'){
System.out.println("做得不错");
}
语法:
switch(){
case 常量值1:
语句块1
[break;]
...
case 常量值n:
语句块n
[break;]
default:
语句块n+1;
[break;]
}
- 在许多编程语言中,switch语句可以用于根据不同的情况执行不同的代码,switch语句中的expression用于指定要测试的值,每个case语句用于测试一个可能的值。如果expression在任何一个case语句中的值与该case语句匹配,则相应的代码将被执行。如果没有任何一个case语句的值匹配,则执行默认块中的代码。每个case块必须以break语句结束,以避免执行下一个case块。
if(grade=='A'){
System.out.println("真棒");
}
if(grade=='B'){
System.out.println("做得不错");
}
语法:
switch(){
case 常量值1:
语句块1
[break;]
...
case 常量值n:
语句块n
[break;]
default:
语句块n+1;
[break;]
}
循环语句
whlie循环语句
while循环语句与其他编程语言中的while循环语句非常类似,也是根据条件循环执行一段代码,直到条件不再满足。
以下是while循环语句的结构:
while (condition) {
// 循环执行的代码,直到condition不再为真
}
以下是while循环语句的结构:
while (condition) {
// 循环执行的代码,直到condition不再为真
}
- condition是一个布尔表达式,如果该表达式的结果为true,循环内的代码将会执行。每次循环结束后,条件会被重新评估,如果条件仍为true,循环将继续执行。如果条件为false,循环将停止执行并跳转到while循环后面的代码
do...whlie循环语句
do while语句与while语句循环语句类似,它们之间的区别是while语句为先判断条件是否成立,再执行循环体。而do while循环语句则先执行一次,循环后再判断条件是否成立,也就是说do while循环语句“{}”中的程序段至少要被执行一次。
语法:do{
语句序列
}while(条件表达式);
语法:do{
语句序列
}while(条件表达式);
for循环语句
循环是将我程序设计中最有用的循环语法之一。一个for循环可以来重复执行某条语句。直到某个条件得到满足。for循环由两种语句一举是传统与from语句。一种是foreach语句。
子主题
循环控制
break语句
使用break语句可以跳出switch结构。在循环语句结构中,同样也可用break语句跳出当前循环体,从而中断当前循环
子主题
continue语句
是针对break的补充,continue不是立刻跳出循环体,而是跳出本次循环,回到循环的条件测试部分,重新开始循环。在for循环语句中遇到continue后,首先执行循环的增量部分,然后进行条件测试。在while和do while循环中,continue语句使控制直接回到条件测试部分。
5.数组
数组概述
在Java中,数组是一种对象,它可以保存同一种类型的多个元素,并且这些元素可以通过一个整数索引来访问。 Java数组有以下特点:
- Java数组的长度是固定的,在创建数组时需要指定长度。
- Java数组可以存储任何类型的元素,包括基本类型和对象类型。
- Java数组的下标从0开始。
- Java数组可以被初始化,可以通过循环和其他算法对数组中的元素进行处理。
一维数组
创建一维数组
声明一个数组变量,指定数组类型和数组名,例如:
int[] myArray;
创建一个数组,分配一段代表该数组的连续内存空间,例如:
myArray = new int[10];
这将创建一个10个整数的数组,它的每个元素都会被默认初始化为0。
或者一步完成声明、创建:
int[] myArray = new int[10];
可以通过下标来访问数组元素:
myArray[0] = 1;
myArray[1] = 2;
myArray[2] = 3;
//... 省略后面的元素
可以使用循环来快速地对数组进行初始化或遍历:
for (int i = 0; i < myArray.length; i++) {
myArray[i] = i * i;
}
可以使用数组实用工具类Arrays进行一些常见操作,例如排序:
Arrays.sort(myArray);
这些是创建一维数组的基本过程,在实际开发中,我们也可以在创建数组时直接给它赋值,例如:
int[] myArray = {1, 2, 3, 4, 5};
这将创建一个包含5个元素的整数数组,其值分别为1、2、3、4和5。
声明一个数组变量,指定数组类型和数组名,例如:
int[] myArray;
创建一个数组,分配一段代表该数组的连续内存空间,例如:
myArray = new int[10];
这将创建一个10个整数的数组,它的每个元素都会被默认初始化为0。
或者一步完成声明、创建:
int[] myArray = new int[10];
可以通过下标来访问数组元素:
myArray[0] = 1;
myArray[1] = 2;
myArray[2] = 3;
//... 省略后面的元素
可以使用循环来快速地对数组进行初始化或遍历:
for (int i = 0; i < myArray.length; i++) {
myArray[i] = i * i;
}
可以使用数组实用工具类Arrays进行一些常见操作,例如排序:
Arrays.sort(myArray);
这些是创建一维数组的基本过程,在实际开发中,我们也可以在创建数组时直接给它赋值,例如:
int[] myArray = {1, 2, 3, 4, 5};
这将创建一个包含5个元素的整数数组,其值分别为1、2、3、4和5。
初始化一维数组
静态初始化(指定元素值)
静态初始化数组时,需要用一组初始值来指定数组的元素值。例如:
int[] myArray = {1, 2, 3, 4, 5};
在这个例子中,我们声明并初始化了一个大小为5的整型数组,并指定了初始元素值。
动态初始化(指定数组长度)
动态初始化数组时,需要指定数组的大小,然后数组元素会被默认初始化为相应类型的默认值(整型为0,布尔型为false,对象类型为null)。例如:
int[] myArray = new int[5];
在这个例子中,我们声明并动态初始化了一个长度为5的整型数组。
通过循环进行初始化
通过循环进行初始化是比较常见的方法。例如:
int length = 5;
int[] myArray = new int[length];
for (int i = 0; i < length; i++) {
myArray[i] = i + 1;
}
在这个例子中,我们声明并动态初始化了一个长度为5的整型数组,并通过循环初始化了数组元素的值。
静态初始化数组时,需要用一组初始值来指定数组的元素值。例如:
int[] myArray = {1, 2, 3, 4, 5};
在这个例子中,我们声明并初始化了一个大小为5的整型数组,并指定了初始元素值。
动态初始化(指定数组长度)
动态初始化数组时,需要指定数组的大小,然后数组元素会被默认初始化为相应类型的默认值(整型为0,布尔型为false,对象类型为null)。例如:
int[] myArray = new int[5];
在这个例子中,我们声明并动态初始化了一个长度为5的整型数组。
通过循环进行初始化
通过循环进行初始化是比较常见的方法。例如:
int length = 5;
int[] myArray = new int[length];
for (int i = 0; i < length; i++) {
myArray[i] = i + 1;
}
在这个例子中,我们声明并动态初始化了一个长度为5的整型数组,并通过循环初始化了数组元素的值。
使用一维数组
二维数组
创建二维数组
二维数组是数组的一种扩展形式,它可以存储表格或矩阵型数据。声明一个二维数组变量,指定数组类型和数组名,例如:
int[][] myArray;
创建一个二维数组,也就是为数组中每一个元素都创建一个一维数组。注意:创建二维数组时需要同时指定行数和列数,例如:
myArray = new int[3][2];
这将创建一个3行2列的二维数组。这样就可以使用两个下标来访问二维数组中的每一个元素。
可以通过两个下标来访问数组元素:
myArray[0][0] = 1;
myArray[0][1] = 2;
myArray[1][0] = 3;
myArray[1][1] = 4;
myArray[2][0] = 5;
myArray[2][1] = 6;
这将分别给二维数组中的每一个元素赋值。
也可以在创建时指定元素值进行初始化:
int[][] myArray = {{1, 2}, {3, 4}, {5, 6}};
这将创建一个3行2列的二维数组,并且每个元素都已经有初始值了。
int[][] myArray;
创建一个二维数组,也就是为数组中每一个元素都创建一个一维数组。注意:创建二维数组时需要同时指定行数和列数,例如:
myArray = new int[3][2];
这将创建一个3行2列的二维数组。这样就可以使用两个下标来访问二维数组中的每一个元素。
可以通过两个下标来访问数组元素:
myArray[0][0] = 1;
myArray[0][1] = 2;
myArray[1][0] = 3;
myArray[1][1] = 4;
myArray[2][0] = 5;
myArray[2][1] = 6;
这将分别给二维数组中的每一个元素赋值。
也可以在创建时指定元素值进行初始化:
int[][] myArray = {{1, 2}, {3, 4}, {5, 6}};
这将创建一个3行2列的二维数组,并且每个元素都已经有初始值了。
初始化二维数组
二维数组的初始化与一维数组初始化类似,同样可以使用大括号完成:type arrayname[][]={value1,value2,...valuen};.type:数组数据类型。arrayname:数组名称,一个合法的标识符。value:二维数组中各元素,都代表一个一维数组。初始化二维数组,代码如下:int myarr[][]={{12,0},{45,10}};
使用二维数组
数组的基本操作
遍历数组
可以使用循环来遍历数组中的元素。在遍历数组时,可以使用for、while等循环语句,也可以使用增强for循环。
以下是一个使用for循环遍历数组元素的示例:
int[] myArray = {1, 2, 3, 4, 5};
for (int i = 0; i < myArray.length; i++) {
System.out.println(myArray[i]);
}
在这个例子中,我们声明并初始化了一个整型数组,并使用for循环遍历了数组中的所有元素。在循环中,我们通过数组长度属性 length 获取数组的长度,然后使用下标 i 来遍历数组中的每一个元素。
以下是一个使用增强for循环遍历数组元素的示例:
int[] myArray = {1, 2, 3, 4, 5};
for (int value : myArray) {
System.out.println(value);
}
在这个例子中,我们使用增强for循环遍历了整型数组中的所有元素,并将元素值输出。在循环中,我们使用“类型 变量名 : 数组”这种语法结构,将数组中的元素一个一个赋值给变量,然后使用变量来处理每个元素。
以下是一个使用for循环遍历数组元素的示例:
int[] myArray = {1, 2, 3, 4, 5};
for (int i = 0; i < myArray.length; i++) {
System.out.println(myArray[i]);
}
在这个例子中,我们声明并初始化了一个整型数组,并使用for循环遍历了数组中的所有元素。在循环中,我们通过数组长度属性 length 获取数组的长度,然后使用下标 i 来遍历数组中的每一个元素。
以下是一个使用增强for循环遍历数组元素的示例:
int[] myArray = {1, 2, 3, 4, 5};
for (int value : myArray) {
System.out.println(value);
}
在这个例子中,我们使用增强for循环遍历了整型数组中的所有元素,并将元素值输出。在循环中,我们使用“类型 变量名 : 数组”这种语法结构,将数组中的元素一个一个赋值给变量,然后使用变量来处理每个元素。
填充替换数组元素
可以使用 Arrays 类提供的方法来对数组的元素进行填充和替换。Arrays 类是 Java 内置的一个工具类,提供了一系列操作数组的工具方法。语法如下:fill(int[]a,intvalue);a:要进行元素替换的数组。value:要储存数组中所有元素的值。
对数组进行排序
替换数组部分元素:前改后不改
复制数组
复制数组元素:空位不0,溢出去掉。新数组名=Arrays.copyof(旧数组名,新数组长度)
查询数组
查询数组元素:先排序再查询,前含后不含。
数组排序算法
冒泡排序:是最常用的数组排序算法之一,它排序数组元素的过程总是将小的数往前放,较大的往后放,类似水中冒泡往上升的动作,所以叫冒泡排序
基本思想:比较相邻的元素,把较小的元素移动到数组前面,把较大的元素放到数组后面,这样较小的元素就像气泡一样从底部上升到顶部
算法示例:冒泡排序由双层循环实现,外层循环用于控制层数,一般要循环数组长度减一次才能保证完成排序,内层循环主要用于对比数组中每个相邻的元素大小判断是否交换位置。反转排序:
以相反的顺序把原有数组的元素重新排序,也是经常用到的一种排序方法
基本思想:
将数组最后一个元素和第一个元素交换,倒数第二个元素和第二个元素交换,以此类推,直到把所有元素反转替换
算法示例:
反转排序是对数组两边的元素进行替换,所以只需要循环数组长度的半数次,如果数组长度位奇数,例如数组长度为7,那么只会循环3次,中间的数不变
基本思想:比较相邻的元素,把较小的元素移动到数组前面,把较大的元素放到数组后面,这样较小的元素就像气泡一样从底部上升到顶部
算法示例:冒泡排序由双层循环实现,外层循环用于控制层数,一般要循环数组长度减一次才能保证完成排序,内层循环主要用于对比数组中每个相邻的元素大小判断是否交换位置。反转排序:
以相反的顺序把原有数组的元素重新排序,也是经常用到的一种排序方法
基本思想:
将数组最后一个元素和第一个元素交换,倒数第二个元素和第二个元素交换,以此类推,直到把所有元素反转替换
算法示例:
反转排序是对数组两边的元素进行替换,所以只需要循环数组长度的半数次,如果数组长度位奇数,例如数组长度为7,那么只会循环3次,中间的数不变
6.类和对象
面向对象概述
封装性,继承性,多态性
类
成员变量
它包含getName和setName()
以下快速生成getName和setName()的方法。定义成员方法的语法格式如下:
权限修饰符 返回值类型 方法名(参数类型 参数名){
....
return 返回值;
}
它包含getName和setName()
以下快速生成getName和setName()的方法。定义成员方法的语法格式如下:
权限修饰符 返回值类型 方法名(参数类型 参数名){
....
return 返回值;
}
局部变量
如果在一个成员方法里定义一个变量,那么这个变量就称为局部变量,局部变量是在方法被执行时创建,在方法执行结束时销毁,局部变量在使用时必须进行赋值操作或被初始化,否则出现编译错误。
如果在一个成员方法里定义一个变量,那么这个变量就称为局部变量,局部变量是在方法被执行时创建,在方法执行结束时销毁,局部变量在使用时必须进行赋值操作或被初始化,否则出现编译错误。
his关键字
this关键字用于表示本类的当前对象,当前对象不是某个new出来的实体对象,而是当前正在编辑的类,this关键字只能在本类的使用
public void setName(string name){
this.name=name;
}
其实,this除了可以调用成员变量和成员方法,还可以作为方法的返回值,如:
public Book getBook(){
return this;
}
this关键字用于表示本类的当前对象,当前对象不是某个new出来的实体对象,而是当前正在编辑的类,this关键字只能在本类的使用
public void setName(string name){
this.name=name;
}
其实,this除了可以调用成员变量和成员方法,还可以作为方法的返回值,如:
public Book getBook(){
return this;
}
类的构造方法
构造特点:构造方法没有返回值。构造方法的名称要与本类的名称相同。public:构造方法修饰符。Book:构造方法的名称。
静态变量和静态方法
静态变量(也称为类变量)和静态方法是Java编程中的两个重要概念。它们与特定实例无关,而是与类相关联。
静态变量是指在类被加载时创建的变量,它们的值在整个类中是共享的。可以使用类名.静态变量的方式直接访问静态变量。例如:
public class MyClass {
public static int count = 0;
}
在这个例子中,count是一个静态变量,可以通过MyClass.count的方式访问。
静态方法是指被声明为静态的方法,它们在整个类中都是共享的。因此,可以通过类名.静态方法的方式直接调用静态方法,而不需要创建类的实例。例如:
public class MyClass {
public static void printMessage() {
System.out.println("Hello, world!");
}
}
在这个例子中,printMessage()是一个静态方法,可以通过MyClass.printMessage()的方式直接调用。
静态变量是指在类被加载时创建的变量,它们的值在整个类中是共享的。可以使用类名.静态变量的方式直接访问静态变量。例如:
public class MyClass {
public static int count = 0;
}
在这个例子中,count是一个静态变量,可以通过MyClass.count的方式访问。
静态方法是指被声明为静态的方法,它们在整个类中都是共享的。因此,可以通过类名.静态方法的方式直接调用静态方法,而不需要创建类的实例。例如:
public class MyClass {
public static void printMessage() {
System.out.println("Hello, world!");
}
}
在这个例子中,printMessage()是一个静态方法,可以通过MyClass.printMessage()的方式直接调用。
类的主方法
主方法是类的入口点,它定义了程序从何处开始,主方法提供对程序流向的控制,java编译器通过主方法来执行程序,主方法的语法如下:
public static void main(String[]args){
//方法体
}
主方法具有以下特性:
主方法是静态的,所以如果要直接在主方法中调用其他方法,则该方法必须也是静态的
主方法没有返回值
主方法的形参为数组,其中,args[0]~args[n]分别代表程序的第一个参数到第n个参数,可以使用args.length获取参数的个数
public static void main(String[]args){
//方法体
}
主方法具有以下特性:
主方法是静态的,所以如果要直接在主方法中调用其他方法,则该方法必须也是静态的
主方法没有返回值
主方法的形参为数组,其中,args[0]~args[n]分别代表程序的第一个参数到第n个参数,可以使用args.length获取参数的个数
对象
对象可以认为是在一类事物中抽象某一个特例,可以通过这个特例来处理这类事物出现的问题,在java语言中,通过new操作符来创建对象,在讲解构造方法时介绍过,每实例化一个对象就会自动调用一次构造方法,实质上这个过程就是创建对象的过程。准确的说,可以在java语言中使用new操作符调用构造方法创建对象,语法如下:
Tset tset=new Tset();
Tset tese=new Tset("a");
Tset tset=new Tset();
Tset tese=new Tset("a");
7.继承,多态,抽象类与接口
类的继承
所以类的构造方法第一行都有一个隐藏的'super();'.作用是在执行该结构方法之前调用其文类构造方法。就近原则。子类重写文类的方法:返回参数相同,方法名相同,传入参数相同,只有方法体不同。
object类
Object类比较特殊,他是所以类的父类,类似原神世界树一样的存在,是java类层中的最高层类,用户创建一个类时,除非已经指定要从其他类继承,否则就是默认继承Object。
7.2.1 getClass()方法
用来查询类的名称
语法如下:
getClass().getname();
7.2.2 toString方法
将一个对象返回为字符串形式
7.2.1 getClass()方法
用来查询类的名称
语法如下:
getClass().getname();
7.2.2 toString方法
将一个对象返回为字符串形式
public class ilti7_3 {
//成员变量
String name;
int age;
public ilti7_3(String name,int age) { //构造方法
this.name = name;
this.age = age;
}
public String toString() {
return "我叫"+name+",今年"+age+"岁。";//定义一个方法名为toString
}
public static void main(String[] args) {
// TODO Auto-generated method stub
ilti7_3 s1 = new ilti7_3("张三",16);
System.out.println(s1);
ilti7_3 s2 = new ilti7_3("李四",19);
System.out.println(s2);
}
}
//成员变量
String name;
int age;
public ilti7_3(String name,int age) { //构造方法
this.name = name;
this.age = age;
}
public String toString() {
return "我叫"+name+",今年"+age+"岁。";//定义一个方法名为toString
}
public static void main(String[] args) {
// TODO Auto-generated method stub
ilti7_3 s1 = new ilti7_3("张三",16);
System.out.println(s1);
ilti7_3 s2 = new ilti7_3("李四",19);
System.out.println(s2);
}
}
对象类型的转换
向上转型
子类对象赋值给父类引用
Animal a = new Dog();
自动类型转换
Animal a = new Dog();
自动类型转换
向下转型
子类类型 子类对象 = (子类类型)父类对象;
使用instanceof关键字判断对象类型
instanceof的语法格式:myobject instanceof ExampleClass。myobject::某类的对象引用。ExampleClass:某个类
方法的重载
重载是指在同一个类中可以定义多个同名的方法,但是它们的参数列表必须不同。参数列表包括参数的类型、数量和顺序。方法重载提供了一种方便的方式来扩展类的功能,在保持方法名称的前提下,可以使用不同的参数类型或数量来实现不同的方法。
final关键字
final关键字
final:最终的,最后的。它可以用来声明变量,一旦该变量被设定,就不可再改变我们称之为常量
final方法
final修饰方法————该方法不可被重写
final类
被final修饰的类不可被继承,不可被更改如果希望一个类不可被任何类继承,或更改,可以使用将这个类设置为final类。
语法如下:
final 类名{}
语法如下:
final 类名{}
多态
利用多态可以使程序具有良好的扩展性,并可以对所以类对象进行通用的处理。
假如现在要编写一个绘制图形的方法draw(),如果转入正方形对象就绘制正方形,如果转入圆形对象就绘制圆形,这种场景可以使用重载来实现:
public void draw(Square s){ //绘制正方形的方法
}
public void draw(Cicular){ //绘制圆形的方法
}
class Shape{} //圆形类
class Square extends Shape{} //正方形类继承图形类
class Circular extends Shape{} //圆形类继承圆形类
public class Demo6{
public static void draw(Shape s){ //绘制方法
if(s instanceof Square){ //如果是正方形
System.out.println("绘制正方形");
}else if (s instanceof Circular){ //如果是圆形
System.out.println("绘制图行");
}else{ //如果是其他类型
System.out.println("绘制父类图形");
}
}
public static void main(String[] args){
draw(new Shape());
draw(new Squsre());
draw(new Circular());
}
假如现在要编写一个绘制图形的方法draw(),如果转入正方形对象就绘制正方形,如果转入圆形对象就绘制圆形,这种场景可以使用重载来实现:
public void draw(Square s){ //绘制正方形的方法
}
public void draw(Cicular){ //绘制圆形的方法
}
class Shape{} //圆形类
class Square extends Shape{} //正方形类继承图形类
class Circular extends Shape{} //圆形类继承圆形类
public class Demo6{
public static void draw(Shape s){ //绘制方法
if(s instanceof Square){ //如果是正方形
System.out.println("绘制正方形");
}else if (s instanceof Circular){ //如果是圆形
System.out.println("绘制图行");
}else{ //如果是其他类型
System.out.println("绘制父类图形");
}
}
public static void main(String[] args){
draw(new Shape());
draw(new Squsre());
draw(new Circular());
}
抽象类与接口
抽象类
通常可以说四边形具有4条边,或者更具体一点,平行四边形是具有对边平行且相等特征性的特殊四边形,等腰三角形.
仅用来描述特征且极具抽象性类,在java中被定义为抽象类
抽象类与方法使用abstract关键词定义
抽象方法语法:修饰符 abstract 返回参数 方法名 (传入参数);
与传统方法不同,抽象方法没有方法体,有抽象方法的类一定是抽象类,当父类是抽象类,有抽象方法时,它的子类要么重写父类的抽象方法,要么定义为抽象类(抽象方法重写之后就是普通方法了)
抽象类语法:修饰符 abstract class 类名{}
通常可以说四边形具有4条边,或者更具体一点,平行四边形是具有对边平行且相等特征性的特殊四边形,等腰三角形.
仅用来描述特征且极具抽象性类,在java中被定义为抽象类
抽象类与方法使用abstract关键词定义
抽象方法语法:修饰符 abstract 返回参数 方法名 (传入参数);
与传统方法不同,抽象方法没有方法体,有抽象方法的类一定是抽象类,当父类是抽象类,有抽象方法时,它的子类要么重写父类的抽象方法,要么定义为抽象类(抽象方法重写之后就是普通方法了)
抽象类语法:修饰符 abstract class 类名{}
接口
接口是抽象类的延伸,可以将它看作是纯粹的抽象类,接口中所有的方法都是抽象方法·,由于java语言每个类只能继承一个父类,因此接口的作用就凸显出来,一个类可以实现多个接口,可以看作一个类可以拥有多个父类(便于理解并不是官方意思)
接口使用interface关键词定义
接口语法:修饰符 interface 接口名
实现 implements
java语言每个类可以实现多个接口
实现语法:修饰符 class 类名 implements 接口1,接口2,...{}
————————————————
接口是抽象类的延伸,可以将它看作是纯粹的抽象类,接口中所有的方法都是抽象方法·,由于java语言每个类只能继承一个父类,因此接口的作用就凸显出来,一个类可以实现多个接口,可以看作一个类可以拥有多个父类(便于理解并不是官方意思)
接口使用interface关键词定义
接口语法:修饰符 interface 接口名
实现 implements
java语言每个类可以实现多个接口
实现语法:修饰符 class 类名 implements 接口1,接口2,...{}
————————————————
8.包和内部类
java类包
Java中的类包(Class Package)指的是将不同的类组合在一起并且放在同一个包(Package)中的一种机制。类包的主要作用是:
1.避免类的冲突,可以在一个项目中使用相同的类名,只要它们被放在不同的包中就可以避免命名冲突。
2.方便管理和维护。将相关的类组织到一个包中,使得代码结构更加清晰,易于查找和修改。
3.提高代码的复用性。将类放置在不同的包中,并且使用Java的访问控制机制来限制类的访问权限,可以将代码的公共部分抽取出来,形成一个独立的包,供其他程序重用。
1.避免类的冲突,可以在一个项目中使用相同的类名,只要它们被放在不同的包中就可以避免命名冲突。
2.方便管理和维护。将相关的类组织到一个包中,使得代码结构更加清晰,易于查找和修改。
3.提高代码的复用性。将类放置在不同的包中,并且使用Java的访问控制机制来限制类的访问权限,可以将代码的公共部分抽取出来,形成一个独立的包,供其他程序重用。
8.1.1类目冲突
Java中每个接口或类都来自不同的类包,无论是Java API的类与接口还是自定义类与接口,都需要隶属于某一个类名,这个类包含了一些类和接口,如果没有包的存在,管理程序中的类名称是一件非常麻烦的事情,如果程序由一个类组成,自然不会出现类名重叠的问题,但是随着程序的类的数量增多,难免会出现这一问题。
8.1.2创建包
在eclipse中创建包的步骤如下:
(1)在项目的src节点上右击,选择“新建”/“包”的命令
(2)弹出“新建java包”对话框,在“名称”文本框中输入新建的包名,如com.mr,然后单击“完成”按钮
(3)在eclipse中创建类时,可以在新建立的包上右击,选择“新建”命令,这样子新建的类会默认保存在该包中。另外也可以在new java class对话框中指定指定新建类所在的包。
Java中每个接口或类都来自不同的类包,无论是Java API的类与接口还是自定义类与接口,都需要隶属于某一个类名,这个类包含了一些类和接口,如果没有包的存在,管理程序中的类名称是一件非常麻烦的事情,如果程序由一个类组成,自然不会出现类名重叠的问题,但是随着程序的类的数量增多,难免会出现这一问题。
8.1.2创建包
在eclipse中创建包的步骤如下:
(1)在项目的src节点上右击,选择“新建”/“包”的命令
(2)弹出“新建java包”对话框,在“名称”文本框中输入新建的包名,如com.mr,然后单击“完成”按钮
(3)在eclipse中创建类时,可以在新建立的包上右击,选择“新建”命令,这样子新建的类会默认保存在该包中。另外也可以在new java class对话框中指定指定新建类所在的包。
内部类
内部类是在一个类的内部定义的类。它有以下几种类型:
1.成员内部类:定义在类的内部,并且在类的成员位置。它可以访问外部类的所有成员,包括私有成员,而且外部类可以访问内部类的所有成员。语法如下:class OuterClass{ //外部类
class lnnerClass{ //内部类
2.局部内部类:定义在一个方法或语句块内部的类。它的访问权限仅限于方法或语句块内部,它可以访问外部类的所有成员,但是外部类不能访问内部类的成员。
3.匿名内部类:没有构造方法,没有显式的类名,通常用作实现接口或抽象类的匿名类。它可以访问外部类的所有成员,但是外部类不能访问内部类的成员。
4.静态内部类:定义在类的内部,但是使用 static 修饰符修饰。它的访问权限和成员变量和静态方法一样,可以直接通过类名访问,而不用实例化外部类。
1.成员内部类:定义在类的内部,并且在类的成员位置。它可以访问外部类的所有成员,包括私有成员,而且外部类可以访问内部类的所有成员。语法如下:class OuterClass{ //外部类
class lnnerClass{ //内部类
2.局部内部类:定义在一个方法或语句块内部的类。它的访问权限仅限于方法或语句块内部,它可以访问外部类的所有成员,但是外部类不能访问内部类的成员。
3.匿名内部类:没有构造方法,没有显式的类名,通常用作实现接口或抽象类的匿名类。它可以访问外部类的所有成员,但是外部类不能访问内部类的成员。
4.静态内部类:定义在类的内部,但是使用 static 修饰符修饰。它的访问权限和成员变量和静态方法一样,可以直接通过类名访问,而不用实例化外部类。
内部类可以使用外部类的成员
9.异常处理
异常概述
异常是指在程序运行期间出现的错误或异常情况。Java 提供了一套异常处理机制,程序员可以利用这些机制来优雅地处理异常
异常的抛出与捕捉
当程序运行过程中出现异常情况时,会自动抛出异常。如果异常没有被处理,程序会停止执行。Java提供了try/catch和throw关键字来处理异常。
抛出异常
使用throw关键字可以在代码中手动抛出异常。例如:
public void divide(int a, int b) throws ArithmeticException{
if(b == 0){
throw new ArithmeticException("除数不能为0");
}
System.out.println(a/b);
}
在上述代码中,当除数为0时,手动抛出一个ArithmeticException异常。
捕捉异常
使用try/catch语句块可以捕捉和处理异常。例如:
try {
// 可能会产生异常的代码
}
catch (Exception1 e1) {
// 处理异常1,例如打印日志
}
catch (Exception2 e2) {
// 处理异常2,例如发送邮件通知管理员
}
finally {
// 无论是否产生异常,都会执行的代码
}
在上述代码中,任何抛出Exception1或Exception2异常的代码块都将会被捕获并且由相应的catch代码块进行处理。finally语句块中的代码必定会执行,并且会在try-catch块结束后执行。
抛出和捕捉自定义异常
在Java中,除了使用系统自带的异常类,我们也可以自定义异常类来更好地处理异常。例如:
public class MyException extends Exception{
public MyException(String message){
super(message);
}
}
public class Demo{
public static void main(String[] args){
try{
throw new MyException("自定义异常");
}catch(MyException e){
System.out.println(e.getMessage());
}
}
}
抛出异常
使用throw关键字可以在代码中手动抛出异常。例如:
public void divide(int a, int b) throws ArithmeticException{
if(b == 0){
throw new ArithmeticException("除数不能为0");
}
System.out.println(a/b);
}
在上述代码中,当除数为0时,手动抛出一个ArithmeticException异常。
捕捉异常
使用try/catch语句块可以捕捉和处理异常。例如:
try {
// 可能会产生异常的代码
}
catch (Exception1 e1) {
// 处理异常1,例如打印日志
}
catch (Exception2 e2) {
// 处理异常2,例如发送邮件通知管理员
}
finally {
// 无论是否产生异常,都会执行的代码
}
在上述代码中,任何抛出Exception1或Exception2异常的代码块都将会被捕获并且由相应的catch代码块进行处理。finally语句块中的代码必定会执行,并且会在try-catch块结束后执行。
抛出和捕捉自定义异常
在Java中,除了使用系统自带的异常类,我们也可以自定义异常类来更好地处理异常。例如:
public class MyException extends Exception{
public MyException(String message){
super(message);
}
}
public class Demo{
public static void main(String[] args){
try{
throw new MyException("自定义异常");
}catch(MyException e){
System.out.println(e.getMessage());
}
}
}
java常见的异常类
自定义异常
使用java内置的异常类可以描述在编程时出现的大部分异常情况。除此之外,用户只需要继承Exception类即可自拟定异常类。在程序中使用自定义异常类,大体可分为以下几个步骤:1.创建自定义异常类。2.在方法中通过throw关键字抛出异常对象。3.如果在当前抛出异常的方法中处理异常,可以使用try-catch语句块捕获并处理,否则在方法的声明处通过throws关键字指明要抛出给方法调用者的异常,继续进行下一步操作。4.在出现异常的方法都调用者中捕获并处理异常。
在方法中抛出异常
throws关键字通常被用于声明方法时,用来指定可能抛出的异常,多个异常可使用逗号分隔。throw通常用于方法体中,并且抛出一个异常对象,程序在执行到throw语句立刻中断,它后面的语句不会执行
运行时异常
RuntimeException异常时程序运行中抛出的异常,java类库的每个包中都定义了异常类所有这些类都是Throwable类的子类,Throwable类派生了两个子类,分别是Exception类和Error类,Error类及其子类用来描述java运行系统中的内部错误以及资源耗尽的错误,这类错误比较严重,Exception类称为非致命性类,可以通过捕捉处理来使程序继续执行,Exception类又根据错误发生的原因分为 RuntimeException异常和除 RuntimeException异常之外的异常。
异常的使用原则
java异常强制用户考虑程序的强健性和安全性,异常处理不应用来控制程序的正常流程,其主要作用是捕获程序在运行时发生的异常并进行相应处理,编写代码处理某个方法可能出现异常时,可遵循以下几条原则:
1.在当前方法声明中使用try-catch语句捕获异常
2.一个方法被覆盖时,覆盖它的方法必须抛出相同的异常或者异常的子类
3.如果父类抛出多个异常,则覆盖方法必须抛出那些异常的一个子集。不能抛出新异常。
1.在当前方法声明中使用try-catch语句捕获异常
2.一个方法被覆盖时,覆盖它的方法必须抛出相同的异常或者异常的子类
3.如果父类抛出多个异常,则覆盖方法必须抛出那些异常的一个子集。不能抛出新异常。
10.字符串
String类
单个字符使用char类型保存,而多个字符组成的文本就需要使用String类型来保存了,String类型最多可以保存2的32次方-1个字节(占用4Gb空间大小)
10.1.1声明字符串
字符串必须要包含在一对双引号("")之内,例如
"12,32","ABCD","你好"
可以通过以下语法来声明字符串变量
String str;
使用String声明变量s:
String s;
10.1.2创建字符串
在java中将字符串作为对象来处理,因此可以像创建其它类对象一样来创建字符串对象创建对象要使用类的构造方法,String类的常用构造方法如下
1.String(char a[])
该方法用一个字符数组a创建String对象,代码如下:
char a[] = {'g','o','o','d'};
String s = new String(a);
//上述代码等同于以下代码
String s = new String("good");
2.String (char a[],int offset,int length)
该方法提取字符数组a中的一部分创建一个字符串对象。参数offset表示开始截取字符串的位置,length表示截取字符串的长度,代码如下:
char a[] = {'s','t','u','d','e','n','t'};
String s = new String(a,2,4);
//上述代码等同于以下代码
String s = new String("uden");
3.String(char[] valie)
该构造方法可分配一个新的String对象,使其表示字符数组参数中所有的元素连接的结果,代码如下
char a[] = {'s','t','u','d','e','n','t'};
String s = new String(a);
//上述代码等同于以下代码
String s = new String("student");
10.1.1声明字符串
字符串必须要包含在一对双引号("")之内,例如
"12,32","ABCD","你好"
可以通过以下语法来声明字符串变量
String str;
使用String声明变量s:
String s;
10.1.2创建字符串
在java中将字符串作为对象来处理,因此可以像创建其它类对象一样来创建字符串对象创建对象要使用类的构造方法,String类的常用构造方法如下
1.String(char a[])
该方法用一个字符数组a创建String对象,代码如下:
char a[] = {'g','o','o','d'};
String s = new String(a);
//上述代码等同于以下代码
String s = new String("good");
2.String (char a[],int offset,int length)
该方法提取字符数组a中的一部分创建一个字符串对象。参数offset表示开始截取字符串的位置,length表示截取字符串的长度,代码如下:
char a[] = {'s','t','u','d','e','n','t'};
String s = new String(a,2,4);
//上述代码等同于以下代码
String s = new String("uden");
3.String(char[] valie)
该构造方法可分配一个新的String对象,使其表示字符数组参数中所有的元素连接的结果,代码如下
char a[] = {'s','t','u','d','e','n','t'};
String s = new String(a);
//上述代码等同于以下代码
String s = new String("student");
连接字符串
对于已经声明的字符串,也可以对其进行相应操作,连接字符串就是字符串操作中比较简单的一种,可对于多个字符串进行连接,也可以使字符串与其他数据类型进行连接
10.2.1连接多个字符串
使用“+”运算符可实现多个字符串连接,“+”运算符可以连接多个Sting对象并产生一个新的String对象 10.2.2连接其他数据类型
字符串也可以同其他数据类型相连接,如果将字符串同其他数据类型进行连接,会将其他数据类型直接转换为字符串
10.2.1连接多个字符串
使用“+”运算符可实现多个字符串连接,“+”运算符可以连接多个Sting对象并产生一个新的String对象 10.2.2连接其他数据类型
字符串也可以同其他数据类型相连接,如果将字符串同其他数据类型进行连接,会将其他数据类型直接转换为字符串
获取字符串信息
字符串作为对象,可通过相应方法获取字符串的有效信息 ,如获取某字符串的长度,每个索引位置的字符等。获取字符串的长度
使用String类的length()方法可获取声明的字符串对象的长度。语法如下:
str.length();
其中,str为字符串对象。String类提供了两种查找字符串的方法,即indexOf()与lastindxOf()方法。这两种方法都允许在字符串中搜索指定条件的字符或字符串。indexOf()方法返回的是搜索的字符或字符串首次出现的位置,lastIndexOf()方法返回的是搜索的字符或字符串最后一次的位置。
1.inexOf(String s)
该方法用于返回参数字符串s在指定字符串中首次出现的索引位置。当调用String类的indexOf()方法时,会从当前字符串的开始位置搜索s的位置。如果没有检索到字符串s,该方法的返回值是-1。
语法如下:
str.indexOf(substr)
str:
任意字符串对象。
substr:
要搜索的字符串。
查找字符a在字符串str中的索引位置,代码如下:
String str = "We are students";
int size = str.indexOf("a");//变量size的值为3
2.lastlndexOf(String str)
该方法用于指定字符串最后一次出现的索引位置。当调用String类的lastlndexOf()方法时,会从当前字符串的开始位置检索参数字符串str,并将最后一次出现str的索引位置返回。如果没有检索到字符串str,该方法返回-1。语法如下:
str.lastlndexOf(substr)
str:
任意字符串对象。
使用String类的length()方法可获取声明的字符串对象的长度。语法如下:
str.length();
其中,str为字符串对象。String类提供了两种查找字符串的方法,即indexOf()与lastindxOf()方法。这两种方法都允许在字符串中搜索指定条件的字符或字符串。indexOf()方法返回的是搜索的字符或字符串首次出现的位置,lastIndexOf()方法返回的是搜索的字符或字符串最后一次的位置。
1.inexOf(String s)
该方法用于返回参数字符串s在指定字符串中首次出现的索引位置。当调用String类的indexOf()方法时,会从当前字符串的开始位置搜索s的位置。如果没有检索到字符串s,该方法的返回值是-1。
语法如下:
str.indexOf(substr)
str:
任意字符串对象。
substr:
要搜索的字符串。
查找字符a在字符串str中的索引位置,代码如下:
String str = "We are students";
int size = str.indexOf("a");//变量size的值为3
2.lastlndexOf(String str)
该方法用于指定字符串最后一次出现的索引位置。当调用String类的lastlndexOf()方法时,会从当前字符串的开始位置检索参数字符串str,并将最后一次出现str的索引位置返回。如果没有检索到字符串str,该方法返回-1。语法如下:
str.lastlndexOf(substr)
str:
任意字符串对象。
字符串操作
单个字符使用char类型保存,而多个字符组成的文本就需要使用String类型来保存了,String类型最多可以保存2的32次方-1个字节(占用4Gb空间大小)
10.1.1声明字符串
字符串必须要包含在一对双引号("")之内,例如
"12,32","ABCD","你好"
可以通过以下语法来声明字符串变量
String str;
使用String声明变量s:
String s;
10.1.2创建字符串
在java中将字符串作为对象来处理,因此可以像创建其它类对象一样来创建字符串对象创建对象要使用类的构造方法,String类的常用构造方法如下
1.String(char a[])
该方法用一个字符数组a创建String对象,代码如下:
char a[] = {'g','o','o','d'};
String s = new String(a);
//上述代码等同于以下代码
String s = new String("good");
2.String (char a[],int offset,int length)
该方法提取字符数组a中的一部分创建一个字符串对象。参数offset表示开始截取字符串的位置,length表示截取字符串的长度,代码如下:
char a[] = {'s','t','u','d','e','n','t'};
String s = new String(a,2,4);
//上述代码等同于以下代码
String s = new String("uden");
3.String(char[] valie)
该构造方法可分配一个新的String对象,使其表示字符数组参数中所有的元素连接的结果,代码如下
char a[] = {'s','t','u','d','e','n','t'};
String s = new String(a);
//上述代码等同于以下代码
String s = new String("student");
10.1.1声明字符串
字符串必须要包含在一对双引号("")之内,例如
"12,32","ABCD","你好"
可以通过以下语法来声明字符串变量
String str;
使用String声明变量s:
String s;
10.1.2创建字符串
在java中将字符串作为对象来处理,因此可以像创建其它类对象一样来创建字符串对象创建对象要使用类的构造方法,String类的常用构造方法如下
1.String(char a[])
该方法用一个字符数组a创建String对象,代码如下:
char a[] = {'g','o','o','d'};
String s = new String(a);
//上述代码等同于以下代码
String s = new String("good");
2.String (char a[],int offset,int length)
该方法提取字符数组a中的一部分创建一个字符串对象。参数offset表示开始截取字符串的位置,length表示截取字符串的长度,代码如下:
char a[] = {'s','t','u','d','e','n','t'};
String s = new String(a,2,4);
//上述代码等同于以下代码
String s = new String("uden");
3.String(char[] valie)
该构造方法可分配一个新的String对象,使其表示字符数组参数中所有的元素连接的结果,代码如下
char a[] = {'s','t','u','d','e','n','t'};
String s = new String(a);
//上述代码等同于以下代码
String s = new String("student");
格式化字符串
字符串也可以同其他数据类型相连接,如果将字符串同其他数据类型进行连接,会将其他数据类型直接转换为字符串
使用正则表达式
正则表达式通常被用于判断语句中,用来检查某一字符串是否满足某一格式。正则表达式是含有-些具有特殊意义字符的字符串,这些特殊字符称为正则表达式的元字符。例如,“\\d”表示数字0~9中的任何一个,“\d”就是元字符。正则表达式中的元字符及其意义如表中所示。在正则表达式中,可以使用方括号括起若干个字符来表示一个元字符,该元字特可代表方括号中的任何一个字符。例如,reg ="[abc]4”,这样字符串 a4、b4、c4 都是和正则表达式匹配的字符串,方括号元字符还可以为其他格式。如:
1.[456]: 表 4、5、6之外的任何字符。
2.[a-r]: 代表 a~r中的任何一个字母。
3.[a-zA-Z]: 可表示任意一个英文字母。
4.[a-e[g-z]]: 代表a~e或 g~z中的任何一个字母(并运算)。
5.[a-o&&[def]]: 代表字母 d、e、f (交运算)。
6.[a-d&&[bc]]: 代表字母a、d (差运算)。
1.[456]: 表 4、5、6之外的任何字符。
2.[a-r]: 代表 a~r中的任何一个字母。
3.[a-zA-Z]: 可表示任意一个英文字母。
4.[a-e[g-z]]: 代表a~e或 g~z中的任何一个字母(并运算)。
5.[a-o&&[def]]: 代表字母 d、e、f (交运算)。
6.[a-d&&[bc]]: 代表字母a、d (差运算)。
字符chuan生成器
创建成功的字符串对象,其长度是固定的,内容不能被改变和编译。虽然使用“+”可以达到附加新字符或字符串的目的,但“+”会产生一个新的 String 实例,会在内存中创建新的字符串对象。如重复地对字符串进行修改,将极大地增加系统开销。而JDK 新增了可变的字符序列 StringBuilder类大大提高了频繁增加字符串的效率。
11.常用类库
包装类
lnteger类
Integer类在对象中包装了一个基本数据类型int的值,该类的对象包含一个int类型的字段。Integer类提供了以下4个常提供了以下4个常量:MAX_VALUE:1.表示int类型可取的最大值,即2……31-1。2.MIN_VALUE:表示int类型可取的最小值,即-2……31。3.SIZE:用来以二进制补码形式表示int值的位数。3.TYPE:表示基本类型int的Class示例。
Double类
Double类和Float 类是对double、float 基本类型的封装,它们都是Number 类的子类,都是对浮点数进行操作,所以常用方法基本相同。
Double 类在对象中包装一个基本类型为double 的值,每个Double类的对象都包含一个double 类型的字段。此外,该类还提供多个方法,可以将double 类型转换为String 类型,将String 类型转换为double类型,也提供了其他一些处理double类型时有用的常量和方法。
Double 类在对象中包装一个基本类型为double 的值,每个Double类的对象都包含一个double 类型的字段。此外,该类还提供多个方法,可以将double 类型转换为String 类型,将String 类型转换为double类型,也提供了其他一些处理double类型时有用的常量和方法。
Double类主要提供了以下常量:
1.MAX EXPONENT:返回 int 值,表示有限 double 变量可能具有的最大指数。
2.MIN EXPONENT:返回 int 值,表示标准化 double 变量可能具有的最小指数。
3.NEGATIVE INFINITY:返回 double 值,表示保存 double 类型的负无穷大值的常量。
4.POSITIVE INFINITY:返回 double 值,表示保存 double 类型的正无穷大值的常量。
1.MAX EXPONENT:返回 int 值,表示有限 double 变量可能具有的最大指数。
2.MIN EXPONENT:返回 int 值,表示标准化 double 变量可能具有的最小指数。
3.NEGATIVE INFINITY:返回 double 值,表示保存 double 类型的负无穷大值的常量。
4.POSITIVE INFINITY:返回 double 值,表示保存 double 类型的正无穷大值的常量。
Boolean类
Boolean类将基本类型为boolean的值包装在一个对象中。一个Boolean 类型的对象只包含一个类型为boolean的字段。此外,此类还为boolean类型和String 类型的相互转换提供了许多方法,并提供了处理boolean 类型时非常有用的其他一些常量和方法
Boolean提供了以下3个常量:
1. TRUE:对应基值true的Boolean 对象。
2. FALSE:对应基值false的Boolean 对象。
3. TYPE:基本类型boolean 的Class对象。
1. TRUE:对应基值true的Boolean 对象。
2. FALSE:对应基值false的Boolean 对象。
3. TYPE:基本类型boolean 的Class对象。
Character类
Character类在对象中包装一个基本类型为char的值,该类提供了多种方法,以确定字符的类别(小写字母、数字等),并可以很方便地将字符从大写转换成小写,反之亦然。Character 类提供了很多方法来完成对字符的操作。
Character类提供了大量表示特定字符的常量,例如:
1.CONNECTOR_PUNCTUATION:返回 byte 型值,表示 Unicode 规范中的常规类别“ Pc ”。
2. UNASSIGNED:返回byte 型值,表示Unicode规范中的常规类别“Cn”。
3.TITLECASE_LETTER:返回 byte 型值,表示 Unicode 规范中的常规类别“ Lt ”。
说明:Character类提供的常量有很多,详细列表可查看Java API文档。
1.CONNECTOR_PUNCTUATION:返回 byte 型值,表示 Unicode 规范中的常规类别“ Pc ”。
2. UNASSIGNED:返回byte 型值,表示Unicode规范中的常规类别“Cn”。
3.TITLECASE_LETTER:返回 byte 型值,表示 Unicode 规范中的常规类别“ Lt ”。
说明:Character类提供的常量有很多,详细列表可查看Java API文档。
Number类
数字处理
数字格式化
在Java中,没有格式化的数据遵循以下原则:
1.如果数据绝对值大于0.001并且小于10000000,使以常规小数形式表示。
2.如果数据绝对值小于0.001或者大于10000000,是用科学计数法表示。
DecimalFormat中的特殊字符及其所代表的含义如下:
1.如果数据绝对值大于0.001并且小于10000000,使以常规小数形式表示。
2.如果数据绝对值小于0.001或者大于10000000,是用科学计数法表示。
DecimalFormat中的特殊字符及其所代表的含义如下:
Math类
Math类提供了众多数学函数方法,这些方法都被定义为static形式
形式调用如下:Math.数学方法
在Math类中,除了函数方法外还存在一些常用数学常量,如PI、E。
形式调用如下:
Math.PI
Math.E
形式调用如下:Math.数学方法
在Math类中,除了函数方法外还存在一些常用数学常量,如PI、E。
形式调用如下:
Math.PI
Math.E
1.三角函数方法
Math类中包含的三角函数方法如下:
1. _ public static double sin(double a);返回角的三角正弦。
2. public static double cos(double a);返回角的三角余弦。
3. public static double tan(double a);返回角的三角正切。
4. public static double asin(double a):返回一个值的反正弦。
5. public static double acos(double a):返回一个值的反余弦。
6. public static double atan(double a):返回一个值的反正切。
7. public static double toRadians(double angdeg):将角度转换为弧度。
8. public static double toDegrees(double angrad):将弧度转换为角度。2.指数函数方法
Math类中与指数相关的函数方法如下。
1. public static double exp(double a):用于获取e的a次方,即取eᵃ。
2. public static double log(double a):用于取自然对数,即取lna的值。
3. public static double log10(double a);用于取底数为10的a的对数。
4. public static double sqrt(double a):用于取a的平方根,其中a 的值不能为负值。
5. public static double cbrt(double a):用于取a的立方根。
6. public static double pow(double a, double b):用于取a的b次方。
3.取整函数方法
在具体的问题中,取整操作使用也很普遍,所以Java 在Math类中添加了数字取整方法。Math类中主要包括以下几种取整方法:
1. public static double ceil(double a):返回大于等于参数的最小整数。
2. public static double floor(double a):返回小于等于参数的最大整数。
3. public static double rint(double a):返回与参数最接近的整数,如果存在两个同样接近的整数,则结果取偶数。
4. public static int round(float a):将参数加上0.5后返回与参数最近的整数。
5. public static long round(double a):将参数加上0.5 后返回与参数最近的整数,然后强制转换为长整型。
Math类中包含的三角函数方法如下:
1. _ public static double sin(double a);返回角的三角正弦。
2. public static double cos(double a);返回角的三角余弦。
3. public static double tan(double a);返回角的三角正切。
4. public static double asin(double a):返回一个值的反正弦。
5. public static double acos(double a):返回一个值的反余弦。
6. public static double atan(double a):返回一个值的反正切。
7. public static double toRadians(double angdeg):将角度转换为弧度。
8. public static double toDegrees(double angrad):将弧度转换为角度。2.指数函数方法
Math类中与指数相关的函数方法如下。
1. public static double exp(double a):用于获取e的a次方,即取eᵃ。
2. public static double log(double a):用于取自然对数,即取lna的值。
3. public static double log10(double a);用于取底数为10的a的对数。
4. public static double sqrt(double a):用于取a的平方根,其中a 的值不能为负值。
5. public static double cbrt(double a):用于取a的立方根。
6. public static double pow(double a, double b):用于取a的b次方。
3.取整函数方法
在具体的问题中,取整操作使用也很普遍,所以Java 在Math类中添加了数字取整方法。Math类中主要包括以下几种取整方法:
1. public static double ceil(double a):返回大于等于参数的最小整数。
2. public static double floor(double a):返回小于等于参数的最大整数。
3. public static double rint(double a):返回与参数最接近的整数,如果存在两个同样接近的整数,则结果取偶数。
4. public static int round(float a):将参数加上0.5后返回与参数最近的整数。
5. public static long round(double a):将参数加上0.5 后返回与参数最近的整数,然后强制转换为长整型。
取最大值、最小值、绝对值函数方法:
在程序中最常用的方法就是取最大值、最小值、绝对值等,Math类中包括的操作方法如下:public static double max(double a,double b):取a与b之间的最大值。
public static int min(int a,int b):取a与b之间的最小值,参数为整型。
public static long min(long a,long b):取a与b之间的最小值,参数为长整型。public static float min(float a,float b):取a与b之间的最小值,参数为单精度浮点型。public static double min(double a,double b):取a与b之间的最小值,参数为双精度浮点型。public static int abs(int a):返回整型参数的绝对值。
public static long abs(long a):返回长整型参数的绝对值。
public static float abs(float a):返回单精度浮点型参数的绝对值。
public static double abs(double a):返回双精度浮点型参数的绝对值。
在程序中最常用的方法就是取最大值、最小值、绝对值等,Math类中包括的操作方法如下:public static double max(double a,double b):取a与b之间的最大值。
public static int min(int a,int b):取a与b之间的最小值,参数为整型。
public static long min(long a,long b):取a与b之间的最小值,参数为长整型。public static float min(float a,float b):取a与b之间的最小值,参数为单精度浮点型。public static double min(double a,double b):取a与b之间的最小值,参数为双精度浮点型。public static int abs(int a):返回整型参数的绝对值。
public static long abs(long a):返回长整型参数的绝对值。
public static float abs(float a):返回单精度浮点型参数的绝对值。
public static double abs(double a):返回双精度浮点型参数的绝对值。
Random类
Random对象创建一个随机数生成器语法如下:
Random r = new Random;
设置随机数生成器的种子 语法如下:
Random r = new Random(seedValue);
r: Random类对象。
seedValue:随机数生成器的种子。
在Random类中,提供了获取各种数据类型随机数的方法,下国之伙2今孙田计前
public int nextInt):返回一个随机整数。
public int nextInt(int n):返回大于等于0且小于n的随机
public long nextLong():返回一个随机长整型值。
public boolean nextBoolean):返回一个随机布尔型值。
public float nextFloat():返回一个随机单精度浮点型值。
public double nextDouble():返回一个随机双精度浮点型应
public double nextGaussian):返回一个概率密度为高斯少士8台晰明向叶进研
Random r = new Random;
设置随机数生成器的种子 语法如下:
Random r = new Random(seedValue);
r: Random类对象。
seedValue:随机数生成器的种子。
在Random类中,提供了获取各种数据类型随机数的方法,下国之伙2今孙田计前
public int nextInt):返回一个随机整数。
public int nextInt(int n):返回大于等于0且小于n的随机
public long nextLong():返回一个随机长整型值。
public boolean nextBoolean):返回一个随机布尔型值。
public float nextFloat():返回一个随机单精度浮点型值。
public double nextDouble():返回一个随机双精度浮点型应
public double nextGaussian):返回一个概率密度为高斯少士8台晰明向叶进研
BigInteger类
在Biglnteger类中封装了多种操作,除了基本的加、减、乘、除操作,还提供了绝对值、相反数、最大公约数以及判断是否为质数等操作。
使用BigInteger类,可以实例化一个BigInteger对象,并自动调用相应的构造函数。BigInteger类具有很多构造函数,但最直接的一种方式是参数以字符串形式代表要处理的数字。
例如,将2转换为BigInteger类型,可以使用以下语句进行初始化操作:
Biglnteger twolnstance =new Biglnteger("2");
注意:参数2的双引号不能省略,因为参数是以字符串的形式存在的。
一旦创建了对象实例,就可以调用Biglnteger 类中的一些方法进行运算操作,包括基本的数学。算和位运算以及一些取相反数、取绝对值等操作。下面列举了Biglnteger类中常用的几种运算方法: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 BigIntegerl] divideAndRemainder(BigInteger val):用数组返回余数和商,结果数组中第一个值为商,第二个值为余数。
public BigInteger pow(int exponent):进行取参数的exponent次方操作。
public BigInteger negate():取相反数。
public Biglnteger shiftLeft(int n):将数字左移n位,如果n为负数,做右移操作。public BigInteger shiftRight(int n):将数字右移n位,如果n为负数,做左移操作。public BigInteger and(BigInteger val):做与操作。
public BigInteger or(BigInteger val):做或操作。
public int compareTo(BigInteger val):做数字比较操作。
public boolean equals(Object x):当参数x是BigInteger类型的数字并且数值与对象实例的数值相等时,返回true。
public BigInteger min(BigInteger val):返回较小的数值。
public BigInteger max(Biglnteger val):返回较大的数值。
使用BigInteger类,可以实例化一个BigInteger对象,并自动调用相应的构造函数。BigInteger类具有很多构造函数,但最直接的一种方式是参数以字符串形式代表要处理的数字。
例如,将2转换为BigInteger类型,可以使用以下语句进行初始化操作:
Biglnteger twolnstance =new Biglnteger("2");
注意:参数2的双引号不能省略,因为参数是以字符串的形式存在的。
一旦创建了对象实例,就可以调用Biglnteger 类中的一些方法进行运算操作,包括基本的数学。算和位运算以及一些取相反数、取绝对值等操作。下面列举了Biglnteger类中常用的几种运算方法: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 BigIntegerl] divideAndRemainder(BigInteger val):用数组返回余数和商,结果数组中第一个值为商,第二个值为余数。
public BigInteger pow(int exponent):进行取参数的exponent次方操作。
public BigInteger negate():取相反数。
public Biglnteger shiftLeft(int n):将数字左移n位,如果n为负数,做右移操作。public BigInteger shiftRight(int n):将数字右移n位,如果n为负数,做左移操作。public BigInteger and(BigInteger val):做与操作。
public BigInteger or(BigInteger val):做或操作。
public int compareTo(BigInteger val):做数字比较操作。
public boolean equals(Object x):当参数x是BigInteger类型的数字并且数值与对象实例的数值相等时,返回true。
public BigInteger min(BigInteger val):返回较小的数值。
public BigInteger max(Biglnteger val):返回较大的数值。
BigDecimal类
在BigDecimal类,常用的两个构造方法如下:
BigDecimal类实现的加减乘除的方法如下:
BigDecimal类中divide()方法有多种设置,用于但会商小数点后的末尾的处理,名称和含义如下:
System类
System类是JDK中提供的系统类,该类是用final修饰的,所以不允许被继承。Svstem类提供
服多系线层面的操作方法,并且这些方法全部都是静态的。System类提供的较常用方法如下:
服多系线层面的操作方法,并且这些方法全部都是静态的。System类提供的较常用方法如下:
11.3.1 控制台输出字符
1.不会自动换行的print()方法
printO方法的语法如下:
System.out.print("Hello!");
此方法输出“Hello”文字,输出完毕后,光标会停留在“Hello”文字末尾,不会自动换行。
2. 可以自动换行的 println()方法
printlnO方法在print后面加上了“1n”后缀(就是line的简写),语法如下:
System.out.println(”书籍是人类进步的阶梯!”);
此方法输出“书籍是人类进步的阶梯!”后会自动换行。光标停留在下一行的开头。
System.out.print("\n"); //利用换行符\n 实现奂行
System.out.println(); //空参数即可实现换行
误区警示:
使用这两个输出方法时还要注意以下两点:
(1)“System.out.println("n");”会打印两个空行。
(2)“System.out.print);”无参数会报错
1.不会自动换行的print()方法
printO方法的语法如下:
System.out.print("Hello!");
此方法输出“Hello”文字,输出完毕后,光标会停留在“Hello”文字末尾,不会自动换行。
2. 可以自动换行的 println()方法
printlnO方法在print后面加上了“1n”后缀(就是line的简写),语法如下:
System.out.println(”书籍是人类进步的阶梯!”);
此方法输出“书籍是人类进步的阶梯!”后会自动换行。光标停留在下一行的开头。
System.out.print("\n"); //利用换行符\n 实现奂行
System.out.println(); //空参数即可实现换行
误区警示:
使用这两个输出方法时还要注意以下两点:
(1)“System.out.println("n");”会打印两个空行。
(2)“System.out.print);”无参数会报错
计时
Scanner类
Scanner类首先要引入该类,语法如下:
import java.util.Scanner; //引入Scanner类
下表所示的常用的方法,通过这些方法可以获取控制台中输入的不同类型的值
import java.util.Scanner; //引入Scanner类
下表所示的常用的方法,通过这些方法可以获取控制台中输入的不同类型的值
使用Scanner类扫描控制台的代码如下:
Scanner sc = new Scanner(System.in);
Scanner sc = new Scanner(System.in);
日期时间格式化
Date类
使用Scanner类扫描控制台的代码如下:
Scanner sc = new Scanner(System.in);
Scanner sc = new Scanner(System.in);
例如,使用Date类的第2种构造方法创建一个Date类的对象,代码如下:
long timeMillis = System.currentTimeMillis(); //当前系统时间所经历的毫秒数
Date date =new Date(timeMillis);
Date类的常用方法及其说明如下:
long timeMillis = System.currentTimeMillis(); //当前系统时间所经历的毫秒数
Date date =new Date(timeMillis);
Date类的常用方法及其说明如下:
日期时间类
DateFormat 类是日期时间格式化子类的抽象类,可以按照指定的格式对日期或时间进行格式化。DateFormat类提供了很多类方法,以获得基于默认或给定语言环境和多种格式化风格的默认日期时间Formatter,格式化风格主要包括SHORT、MEDIUM、LONG和FULL4种:
SHORT:完全为数字,如12.13.52或3:30pm。
MEDIUM:较长,如Jan 12,1952。
LONG:更长,如January 12,1952或3:30:32pm。
FULL:完全指定,如Tuesday、April 12、1952AD或3:30:42pm PST。
另外,使用DateFormat类还可以自定义日期时间的格式。要格式化一个当前语言环境下的日期,首先需要创建DateFormat类的一个对象,由于它是抽象类,因此可以使用其静态方法 getDateInstance()进行创建,语法如下:
DateFormat df =DateFormat.getDatelnstance();
DateFormat 类的常用方法及其说明如下:
SHORT:完全为数字,如12.13.52或3:30pm。
MEDIUM:较长,如Jan 12,1952。
LONG:更长,如January 12,1952或3:30:32pm。
FULL:完全指定,如Tuesday、April 12、1952AD或3:30:42pm PST。
另外,使用DateFormat类还可以自定义日期时间的格式。要格式化一个当前语言环境下的日期,首先需要创建DateFormat类的一个对象,由于它是抽象类,因此可以使用其静态方法 getDateInstance()进行创建,语法如下:
DateFormat df =DateFormat.getDatelnstance();
DateFormat 类的常用方法及其说明如下:
子主题
Calendar类
Calendar 提供了一个类方法 getnstance(),以获得此类型的一个通用的对象。Calendar类的grtnstance()方法返回一个Calendar对象,其日历字段已由当前日期和时间初始化,其使用方法如下:
Calendar rightNow =Calendar.getlnstance();
说明:由于Calendar类是一个抽象类,不能用new创建实例对象,因此除了使用getInstance0方法创建其对象,如果需要创建其对象,必须使用其子类,如GregorianCalendar类。
Calendar rightNow =Calendar.getlnstance();
说明:由于Calendar类是一个抽象类,不能用new创建实例对象,因此除了使用getInstance0方法创建其对象,如果需要创建其对象,必须使用其子类,如GregorianCalendar类。
Runtrime类
执行本地命令
本地命令指的是操作系统的命令。例如,在Linux系统下就表示shell命令,在Windows系统下就表示cmd命令。
Rutime类提供exec()方法让Java代码可以执行系统的命令,exec)方法有很多重载的形式,例如:
Process exec(String command)
Process exec(String, cmdarray)
command:要执行的系统命令,字符串类型。
cmdarray:要执行的命令和相应的命令参数,字符串数组类型。
其实这两个重载方式很类似,如执行“javac hellojava”这行命令,使用第一种重载方式的代码如下:
Runtime.getRuntime().exec("javac hello.java");
使用第二种重载方式的代码如下:
String command,=("javac","hello.java"];
Runtime.getRuntime().exec(command);
exec)方法会返回一个 Process对象。Process类是Java中进程类,该类是抽象类,不能使用new关键字创建实例。Process类的常用方法如表11.22所示,开发可以使用getlnputStream)方法获取进程返回的信息。
Rutime类提供exec()方法让Java代码可以执行系统的命令,exec)方法有很多重载的形式,例如:
Process exec(String command)
Process exec(String, cmdarray)
command:要执行的系统命令,字符串类型。
cmdarray:要执行的命令和相应的命令参数,字符串数组类型。
其实这两个重载方式很类似,如执行“javac hellojava”这行命令,使用第一种重载方式的代码如下:
Runtime.getRuntime().exec("javac hello.java");
使用第二种重载方式的代码如下:
String command,=("javac","hello.java"];
Runtime.getRuntime().exec(command);
exec)方法会返回一个 Process对象。Process类是Java中进程类,该类是抽象类,不能使用new关键字创建实例。Process类的常用方法如表11.22所示,开发可以使用getlnputStream)方法获取进程返回的信息。
查看内存
Runtime类可以通过freeMemory()方法查看当前java虚拟机可用内存的剩余量。如果程序能够实时监控内存剩余量,就可以尽量控制程序对内存的占用,从而避免出现“内存溢出”的情况。同样,也可以用来对测试程序性能,检验程序算法是否导致内存紧张。
Java是一种编程语言,可以编写桌面应用程序、Web应用程序等,它收了C++语言的各种优点,摒弃了C++里难以理解的概念,有具有功能强大和简单易用等特点。

收藏
0 条评论
下一页