java从入门到精通
2023-06-10 02:34:03 5 举报
AI智能生成
java从入门到精通
作者其他创作
大纲/内容
初识java
java简介
什么是java语言
java的应用领域
java的版本
怎么学好java
javaAPI文档
java语言的特性
简单
面向对象
分布性
分布性
可移植性
解释型
安全性
健壮性
多线程
高性能
动态
搭建java环境
JDK下载
在win10系统下载搭建JDK环境
解压缩
配置环境变量
熟悉Eclipse开发工具
熟悉Eclipse
Eclipse简介
Eclipse由IBM公司投资4000万美元开发而成,它基于Java语言编写,是目前最流行的Java集成开发工具之一。Eclipse所有代码都是开源的,可扩展,其后续开发由Eclipse联盟负责。Eclipse为编程人员提供了一流的Java程序开发环境,它的平台体系结构是在插件概念的基础上构建的,插件是Eclipse平台最具特色的特征之一,也是其区别于其他开发工具的特征之一
下载Eclipse
(1)打开浏览器,在地址栏中输入https://www.eclipse.org/downloads/后,按Enter键访问Eclipse的官网首页,然后单击如图2.1所示的Download Packages超链接。
(2)进入Eclipse IDE Downloads页面,在Eclipse IDE for Java Developers下载列表中,单击右侧的Windows 64-bit(或32-bit)超链接
(3)Eclipse服务器会根据客户端所在的地理位置,分配合理的下载镜像站点,如图2.3所示。建议使用默认镜像地址,这里直接单击页面中的Download按钮即可。
(4)单击Download按钮之后,若5秒后仍未开始下载任务,可单击如图2.4所示中的click here超链接,重新开启下载任务
安装Eclipse的中文语言包
从网站中下载的Eclipse安装文件是一个压缩包,将其解压缩到指定的文件夹,然后运行文件夹中的Eclipse.exe文件,即可启动Eclipse开发工具。但是在启动Eclipse之前需要安装中文语言包,以降低读者的学习难度。
(1)在浏览器的地址栏中输入https://www.eclipse.org/babel/downloads.php,在下载页面的Babel Language Packs Zips选项下选择对应Eclipse版本的超链接下载语言包。例如,本书使用的Eclipse版本为2020-12,所以单击该2020-12超链接,如图2.5所示
(2)在弹出的下载列表页面中,在Language: Chinese(Simplified)列表下选择并单击如图2.6所示的BabelLanguagePack-eclipse-zh_X.X.X超链接。X.X.X为汉化包的版本号,因为官方会频繁更新汉化包,但文件的前缀不会改变,所以读者只要下载前缀为BabelLanguagePack-eclipse-zh_的zip文件即可
(3)单击超链接后,Eclipse服务器会根据客户端所在的地理位置,分配合理的下载镜像站点,如图2.7所示。读者只需单击Download按钮,即可下载汉化包。
(4)将下载完成的汉化包解压缩,解压后生成的eclipse文件夹下有两个子文件夹:features文件夹和plugins文件夹。将这两个子文件夹覆盖到Eclipse程序的根目录下,如图2.8所示。重启Eclipse之后就可以看到汉化效果。
Eclipse的配置与启动
配置好Eclipse的汉化语言包后,就可以启动Eclipse了。在Eclipse的安装文件夹中运行eclipse.exe文件,即开始启动Eclipse,将弹出“Eclipse启动程序”对话框,该对话框用于设置Eclipse的工作空间(用于保存Eclipse建立的程序项目和相关设置)。本书的开发环境统一设置工作空间为Eclipse安装位置的workspace文件夹,在“Eclipse启动程序”对话框的“工作空间”文本框中输入“.\eclipse-workspace”,单击“启动”按钮,即可启动Eclipse,如图2.9所示。
Eclipse首次启动时,会显示Eclipse欢迎界面,如图2.10所示。单击标题栏上的×按钮,即可关闭该界面。
Eclipse工作台
在Eclipse的“欢迎”界面中,单击“工作台”(Workbench)按钮或关闭欢迎界面,将显示Eclipse的工作台,它是程序开发人员开发程序的主要场所。Eclipse还可以将各种插件无缝地集成到工作台中,也可以在工作台中开发各种插件。Eclipse工作台主要包括标题栏、菜单栏、工具栏、编辑器、透视图和相关的视图等,如图2.11所示。在接下来的章节中将介绍Eclipse的透视图、视图、菜单栏与工具栏,并介绍常用视图。
透视图与视图
透视图和视图是Eclipse中的概念,本节将分别介绍透视图、视图及其在Eclipse中的作用
1.透视图透视图是Eclipse工作台提供的附加组织层,它实现多个视图的布局和可用操作的集合,并为这个集合定义一个名称,起到一个组织的作用。例如,Eclipse提供的Java透视图组织了与Java程序设计有关的视图和操作的集合,而“调试”透视图负责组织与程序调试有关的视图和操作集。在Eclipse的Java开发环境中提供了几种常用的透视图,如Java透视图、“资源”透视图、“调试”透视图、“小组同步”透视图等。不同的透视图之间可以进行切换,但是同一时刻只能使用一个透视图
2.视图视图多用于浏览信息的层次结构和显示活动编辑器的属性。例如,“控制台”视图用于显示程序运行时的输出信息和异常错误,而“包资源管理器”视图可以浏览项目的文件组织结构。视图可以单独出现,也可以与其他视图以选项卡样式叠加在一起。视图有自己独立的菜单和工具栏,并且可以通过拖动改变布局位置。
菜单栏
Eclipse的菜单栏包含了Eclipse的基本命令,在使用不同的编辑器时,还会动态地添加有关该编辑器的菜单。基本的菜单栏中除了常用的“文件”“编辑”“窗口”“帮助”等菜单,还提供了一些功能菜单,如“源代码”和“重构”等,如图2.12所示。
工具栏
和大多数软件的布局格式相同,Eclipse的工具栏位于菜单栏的下方。工具栏中的按钮都是菜单命令对应的快捷图标,在打开不同的编辑器时,还会动态地添加与编辑器相关的新工具栏按钮。另外,除了菜单栏下面的主工具栏,Eclipse中还有视图工具栏、透视图工具栏和快速视图工具栏等多种工具栏
1.主工具栏主工具栏就是位于Eclipse菜单栏下方的工具栏,其内容将根据不同的透视图和不同类型的编辑器显示相关工具按钮
2.视图工具栏Eclipse界面中包含多种视图,这些视图有不同的用途(有关视图的概念已在2.1.6节中讲述),可以根据视图的功能需求在视图的标题栏位置添加相应的视图工具栏。例如,“控制台”视图用于输出程序运行中的输出结果和运行时异常信息,其工具栏
3.透视图工具栏透视图工具栏主要包括切换已经打开的不同透视图的缩略按钮以及打开其他视图的按钮。在相应的工具按钮上右击会弹出透视图的管理菜单,实现透视图的定制、关闭、复位、布局位置、是否显示文本等操作
包资源管理器视图
包资源管理器”视图用于浏览项目结构中的Java元素,包括包、类、类库的引用等,但最主要的用途还是操作项目中的源代码文件。“包资源管理器”视图的界面
控制台视图
“控制台”视图用于显示程序运行的输出结果和异常信息(Runtime Exception)。在学习Swing程序设计之前,必须使用控制台实现与程序的交互。例如,为方便调试某个方法,该视图在方法执行前后会分别输出“方法开始”和“方法结束”信息。“控制台”视图的界面
使用Eclipse
创建java项目
在Eclipse中编写程序,必须先创建项目。Eclipse中有多种项目,其中Java项目用于管理和编写Java程序
创建java文件
创建Java类文件时,会自动打开Java编辑器。创建Java类文件可以通过“新建Java类”向导来完成。在Eclipse菜单栏中选择“文件”/“新建”/“类”命令,将打开“新建Java类”向导对话框
使用编辑器编写程序代码
在使用向导创建Java类文件之后,会自动打开Java编辑器编辑新创建的Java类文件。除此之外,打开Java编辑器最常用的方法是在“包资源管理器”视图中双击Java源文件或在Java源文件处右击并在弹出的快捷菜单中选择“打开方式”/“Java编辑器”命令
运行java程序
HelloJava类包含main()方法,它是一个可以运行的主类。例如,在Eclipse中运行HelloJava程序,可以在“包资源管理器”视图的HelloJava文件处右击,在弹出的快捷菜单中选择“运行方式”/“[插图]Java应用程序”命令运行该程序
程序调试
java语言基础
java主要结构
Java语言是面向对象语言,Java程序的基本组成单位是类,类体又包括属性与方法两部分,每一个应用程序都必须包含一个main( )方法,含有main( )方法的类称为主类。
基本数据类型
整数类型
byte、short、int、long四种数据类型
浮点类型
分为单精度浮点类型(float)和双精度浮点类型(double)
字符类型
char型
布尔类型
布尔类型又称为逻辑类型,简称布尔型,通过关键字boolean来定义布尔类型变量。布尔类型只有true和false两个值,分别代表布尔逻辑中的“ 真 ”和“ 假 ”。布尔值不能与整数类型进行交换。布尔类型通常被用在流程控制中,作为判断条件。定义布尔类型变量
变量与常量
标识符和关键字
标识符是用来标识类名、变量名、方法名、数组名、文件名的有效字符序列。
Java语言规定标识符由任意顺序的字母、下画线(_)、美元符号($)和数字组成,并且第一字符不能是数字,不能是Java中的关键字(保留字)。
关键字又称保留字,是Java语言中已经被赋予特定意义的一些单词,不可以把这些单词作为标识符来使用
Java语言规定标识符由任意顺序的字母、下画线(_)、美元符号($)和数字组成,并且第一字符不能是数字,不能是Java中的关键字(保留字)。
关键字又称保留字,是Java语言中已经被赋予特定意义的一些单词,不可以把这些单词作为标识符来使用
声明变量
声明变量是告诉编译器这个变量的数据类型,在程序运行过程中,空间内的只是变化的,这个内存空间就称为变量,在声明变量时可以赋值,也可以直接赋给初值
声明常量
在程序运行过程中一直不会改变的量称为常量,也称为“final变量”。常量在整个程序中只能被赋值一次。
在Java语言中声明一个常量,除了要指定数据类型,还需要通过final关键字进行限定。常量名通常是用大写字母,但这并不是必须的。
当变量被final关键字修饰时,该变量就变成了常量,必须在定义时就设定它的初值,否则将会产生编译错误
在Java语言中声明一个常量,除了要指定数据类型,还需要通过final关键字进行限定。常量名通常是用大写字母,但这并不是必须的。
当变量被final关键字修饰时,该变量就变成了常量,必须在定义时就设定它的初值,否则将会产生编译错误
变量的有效范围
变量的有效范围是指程序代码能够访问该变量的区域,若超出该区域,则在编译时会出现错误。在程序中,一般会根据变量的“有效范围”将变量分为“成员变量”和“局部变量”。
在类体中所声明的变量被称为成员变量,成员变量在整个类中都有效。类的成员变量又可分为两种,即静态变量和实例变量。对于静态变量,除了能在声明它的类内存取,还能直接以“类名.静态变量”的方式在其他类内食用。
在类的方法体中声明的变量(方法内部定义,"{"与"}"之间的代码中声明的变量)称为局部变量。局部变量只在当前代码块中有效,也就是只能在"{"与"}"之内使用。
局部变量可与成员变量的名字相同,此时成员变量将被隐藏,即这个成员变量在此方法中暂时失效。局部变量采取就近原则
在类体中所声明的变量被称为成员变量,成员变量在整个类中都有效。类的成员变量又可分为两种,即静态变量和实例变量。对于静态变量,除了能在声明它的类内存取,还能直接以“类名.静态变量”的方式在其他类内食用。
在类的方法体中声明的变量(方法内部定义,"{"与"}"之间的代码中声明的变量)称为局部变量。局部变量只在当前代码块中有效,也就是只能在"{"与"}"之内使用。
局部变量可与成员变量的名字相同,此时成员变量将被隐藏,即这个成员变量在此方法中暂时失效。局部变量采取就近原则
运算符
赋值运算符
赋值运算符以符号”=“表示,其功能是将右方操作数所含的值赋给左方的操作数
算数运算符
Java中的算术运算符主要有+(加)、-(减)、*(乘)、/(除)、%(求余)
自增和自减运算符
自增、自减运算符是单目运算符,符号在前,先运算后使用;符号在后,先使用后运算。
++a(--a) //先使a的值加(减)1,再使用变量a
a++(a--) //先使用变量a,再使a的值加(减)1
++a(--a) //先使a的值加(减)1,再使用变量a
a++(a--) //先使用变量a,再使a的值加(减)1
比较运算符
比较运算符属于二元运算符,用于程序中的变量之间、变量和自变量之间以及其他类型的信息之间的比较
逻辑运算符
返回类型为布尔型的表达式,如比较运算,可以被组合在一起构成一个更复杂的表达式。这是通过逻辑运算符来实现的。逻辑运算符包括&(&&)(逻辑与)、||(逻辑或)、!(逻辑非)。逻辑与算符的操作元必须是boolean型数据。
&&、&:两者为真,结果才为真
||:只要有一者为真,结果才为真
!:非真即假,非假即真
&&、&:两者为真,结果才为真
||:只要有一者为真,结果才为真
!:非真即假,非假即真
位运算符
位运算符除"按位与"和"按位或"运算符外,其他只能用于处理整数的操作数,包括byte、short、chair、int和long等数据类型。位运算是完全针对位方面的操作
子主题
”按位与“运算:两者都为1,结果为1
”按位或“运算:只要有一者为1,结果为1
”按位取反“运算:0变1,1变0
”按位异或“运算:两者相同为0,不同为1
移位操作
1、<<:左移。(整体左移,空位补0,溢出去掉)
2、>>:右移。(整体右移,整数补0,负数补1,溢出去掉)
3、>>>:无符号右移。(整体右移,空位补0,溢出去掉)
2、>>:右移。(整体右移,整数补0,负数补1,溢出去掉)
3、>>>:无符号右移。(整体右移,空位补0,溢出去掉)
三元运算符
运算符优先级
数据类型转换
隐式类型转换
显式类型转换
类型转换是将一个值从一种类型更改为另一种类型的过程。数据类型转换有自动类型转换和显式类型转换(强制类型转换)。
自动类型转换一定不丢失数据;强制类型转换有可能会丢失数据。
从低精度数据类型向高精度数据类型转换,一定不会丢失数据;从高精度数据类型向低精度数据类型转换时,有可能会丢失数据。
按精度从低到高排列顺序:byte<short<int<long<float<double
自动类型转换一定不丢失数据;强制类型转换有可能会丢失数据。
从低精度数据类型向高精度数据类型转换,一定不会丢失数据;从高精度数据类型向低精度数据类型转换时,有可能会丢失数据。
按精度从低到高排列顺序:byte<short<int<long<float<double
代码注释与编码规范
代码注释
编码规范
实践与练习
流程控制
复合语句
条件语句
if条件语句
if 语句的结果为真和假;
如果结果为真,则接着执行之后的语句;如果为假则不执行if之后的语句;
if语句可以分为简单的if条件语句,if....else语句和if....else if的语句;
如果结果为真,则接着执行之后的语句;如果为假则不执行if之后的语句;
if语句可以分为简单的if条件语句,if....else语句和if....else if的语句;
switch多分支语句
一个常见的问题就是检测一个变量是否符号某个条件,如果不符合,再用另一个值来检测,以此类推
循环语句
while循环语句
while也叫条件判断语句哦,它的循环方式为利用一个条件来控制是否要继续反复执行这个语句
语法:while(条件表达式){、语句}
语法:while(条件表达式){、语句}
do...while循环语句
do...while循环语句与while循环语句相似,它们之间的区别就是while语句先判断条件是否成立再执行循环体,而do...while语句则先执行一次循环后再判断条件是否成立
语法:
do{
语句
}while(条件表达式)
语法:
do{
语句
}while(条件表达式)
for循环语句
是Java程序设计中最有用的循环语句之一。一个for循环可以用来重复执行某条语句,直到某个条件得到满足。
语法:
for(表达式1;表达式2;表达式3){
语句
}
语法:
for(表达式1;表达式2;表达式3){
语句
}
循环控制
break语句
continue语句
continue 跳过本次循环
continue不是立即跳出循环,而是跳过本次循环,回到循环的条件测试部分,重新开始。
for循环遇到continue后先执行增量部分,while和do...while语句遇到continue则直接回到条件测试部分。
continue 跳过本次循环
continue不是立即跳出循环,而是跳过本次循环,回到循环的条件测试部分,重新开始。
for循环遇到continue后先执行增量部分,while和do...while语句遇到continue则直接回到条件测试部分。
continue 跳过本次循环
实践与练习
数组
数组概述
数组是具有相同数据类型的一组数据的集合。数组中的每个元素具有相同的数据类型。在Java中同样将数组看作一个对象,虽然基本数据类型不是对象,但由基本数据类型组成的数组却是对象。在程序设计中引入数组可以更有效地管理和处理数据
一维数组
创建一维数组
数组作为对象允许使用new关键字进行内存分配。在使用数组之前,必须首先定义数组变量所属的类型
1、先声明,再用new关键字进行内存分配
声明一维数组两种方式:
数组元素类型 数组名字[];
数组元素类型[] 数组名字;
声明一维数组两种方式:
数组元素类型 数组名字[];
数组元素类型[] 数组名字;
2、为数组分配内存同时设置初始值
数组元素的类型 数组名=new数组元素类型[数组元素的个数]{值1,值2...};
数组元素的类型 数组名=new数组元素类型[数组元素的个数]{值1,值2...};
初始化一维数组
使用一维数组
二维数组
创建二维数组
1、先声明,再用new关键字进行内存分配
数组元素的类型 数组名字[行数][列数];
数组元素的类型[行数][列数 数组名字;
数组元素的类型 数组名字[行数][列数];
数组元素的类型[行数][列数 数组名字;
2、为数组分配内存同时设置初始值
数组名=new 数组元素的类型[][]{{值1,值2...},{值1,值2...}}
数组名=new 数组元素的类型[][]{{值1,值2...},{值1,值2...}}
初始化二维数组
使用二维数组
数组的基本操作
遍历数组
遍历数组就是获取数组中的每个元素。通常遍历数组都是使用for循环来实现。
填充替换数组
数组中的元素定义完成后。可通过Arrays类的静态方法fill()来对数组中的元素进行替换。该方法通过各种重载形式可完成对任意类型的数组元素的替换。
对数组进行排序
通过Arrays类的静态方法sort()可以实现对数的排序。sort()方法提供了多种重载形式,可以对任意类型的数组进行升序排序。
使用sort()方法将数组排序后输出
使用sort()方法将数组排序后输出
复制数组
Arrays类的copyOf()方法与copyOfRange()方法可以实现对数组的复制。copyOf()方法是复制数组至指定长度,copyOfRange()方法则将指定数组的指定长度复制到一个新数组中。
复制数组元素:空位补0,溢出去掉
复制数组部分元素:前在后不在
复制shu
复制数组元素:空位补0,溢出去掉
复制数组部分元素:前在后不在
复制shu
1、copyOf()方法
复制数组,实现将此数组复制得到一个长度为5的新数组,并将新数组输出
复制数组,实现将此数组复制得到一个长度为5的新数组,并将新数组输出
2、copyOfRange()方法
按照索引复制数组,并将数组中索引位置 是0~3的元素复制到新数组中,最后将新数组输出
按照索引复制数组,并将数组中索引位置 是0~3的元素复制到新数组中,最后将新数组输出
查询数组
Arrays类的binarySearch()方法,可使用二分法搜索指定数组,以获得指定对象。该方法返回要搜索要搜索的索引值。binarySearch()方法提供了多种重载形式,用于满足各种类型数组的查找需要。
查询数组元素:先排序在查询,前含后不含
查询数组元素:先排序在查询,前含后不含
数组排序算法
冒泡排序
冒泡排序的基本思想是对比相邻的元素值,如果满足条件就交换元素值,把较小的元素移动到数组前面,把较大的元素移动到数组后面(也就是交换两个元素的位置),这样较小的元素就像气泡一样从底部上升到顶部
直接选择排序
直接选择排序的基本思想是将指定排序位置元素与其他数组元素分别对比,如果满足条件就交换元素值。
注意这里与冒泡排序的区别,不是交换相邻元素,而是把满足条件的元素与指定的排序位置元素交换(如从最后一个元素开始排序),这样排序好的位置逐渐扩大,直至整个数组都变成已排序好的格式
注意这里与冒泡排序的区别,不是交换相邻元素,而是把满足条件的元素与指定的排序位置元素交换(如从最后一个元素开始排序),这样排序好的位置逐渐扩大,直至整个数组都变成已排序好的格式
反转排序
反转排序就是以相反的顺序把原有的数组的·内容重新排序
基本思想
算法示例
算法实现
实践与练习
类和对象
面向对象概述
对象
对象是事物存在的实体,世间万物皆对象。对象分为两个部分,即静态部分与动态对象部分
静态部分:不能动的部分,称为“属性"
动态部分:对象可执行的动作,称为“行为”
静态部分:不能动的部分,称为“属性"
动态部分:对象可执行的动作,称为“行为”
类
类是统一事物的统称,如果将现实世界中的一事物抽象成对象,类就是这类对象的统称。 类是对象的设计图;类是封装对象的属性和行为的载体,具有相同属性和行为的一类实体被称为类。类对象的行为是以方法的形式定义的,对象的属性是以成员变量的形式定义的,所以类包括对象的属性和方法
封装
子主题
继承
类与类之间同样具有关系,这种关系被称为关联。两个类之间的关系有很多种,继承是关联中的一种。设计软件时,使用继承思想可以缩短软件开发的周期,复用那些已经定义好的类可以提高系统性能,减少系统在使用过程中出现错误的概率
多态
将父类对象应用与子类的特征就是多态
类
成员变量
在Java中,对象的属性也称为成员变量,成员变量可以是任意类型,整个类中均为成员变量作用范围
成员方法
在Java语言中,使用成员方法对应于类对象的行为
权限修饰语
Java中的权限修饰符主要包括public、protect、default、private,这些修饰符控制着对类和类的成员变量以及成员方法的访问
局部变量
如果在成员方法内定义一个变量,那么这个变量被称为局部变量。在实际上,方法中的形参也可以作为一个局部变量。
局部变量是在方法被执行时创建,在方法执行结束时被销毁。局部变量在使用时必须进行赋值操作或被初始化,否者会出现编译错误 。
在part类中创建静态的exchange()方法,该方法可以将数组参数arr的前两个元素值互换,通过在方法中定义一个保存临时数据的局部变量tmp,利用tmp交换两个元素的值
局部变量是在方法被执行时创建,在方法执行结束时被销毁。局部变量在使用时必须进行赋值操作或被初始化,否者会出现编译错误 。
在part类中创建静态的exchange()方法,该方法可以将数组参数arr的前两个元素值互换,通过在方法中定义一个保存临时数据的局部变量tmp,利用tmp交换两个元素的值
局部变量的有效范围
可以将局部变量的有效范围成为变量的作用域,局部变量的有效范围从该变量的声明开始到该变量的结束为止
this关键字
this关键字用来表示本类当前的对象,当前对象不是某个new出来的实体对象,而是当前正在编辑的类。this关键字只能在本类中使用
类的构造方法
在类中,出成员方法外,还存在一种特殊类型的方法,那就是构造方法。构造方法是一个与类同名的方法,对象的创建就是通过构造方法完成的。
构造方法的特点:
构造方法没有返回值。
构造方法的名称要与本类的名称相同。
构造方法的定义语法格式:(public :构造方法修饰符;Name:构造方法的名称)
public Name(){
..... //构造方法体
}
在构造方法中可以为成员变量赋值,这样当实例化一个本类对象时,相应的成员变量也将被初始化。如果类中没有明确定义构造方法,编译器会自动创建一个不带参数的默认构造方法
构造方法的特点:
构造方法没有返回值。
构造方法的名称要与本类的名称相同。
构造方法的定义语法格式:(public :构造方法修饰符;Name:构造方法的名称)
public Name(){
..... //构造方法体
}
在构造方法中可以为成员变量赋值,这样当实例化一个本类对象时,相应的成员变量也将被初始化。如果类中没有明确定义构造方法,编译器会自动创建一个不带参数的默认构造方法
静态变量和静态方法
由static修饰的变量和方法被称为静态变量和动态方法。被声明为static的变量和方法被称为静态成员。静态成员属于类所有,区别于个别对象,可以在本类或其他类使用类名和”.“运算符调用静态成员
创建并调用静态属性和静态变量,创建homework类,在类中使用static关键字定义一个属性和一个方法,并在主方法中条用
静态变量与静态方法的作用通常是为了提供共享数据或方法,如数学计算公式等。尽管使用这种方式调用静态成员比较方便,但静态成员同样遵循修饰符的约束
在静态方法中不可使用this关键字。
在静态方法中不可以直接调用非静态方法。
局部变量不可以使用static关键字声明
主方法必须用static声明。
只有内部类可以使用static关键字声明。
类的主方法
主方法是类的入口点,它定义了程序从何处开始。主方法提供对程序流向的控制,Java编译器通过主方法来执行程序
主方法是静态的,所以如要直接在主方法中条用其他方法,则该方法必须也是静态的。
主方法没有返回值。
主方法的形参为数组。其中,args[0]~[n]分别代表程序的第一个参数到n个参数,可以使用args.length获取参数的个数。
读取主方法的参数组,在项目创建part类,在主方法中编写一下代码,并在Eclipse中设置程序参数
主方法没有返回值。
主方法的形参为数组。其中,args[0]~[n]分别代表程序的第一个参数到n个参数,可以使用args.length获取参数的个数。
读取主方法的参数组,在项目创建part类,在主方法中编写一下代码,并在Eclipse中设置程序参数
对象
对象的创建
在6.1节中曾讲过对象 ,对象可以认为是在一类事物中抽象出某一个特例可以通过这个特例来处理这类事物的出现的问题在java语言中通过new操作符来创建对象。前文在讲解构造方法时介绍过 每实例化一个对象就会自动调用一次构造方法,实质上这个过程就是创建对象的过程中准确的说可以在java语言中使用new操作符调用构造对象
询问对象的属性和行为
对象的引用
在java语言中,尽管一切都可以看作对象 但真正的操作标识符实质上是一个引用
通常一个引用不一定需要有一个对象的相关联应用于对象相关联
对象的销毁
每个对象都有生命周期 ,当对象的生命周期借宿时 分配给该对象的内存地址需要被收回 在其它语言中需要用户手动回收废弃的对象 java拥有一套完整的垃圾回收机制,用户不必担心废弃的对象占用内存,垃圾回收器会自动回收无用却占用内存的资源
对象引用超过起作用范围 这个对象将被视为垃圾
对象引用超过起作用范围 这个对象将被视为垃圾
对象超过作用范围将消亡将对象赋值为null
实践与练习
继承,多态,抽象类和接口
类的继承
继承在面对向对象开发思想中是一个非常重要的概念,它使整个程序架构具有一定的弹性在程序中复用一些已经定义完善的类,不仅可以减少软件开发周期,也可以提高软件的可维护性和可扩展性本章节将详细
java语言中 每个类只可以继承一个父类
extends 继承语句
父类没有任何变化
java语言中 每个类只可以继承一个父类
extends 继承语句
父类没有任何变化
object类
所有没有指定父类就是Object
只有子类可以重写父类方法
重写:返回参数相同 方法名相同 传入方法相同 只是方法体不同
Object类中包括clone(),finalize(),equals(),toString()等方法 其中常用的两个方法是equals()和toString()方法由于所有的类都是Object类的子类 所以任何类都可以重写Object类的的方法
只有子类可以重写父类方法
重写:返回参数相同 方法名相同 传入方法相同 只是方法体不同
Object类中包括clone(),finalize(),equals(),toString()等方法 其中常用的两个方法是equals()和toString()方法由于所有的类都是Object类的子类 所以任何类都可以重写Object类的的方法
1:getClass方法
getClass()是Object类定义的方法,他会返回对象执行class实例 然后使用此实例调用geiName()方法可以去的类的名称
getClass()是Object类定义的方法,他会返回对象执行class实例 然后使用此实例调用geiName()方法可以去的类的名称
2:toString()方法
toString()方法的功能是将一个对象返回为字符串的形式 他会返回一个String实例 在实际的应用中通常重写toString()方法 为对象提供一个特定的输出模式当这个类转换成字符串或字符串链接时 将自动调用重写的toString()方法如下例题7.3让学生的自我介绍 , 使用重写toString方法
toString()方法的功能是将一个对象返回为字符串的形式 他会返回一个String实例 在实际的应用中通常重写toString()方法 为对象提供一个特定的输出模式当这个类转换成字符串或字符串链接时 将自动调用重写的toString()方法如下例题7.3让学生的自我介绍 , 使用重写toString方法
3:equals()方法
对象类型的转换
向上转型
将子类的对象赋值给父类的对象引用
自动类型转换
Animal a=new Animal();
自动类型转换
构建一个Animal的对象 赋值给Animal的a;
自动类型转换
Animal a=new Animal();
自动类型转换
构建一个Animal的对象 赋值给Animal的a;
向下转型
将父类的对象赋值给子类对象引用
向下转型的时候需要进行强制类型转换
强制类型转换
Dog a=(Dog)new Animal();
强制转换需要加()中加
向下转型的时候需要进行强制类型转换
强制类型转换
Dog a=(Dog)new Animal();
强制转换需要加()中加
使用instanceof关键字判断对象类型
对象名instanceof 类名
判断对象是否属于一个类或其子类
判断对象是否属于一个类或其子类
方法的重载
第六章中我们曾学习过构造方法 ,知道构造方法的名称是由类名决定,所以构造方法只有一个格名称。 如果希望以不同的方式俩实例化对象,就需要使用u东哥构造方法来完成 由于这个构造方法都需要根据类名进行命名 为了让方法名相同 而形参不同的构造方法同时存在必须用到方法重载 虽然方法重载起源与构造方法 但是它可以应用在其他方法中
方法的重载就是在同意给类中允许存在的一个以上的同名方法,只要这些方法的参数个数或类型不同即可
方法的重载就是在同意给类中允许存在的一个以上的同名方法,只要这些方法的参数个数或类型不同即可
方法名相同 参数不同;顺序不一样也叫做参数不同,变量名不重要 类型重要,不定长参数的底层参数是数组
fianl关键字
final变量
final关键字用于修饰常量
final关键字可用于声明变量,一旦该变量被设定 就不可以在改变该变量的值。通常由final定义的变量为常量
final关键字可用于声明变量,一旦该变量被设定 就不可以在改变该变量的值。通常由final定义的变量为常量
final方法
将方法定义为 final类型,可以防止子类修改父类的定义图7.7 修改final常量时发生的编译错误与实现方式,同时定义为final的方法的执行效率要高于非final
方法。在修饰权限中曾经提到过private修饰符,如果一个父类的某个方法被设置为private,子类将无法访问该方法,自然无法覆盖该方法。也就是说,一个定义为private的方法隐式被指定为final类型,因此无须将一个定义为private的方法再定义为final类型。
final修饰的类不可以被继承
方法。在修饰权限中曾经提到过private修饰符,如果一个父类的某个方法被设置为private,子类将无法访问该方法,自然无法覆盖该方法。也就是说,一个定义为private的方法隐式被指定为final类型,因此无须将一个定义为private的方法再定义为final类型。
final修饰的类不可以被继承
final类
定义为final 的类不能继承。如果希望一个类不被任何类继承,并且不允许其他人对这个类进任何改动,可以将这个类设置为final类。final类的语法如下:
final 类名
如果将某个类设置为final类,该类中的所有方法都被隐式设置为final法,但是final类成员变量可以被定义为final或非final形式。
例如,已知JDK中的java.lang包下的Math 数学类和String字符串类都是由 final关键字修饰的类这两个类就无法做任何类的父类,如果这两个类出现在extends右侧就会发生编译错误
final 类名
如果将某个类设置为final类,该类中的所有方法都被隐式设置为final法,但是final类成员变量可以被定义为final或非final形式。
例如,已知JDK中的java.lang包下的Math 数学类和String字符串类都是由 final关键字修饰的类这两个类就无法做任何类的父类,如果这两个类出现在extends右侧就会发生编译错误
多态
利用多态可以使程序具有良好的扩展性,并可以对所有类对象进行通用的处理。在7.3已经习过子类对象可以作为父类的对象实例使用,这种将子类对象视为父类对象的做法称为“向上转型”
假如现在要编写一个绘制图形的方法draw(),如果传入正方形对象就绘制正方形,如果传入圆形对象就绘制圆形,这种场景可以使用重载来实现
假如现在要编写一个绘制图形的方法draw(),如果传入正方形对象就绘制正方形,如果传入圆形对象就绘制圆形,这种场景可以使用重载来实现
但是这种写法有个问题:正方形和圆形都是图形,这场景细分的重载方式不仅增加了代码量,还降低了“易用度”。如果定义一个图形类,让它处理所有继承该类的对象,根据“向上转型”原则可以使每个继承图形类的对象作为draw方法的参数,然后在draw方法中做一些限定就可以根据不同形类对象绘制相应的图形。这样处理能够很好地解决代码冗余问题,同时程序也易于维护
抽象类与接口
抽象类
在解决实际问题同时,一般将父类定义为抽象类需要使用这个父类进行继承与多态处理 回想继承和多态原理,继承书中越是在上方的类月抽象,如鸽子类继承鸟类 ,鸟类继承动物类等在多态机制中,并不需要将父类初始化为对象 ,我们需要的只是子类 所以在Java语言中设置抽象类不可以实体化为对象
使用abstract关键字定义的类成为抽象类,而使用这个关键字定义的方法称为抽象方法。抽象方法没有方法体 这个方法本身没有任何意义,除非他被重写,而承载这个抽象方法的抽象必须被继承实际上抽象类除了被继承没有任何意义
使用abstract关键字定义的类成为抽象类,而使用这个关键字定义的方法称为抽象方法。抽象方法没有方法体 这个方法本身没有任何意义,除非他被重写,而承载这个抽象方法的抽象必须被继承实际上抽象类除了被继承没有任何意义
接口
实践与练习
包和内部类
java包类
类名冲突
Java中每个接口或类都来自不同的类包,无论是Java API中的类与接口还是自定义的类与接口,都需要隶属于某一个类包,这个类包包含了一些类和接口。如果没有包的存在,管理程序中的类名称将是一件非常麻烦的事情。如果程序只由一个类组成,自然不会出现类名重叠的问题,但是随着程序的类的数量增多,难免会出现这一问题。例如, 在程序中定义一个Login 类,因业务需要,还要定义
一个名称为Login的类,但是这两个类所实现的功能完全不同,于是问题就产生了--编译器不会允许存在同名的类文件。解决这类问题的办法是将这两个类放置在不同的类包中
一个名称为Login的类,但是这两个类所实现的功能完全不同,于是问题就产生了--编译器不会允许存在同名的类文件。解决这类问题的办法是将这两个类放置在不同的类包中
完整的类路径
一个完整的类名需要包名与类名的组合,每个类都隶属于一个类包,只要保证同一类包中的类不同名,就可以有效地避免同名类冲突的情况。如:String,其实并不是它完整的名称,就如同一个人一样有名有姓,String完整的名称是:Java.lang.String,java.lang是包的名称,String是类的名称
创建包
在Eclipse中创建包的步骤如下
1,在项目的src节点上点击,选择‘新建’/‘包’命令(英语为NEW / Package)
2,弹出‘新建Java包’(NEW Package)对话框,在‘名称’(Name)文本框输入新建的包名
3,在Eclipse中创建类时,可以在新建立的包中点击,选择’新建‘(New)命令,这样新建的类会默认保存在该包中,例外也可以在New Java Class对话框中指定新建类所在的包
导入包
1.使用import关键字导入包
如果某个类中需要使用Math 类,那么如何告知编译器当前应该使用哪一个包中的Math类,是 java.lang.Math 类还是commrMath类?这是一个令人困扰的问题。此时,可以使用Java 中的import关键字指定。例如,如果在程序中使用 import 关键字导入commrMath类,在程序中使用Math类时就会自动选择commrMath类。在使用import关键字时,可以指定类的完整描述,如果为了使用包中更多的类,可以在使用import关键字指定时在包指定后加上*,这表示可以在程序中使用该包中的所有类
如果某个类中需要使用Math 类,那么如何告知编译器当前应该使用哪一个包中的Math类,是 java.lang.Math 类还是commrMath类?这是一个令人困扰的问题。此时,可以使用Java 中的import关键字指定。例如,如果在程序中使用 import 关键字导入commrMath类,在程序中使用Math类时就会自动选择commrMath类。在使用import关键字时,可以指定类的完整描述,如果为了使用包中更多的类,可以在使用import关键字指定时在包指定后加上*,这表示可以在程序中使用该包中的所有类
2.使用import导入静态成员
import关键字除导包外,还可以导入静态成员,这是jdk5.0以上版本提供的功能导入静态成员可以编写更为方便 使用import导入静态成员
import关键字除导包外,还可以导入静态成员,这是jdk5.0以上版本提供的功能导入静态成员可以编写更为方便 使用import导入静态成员
内部类
成员内部类
在成员内部类中可以随意使用外部类的成员方法及成员变量,尽管这些类被修饰为private 尽管成员变量i以及成员方法g()都是外部类中被修饰为private但在成员内部类中可以直接使用,内部类的示例一定要绑定在外部类的实例上,如果从外部类中从初始化一个内部类对象,那么内部类对象就会绑定在外部类对象上,内部类初始化与其他类的初始化方式相同,都是使用new关键字 一面一个实例演示
匿名内部类
匿名类是在创建一种写法。对象时才会编写类体的一种写法。
匿名类的特点是”现写现用“语法如下
匿名类的特点是”现写现用“语法如下
实践与练习
异常处理
异常概述
在程序中,异常可能由程序员没有预料到各种情况产生,也可能超出了程序员可控范围的环境因素影响,如用户的坏数据,试图打开一个根本不存在的文件等 。在java中,这种在程序运行时可能出现的一些错误为异常。异常是一个在程序执行期间发生的时间,他中断了正在执行的程序的正常指令
异常的抛出与捕捉
抛出异常
异常抛出后,如果不做任何处理的话,程序就会被终止,例如将一个字符串转换为整型 ,可以通过lnteger类的parseInt()方法来实现。但如果该字符串不是数字形式,parseInt()方法就会抛出异常,程序将会出现异常提示
捕捉异常
Java 语言的异常捕获结构由try、catch和finally3部分组成。其中,try语句块存放的是可能发生异常的 Java 语句;catch 语句块在 try语句块之后,用来激发被捕获的异常;finally语句块是异常处理结构的最后执行部分,无论 try语句块中的代码如何退出,都将执行 finally 语句块
java的常见异类型
在java中,提供了一些二机场了用来描写经常发生的异常,其中,有的需要程序员来进行捕获处理或声明抛出,有的是有java虚拟机自动进行捕获处理
自定义异常
使用java内置的异常类可以描述在变成时出现的大部分异常情况。除此之外用户只需要继承Exception类即可自定义异常类。在程序中使用自定义异常类大体可分为以下几个步骤
1.创建自定义异常类
2.在方法中通过throw关键字抛出异常对象
3.如果在当前抛出异常的方法中处理异常,可以使用 try_catch语句快捕获并处理否则在方法的声明出通throws关键字知名要怕出给方法调用者异常,继续进行下一步操作
在方法中抛出异常
使用throws关键字抛出异常
throws关键字通常被应用重载声明方法时,用来指定方法可能抛出的异常,多个异常可使用逗号隔开
使用throw关键字抛出异常
throw关键字通常用于方法体中,并且抛出一个异常对象。程序在执行到throw语句时立即终止它后面的语句都不执行,通过throw抛出异常后,如果想在上一级的代码中捕获并处理异常则需要在抛出异常的方法中使用throw关键字在方法的声明中指明抛出的异常;如果要捕捉throw抛出的异常,则必须使用tryu-catch语句 throw通常用来抛出用户自定义异常下面介绍throw的用法
运行时异常
RuntimeException异常是程序运行过程中抛出的异常。java类库的每个包中都定义了异常类所有这些类都是Throwable类的子类Throwable类派生了两个子类,分别时Exception类和Error类Error类即其子类来描述java运行系统中的内部错误以及资源耗尽的错误,这类错误比较重要Exception类称为非致命性类,可以通过捕捉处理实用程序继续执行Exception类又根据错误发生的原因分为RuntimeException异常和除RuntimeException之外的异常
异常的使用原则
java异常强制用户去考虑程序的强建性和安全性。异常处理不应用来控制程序的正常流程,其主要作用是捕捉程序在运行时发生的一场并进行相应的处理,编写代码处理某个方法可能出现异常时可遵循的一下几条原则
1.当前方法声明中使用try_catch语句捕捉异常
2.一个方法被覆盖,覆盖他的方法必须抛出先相同的异类或异类的子类
3.如果父类抛出多个异常,则覆盖方法必须抛出那些异常的一个子集,不能抛出新的异常
实践与练习
字符串
String类
声明字符串
子在Java语言中,字符串必须包含在一对双引号(“”)之内。例如:
“23,23”、“ABCD”、“你好”
以上这些都是字符串的常量,字符串常量可以是系统能够显示的任何文字信息,甚至可以是单个字符
“23,23”、“ABCD”、“你好”
以上这些都是字符串的常量,字符串常量可以是系统能够显示的任何文字信息,甚至可以是单个字符
创建字符串
在Java语言中,将字符串作为对象来处理,因此可以像创建其他类对象一样来创建字符串对象。
创建对象要使用类的构造方法
创建对象要使用类的构造方法
1,String(char a[])
2,String(char a[],int offset ,int length)
3,String(char[]value)
连接字符串
连接多个字符串
使用加号“+”运算符可以实现对多个字符串的连接,“+”运算符可以连接多个String对象并产生一个新的String对象 也不仅仅能字符串类型 使用也可以对其他的数据类型进行链接 以下两个例题例题讲述了连接多个字符串和连接其他类型数据的使用
连接其他数据类型
子字符串也可同其他基本数据类型进行连接。如果将字符串同其他数据类型数据进行连接,会将其他数据类型的数据直接转换字符串主题
获取字符串信息
获取字符串长度
使用String类的length()方法可以获取生命的字符串对象的长度
字符串查找
字符串查找String类停工了两种查找字符串的方法,一个是indexOf()和lastIndexOf()方法。这两种方法都允许在字符串中搜索指定条件的字符或者字符串。indexOf()方法返回的是搜索的字符或者字符串首次出现的位置 , lastIndexOf()方法的是搜索的字符或者字符串最后一次出现的位置。
如果后期代码中出现同样的字符或者字符串但只需要查找其中某个 如果想要首次出现的的话indexOf()方法 查找最后一个出现的位置就使用 lastIndexOf()
如果后期代码中出现同样的字符或者字符串但只需要查找其中某个 如果想要首次出现的的话indexOf()方法 查找最后一个出现的位置就使用 lastIndexOf()
获取指定索引位置的字符
str是任意字符串
index:整型值,用于指定要返回字符的下标
index:整型值,用于指定要返回字符的下标
字符串操作
获取子字符串
通过String类的substring()方法对字符进行截取。substring()方法被两种不同的重载形式来满足不同的需要,这形式的共同点就是利于字符串的下标进行截取,且应明确字符串的下标是重0开始的跟数组类似
1.substring(int beginlndex)
该方法返回的是从指定的索引位置开始截取知道字符串结尾的字串
str.substring(int beginlndex)
其中beginlndex指定从某一索引处开始截取字符串 如下代码所示
1.substring(int beginlndex)
该方法返回的是从指定的索引位置开始截取知道字符串结尾的字串
str.substring(int beginlndex)
其中beginlndex指定从某一索引处开始截取字符串 如下代码所示
2.substring(int beginIndex,int endIndex)
该方法返回的是从字符串某一索引位置开始截取至某一索引位置结束的字串语法如下
substring(int beginIndex,int endIndex)
beginIndex:开始截取子字符串的索引位置
endIndex:子字符串在整个字符串中的结束位置
该方法返回的是从字符串某一索引位置开始截取至某一索引位置结束的字串语法如下
substring(int beginIndex,int endIndex)
beginIndex:开始截取子字符串的索引位置
endIndex:子字符串在整个字符串中的结束位置
去除空格
去除空格:时使用trim()方法返回字符串的副本,忽略前导空格和尾部空格 字符串字母中间有空格的话就要使用到字符串的替换了
字符串替换
字符串的替换:是使用replace()方法可实现将指定的字符或者字符串替换成新的字符或者字符串,其中 targer:要替换的字符或者字符串
而replacement:用于替换原来字符串的内容
而replacement:用于替换原来字符串的内容
判断字符串的开头与结尾
startsWith()方法与endsWith()方法分别是用来判断字符串是否只当的内容开始或者结束,这两个方法的返回值都是为布尔类型
startsWith()方法
startsWith()方法
判断字符串是否相等
对字符串对象进行比较不能简单的使用比较运算符“==”,因为比较运算符比较的是两个字符串的是否相同,即使两个字符串内容相同,两个对象的内存地址也是不同的,使用比较运算符任然会返回false
1.equals()方法
如果两个字符串具有相同的字符和长度,则使用equals()方法进行比较 是,返回true 否则,返回
如果两个字符串具有相同的字符和长度,则使用equals()方法进行比较 是,返回true 否则,返回
2.equalsIgnoreCase()方法
是哟个equals()方法对字符串进行比较时区分大小写的,而equalsIgnoreCase()方法是在忽略大小所写的情况下比较两个字符串是否相等,返回结果认为boolean型
是哟个equals()方法对字符串进行比较时区分大小写的,而equalsIgnoreCase()方法是在忽略大小所写的情况下比较两个字符串是否相等,返回结果认为boolean型
按字典顺序比较两个字符串
compareTo方法为按字典顺序比较两个字符串,该比较基于字符串中各个字符的Unicode的值,按字典顺序将String对象比较是字符序列与参数字符串所表示的字符序列进行比较。如果按字典顺序此String对位于参数字符串之前则比较结果为一个负数;如果按字典顺序此String对象位于参数字符串之后,则比较结果为一个正整数;如果这两个字符串相等,则结果为0
字母大小写转换
String类的toLowerCase()方法可将字符串中的所有大写字母改写成小写字母,而另一种语句toUpperCase()可以将字符串中的所有小写字母改写成大写字母
1. toLowerCase()方法
该方法将字符串中所有的大写字母转换成小写,如果自负床中没有应该被转换的字符,则将源字符串返回:否则将返回一个新的字符串,将原字符串中每一个小写字母都转换成大写,字符串长度不变 语法如下:
str.toLowerCase();
其中str是要进行转换的字符
该方法将字符串中所有的大写字母转换成小写,如果自负床中没有应该被转换的字符,则将源字符串返回:否则将返回一个新的字符串,将原字符串中每一个小写字母都转换成大写,字符串长度不变 语法如下:
str.toLowerCase();
其中str是要进行转换的字符
2.toUpperCase()该方法将字符串中所有小写的字符转换为大写,如果字符串中没有应该被转化的字符,则将原字符串返回;否则返回一个新字符串,将源字符串中每一个小写字母都转换为大写,字符串长度不变语法如下
str.toUpperCase();
其中str是要进行转换的字符
str.toUpperCase();
其中str是要进行转换的字符
字符串分割
使用split()方法可以使字符串按指定的分割字符或者字符串进行分割,并将分割后的结果存放在字符串数组中,split()方法提供了以下两种字符串分割形式
1。split(String sign)
该方法可以根据给定的分隔符来对字符串进行拆分 语法如下
str.split(String sign);
其中,sign为分割字符串的分隔符,也可以使用正则表达式
该方法可以根据给定的分隔符来对字符串进行拆分 语法如下
str.split(String sign);
其中,sign为分割字符串的分隔符,也可以使用正则表达式
2.split(String sign,int limit);
该方法可根据给定的分割符对字符串进行拆分,并且限制拆分的次数 语法瑞小安
str.split(String sign,int limit);
该方法可根据给定的分割符对字符串进行拆分,并且限制拆分的次数 语法瑞小安
str.split(String sign,int limit);
格式化字符串
日期和时间字符串格式化
在应用程序设计中,经常需要的显示日期和时间。如果想输出满意的日期和时间格式,一般需要编写大量代码,经过各种算法才能实现。format()方法 通过给定的特殊转换符作为参数来实现对日期和时间的格式化
常规类型格式化
常规类型格式化可应用于任何参数类型,可通过下表常规标识符所示的转换符来实现
使用正则表达式
正则表达式通常被用于判断语句,用来检查某一字段是否曼珠某一个是。正则表达式是含有一些具有特殊含义字符的字符串,这些特殊字符串为正则表达式的元字符 例如”\\d“表示数字0~9中任何一个”\\d“就是元素符。正则表达式中的元字符及其意义如下表所示
字符串生成器
创建成功的字符串对象,其长度的固定的,内容不能够被改变和编译。虽然使用”+“可以达到附加新字符或者新字符串的目的,但”+“会场新一个新的String实例,会在内存中创建新的字符串对象,如果重复的对字符串进行修改,将极大的增加系统开销。 JDK新增了可变的字符序列StringBuilder类大大提高了平凡增加字符串的效率
实践与练习
常用类库
包装类
Integer类
java .lang 包中的 Integer 类、Byte 类,Short类和Long类,分别将基本数据类型类型,int、byte、short和long封装成一个类,由于这些类都是Number 类的子类,区别就是封装不同的数据类型,其包含的方法基本相同,所以本节Integer类为例讲解整数包装类。Integer类在对象中包装了一个基本数据类型int的值,该类的对象包含一个int类型的字段。此外该类提供了多个方法,能在int类型和 String 类型之间互相转换,同时还提供了其他一些处理int类型时非常有用的常量和方法
Douber类
Double 类和 Float 类是对double、float基本类型的封装,它们都是Number类的子类,都是对浮卢数进行操作,所以常用方法基本相同,本节将对Double 类进行讲解。对于Float类,可以参考Double类的相关内容。
Double 类在对象中包装一个基本类型为double的值,每个Double类的对象都包含一个 double类型的字段。此外,该类还提供多个方法,可以将double类型转换为String类型,将String类型转换为double类型,也提供了其他一些处理double 类型时有用的常量和方法。Double 类的常用方法如表
Double 类在对象中包装一个基本类型为double的值,每个Double类的对象都包含一个 double类型的字段。此外,该类还提供多个方法,可以将double类型转换为String类型,将String类型转换为double类型,也提供了其他一些处理double 类型时有用的常量和方法。Double 类的常用方法如表
Boolean类
Boolean类将基本类型为boolean的值包装在一个对象中,一个Boolean类型的对象只包含一个类型为boolean的字段。此外此类还为了boolean类型和String类型的相互转换提供了许多方法,并提供了处理boolean类型时非常有用的其他一些常量和方法
Character类
Character类在对象中包装一个基本类型为char的值,该类提供了多种方法,以确定字符的类别(小写字母、数字等),并可以很方便地将字符从大写转换成小写,反之亦然。Character类提供了很多方法来完成对字符的操作
Number类
前面介绍了Java包装,对包装类,它们有一个共同的父类--Number类,该半是一个抽象类,它是Byte、Integer、Short、Long、Float和Double类的父类,其子类必须提供将示的数值转换为byte、int、short、long、float 和 double的方法。例如,doubleValueO方法返回双精度点值,floatValueO方法返回单精度浮点值
数字处理
数组格式化
数字格式化在解决实际问题时应用非常普遍,如表示某超市的商品价格,需要保留两位有效数字。数字格式化操作主要针对的是浮点型数据,包括double型和float型数据。
cimalFormat 类是NumberFormat的一个子类,用于格式化十进制数字。它可以将一些数字格式为整数、浮点数、百分数等。通过使用该类可以为要输出的数字加上单位或控制数字的精度。一般况下,可以在实例化DecimalFormat对象时传递数字格式,也可以通过DecimalFormat类中的 applyPattern()方法来实现数字格式化。
格式化数字时,可在DecimalFormat类中使用一些特殊字符构成一个格式化模板,使数字按照一定的特殊字符规则进行匹配
cimalFormat 类是NumberFormat的一个子类,用于格式化十进制数字。它可以将一些数字格式为整数、浮点数、百分数等。通过使用该类可以为要输出的数字加上单位或控制数字的精度。一般况下,可以在实例化DecimalFormat对象时传递数字格式,也可以通过DecimalFormat类中的 applyPattern()方法来实现数字格式化。
格式化数字时,可在DecimalFormat类中使用一些特殊字符构成一个格式化模板,使数字按照一定的特殊字符规则进行匹配
Math类
Mad类提供了众多数学函数方法,主要包括三角函数方法,指数函数方法,取整函数方法,取最大售、最小值,以及平均值的数方法。这些方法都被定义为 static 形式,所以在程序中应用比较简便。可以使用如下形式调用:
Ma数学方法
在Mth用量,些数学常量作为Math类的成员变量出现,调用起来也很简单。可以使用如下形式调用:
Math,为三角法,指数
Math.Pi
Math.E
数方法,,取大值、最小值和绝对值函数方法
Ma数学方法
在Mth用量,些数学常量作为Math类的成员变量出现,调用起来也很简单。可以使用如下形式调用:
Math,为三角法,指数
Math.Pi
Math.E
数方法,,取大值、最小值和绝对值函数方法
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):将角度转换为弧度。
a public static double toDegrees(double angrad):将弧度转换为角度。
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):将角度转换为弧度。
a public static double toDegrees(double angrad):将弧度转换为角度。
Math类中与指数相关的函数方法如下。
public static double exp(doublea):用于获取e的a次方,即取e。
public static double log(doublea):用于取自然对数,即取 lna 的值。
public static double log10(doublea):用于取底数为10的a的对数。
public static double sqrt(double a):用于取a的平方根,其中a的值不能为负值。
public static double cbrt(double a):用于取a的立方根。
public static double pow(doubleadoubleb):用于取a的b次方
public static double exp(doublea):用于获取e的a次方,即取e。
public static double log(doublea):用于取自然对数,即取 lna 的值。
public static double log10(doublea):用于取底数为10的a的对数。
public static double sqrt(double a):用于取a的平方根,其中a的值不能为负值。
public static double cbrt(double a):用于取a的立方根。
public static double pow(doubleadoubleb):用于取a的b次方
取整函数方法
在具体的问题中,取整操作使用也很普遍,所以Java在Math类中添加了数字取整方法。Math类
public static double ceil(double a):返回大于等于参数的最小整数。向上事整
中主要包括以下几种取整方法:
public static double floor(double a):返回小于等于参数的最大整数。向下轻
public static double rint(double a):返回与参数最接近的整数,如果存在两个同样接近的整数,则结果取偶数。
public static int round(float a):将参数加上 0.5 后返回与参数最近的整数。
public static long round(double a):将参数加上 0.5后返回与参数最近的整数,然后强制转换为长整型
在具体的问题中,取整操作使用也很普遍,所以Java在Math类中添加了数字取整方法。Math类
public static double ceil(double a):返回大于等于参数的最小整数。向上事整
中主要包括以下几种取整方法:
public static double floor(double a):返回小于等于参数的最大整数。向下轻
public static double rint(double a):返回与参数最接近的整数,如果存在两个同样接近的整数,则结果取偶数。
public static int round(float a):将参数加上 0.5 后返回与参数最近的整数。
public static long round(double a):将参数加上 0.5后返回与参数最近的整数,然后强制转换为长整型
.取最大值、最小值、绝对值函数方法
在程序中最常用的方法就是取最大值、最小值、绝对值等, Math类中包括的操作方法如下
Math public static double max(double a,double b):取a与b之间的最大值。
public static int min(int a,intb):取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之间的最小值,参数为双精度浮点型。 publicstatic int abs(int a):返回整型参数的绝对值。
public static long abs(long a):返回长整型参数的绝对值。
public static float abs(float a):返回单精度浮点型参数的绝对值。
public static double abs(double a):返回双精度浮点型参数的绝对值
在程序中最常用的方法就是取最大值、最小值、绝对值等, Math类中包括的操作方法如下
Math public static double max(double a,double b):取a与b之间的最大值。
public static int min(int a,intb):取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之间的最小值,参数为双精度浮点型。 publicstatic int abs(int a):返回整型参数的绝对值。
public static long abs(long a):返回长整型参数的绝对值。
public static float abs(float a):返回单精度浮点型参数的绝对值。
public static double abs(double a):返回双精度浮点型参数的绝对值
Random类
Random 类是JDK随成器类,通例化一个Random 对象创建一个随机数生
器以这种方式实例化对象时,Java 编译器将以系统当前时间作为随机数生成器的种子。因为每时每刻的时间不可能相同,所以产生的随机数不同。但是如果运行速度太快,也会产生两个运行结果相同的随机数。
用户也可以在实例化Random类对象时,设置随机数生成器的种子
器以这种方式实例化对象时,Java 编译器将以系统当前时间作为随机数生成器的种子。因为每时每刻的时间不可能相同,所以产生的随机数不同。但是如果运行速度太快,也会产生两个运行结果相同的随机数。
用户也可以在实例化Random类对象时,设置随机数生成器的种子
BigInterger类
Biginteger类较Integer数字围大得多。文介绍Integerint in,Ineger无法实现了,所以Java中提供 Biglnteger类来处理更大的数字。BigInteger类支持意精度的整数,也就是说,在运算中igne类可以准确地表示任何大小的整数值而不会丢失信息。
在BigIneger类中封装了多种操作,除了基本的加、减、乘、除操作,还提供了绝对值、相反数最大公约数以及判断是否为质数等操作。
使用BigInteger 类,可以实例化一个BigInteger 对象,并自动调用相应的构造函数。Biglnteger类具有很多构造函数,但最直接的一种方式是参数以字符串形式代表要处理的数字
在BigIneger类中封装了多种操作,除了基本的加、减、乘、除操作,还提供了绝对值、相反数最大公约数以及判断是否为质数等操作。
使用BigInteger 类,可以实例化一个BigInteger 对象,并自动调用相应的构造函数。Biglnteger类具有很多构造函数,但最直接的一种方式是参数以字符串形式代表要处理的数字
BigDecimal类
Decimal 类和BigInteer能实现大字的算不同的是BigDecimal类加入了小数的概念般的 float 型和 double型数据用来做科学计算或工程计算,但由于在商业计算中要求数字精比较高,所以要用到BigDecimal 类。igDecimal支持何精度的定点数,可以用它来精确计算货值。在BigDecimal类中
BigDecimal类型的数字可以用来做超大的浮点数的运算,如假、减、乘、除等。但是在所有运算中除法是最复杂的,因为在除不尽的情况下小数点后的末尾的处理需要考虑BigDecimal类实现的加、减、乘、除的方法如表所示
在上述方法中 BigDecimal类中divaude()方法有多种设置用于返回商小数点后的末尾的处理这些模式的名称与含义如表11.10所示
System类
控制台输出字符
System类提供标准输入标准输出和错误输出流,也就是说,System类提供了3个静态对 out和enr。书中的代码多次使用了这些对象,最常见的就是 out 对象。在控制台输出字符串,出的方法有两种
1.不会自动换行的print()方法 printO方法的语法如下:
System.out.print("Hello!");
System.out.print("Hello!");
2.可以自动换行的printin()方法
printInO方法在print后面加上了“ln”后缀(就是line的简写),
语法如下: System.out.printin(“书籍是人类进步的阶梯!");
printInO方法在print后面加上了“ln”后缀(就是line的简写),
语法如下: System.out.printin(“书籍是人类进步的阶梯!");
计时
System.currentTimeMillis()方法可以获取字1970年1月1日零点至今的毫秒数,虽然Date日期类也有类似的方法,但代码会System类多,所以System.currentTimeMillis()方法是为获取当前的毫秒数,最常用的方法是应为该方法的返回值精确到毫秒所以可以利用该方法来记录程序的运行时间
Scanner类
与C语言不同,Java 从台中读出用户输入的值,用的不是一行可以直接使用的代码,而是由一个叫 Scanner 来现canner英文译就是扫描仪,它的用途就和现实生活的扫描仪一可以把数字化信息流转为人类可识别的文字。控制台输出内容用到了 System.out 就表示向控制台输 System.in 表示从控制台输入,让 Scanner 扫描 System.in 就可以获取用户输入的值了使用Scanner类首先要引入该类,其语法如下:
import java.util.Scanner; //引入Scanner类
import java.util.Scanner; //引入Scanner类
日期时间类
Date类
Date,用造建对,其构造法其明如表
日期时间格式化
如果在村序中直接输出Datc 对象,示的是“Mon Feb 29 17:39:50 CST 2016”这种格式的日间,何其显示为2016-02-29或者173950这样的日期时间格式呢?Java中提做Danefort类来实现类似的功能,
Datefocmat类是日期时间格式化子类的抽象类,可以按照指定的格式对日期或时间进行格式化
Datefarmat类提供了很多类方法,以获得基于默认或给定语言环境和多种格式化风格的默认日期计 F化包HORTMEDIUMLONG和FULL4种:
E SHORT:完全为数字,如 12.13.52或3:30pm
MEDIUM:较长,如Jan121952
Z LONG:更长,如January12,1952或3:30:32pm
ZFULL:完全指定,如Tuesday、April 12、1952AD或3:30:42pm PST.
另外,使用DaeFormat类还可以自定义日期时间的格式。要格式化一个当前语言环境下的日期,首先需要创建 Daeeformat类的一个对象,由于它是抽象类,因此可以使用其静态方法getDateInstance(进行创建 Dadsfomat df =DateFormat.getDameInstance();
Datefocmat类是日期时间格式化子类的抽象类,可以按照指定的格式对日期或时间进行格式化
Datefarmat类提供了很多类方法,以获得基于默认或给定语言环境和多种格式化风格的默认日期计 F化包HORTMEDIUMLONG和FULL4种:
E SHORT:完全为数字,如 12.13.52或3:30pm
MEDIUM:较长,如Jan121952
Z LONG:更长,如January12,1952或3:30:32pm
ZFULL:完全指定,如Tuesday、April 12、1952AD或3:30:42pm PST.
另外,使用DaeFormat类还可以自定义日期时间的格式。要格式化一个当前语言环境下的日期,首先需要创建 Daeeformat类的一个对象,由于它是抽象类,因此可以使用其静态方法getDateInstance(进行创建 Dadsfomat df =DateFormat.getDameInstance();
Calendar类
打开JavaAPI档看javauilDate提供的大部分法都已经过时了,因为Date类设切没有考虑到国际化,而且很多方法也不能满足用户需求,比如需要获取指定时间的年月日时息,或者想要对日期时间进行加减运算等复杂的操作,Date 类已经不能胜任,因此JDK 提供了新的时间处理类--Calendar日历类。
Calendar 类是一个抽象类,它为特定瞬间与一组诸如YEAR、MONTH、DAY_OF MONTHHOU日历字段之间的转换提供了一些方法,并为操作日历字段(如获得下星期的日期)提供了一些方法。该类还为实现包范围外的具体日历系统提供了其他字段和方法,这些字段和方法被定义为 protecte Calendar提供了一个类方法 getInstanceO,以获得此类型的一个通用的对象。Calendar getInstanceO方法返回一个Calendar对象,其日历字段已由当前日期和时间初始化,其使用方法如 Calendar rightNow=Calendar.getinstance();
说明
由于 Calendar 类是一个抽象类,不能用 new 创建实例对象,因此除了使用getInstance(方法创建其对象,如果需要创建其对象,必须使用其子类
Calendar 类是一个抽象类,它为特定瞬间与一组诸如YEAR、MONTH、DAY_OF MONTHHOU日历字段之间的转换提供了一些方法,并为操作日历字段(如获得下星期的日期)提供了一些方法。该类还为实现包范围外的具体日历系统提供了其他字段和方法,这些字段和方法被定义为 protecte Calendar提供了一个类方法 getInstanceO,以获得此类型的一个通用的对象。Calendar getInstanceO方法返回一个Calendar对象,其日历字段已由当前日期和时间初始化,其使用方法如 Calendar rightNow=Calendar.getinstance();
说明
由于 Calendar 类是一个抽象类,不能用 new 创建实例对象,因此除了使用getInstance(方法创建其对象,如果需要创建其对象,必须使用其子类
Runtime类
执行本地命令
本地命令指的是操作系统的命令。例如,在Linux系统下就表示shell命令,在Windows系统下
表示cmd命令。
Runtime 类提供 execO方法让Java 代码可以执行系统的命令,execO方法有很多重载的形式,例如。
Process exec(String command)
Process exec(Stringlcmdarray)
command:要执行的系统命令,字符串类型。
cmdarray:要执行的命令和相应的命令参数,字符串数组类型。
其实这两个重载方式很类似,如执行“javac hello.java”这行命令,使用第一种重载方式的代码如下:
Runtime.getRuntime().exec("javac hello.java");
使用第二种重载方式的代码如下:
String command[={"javac","hello.java" };
Runtime.getRuntime().exec(command);
exec()方法会返回一个 Process 对象。Process类是Java 中进程类,该类是抽象类,不能使用new
返回的信息。
关键字创建实例。Process 类的常用方法如表 11.22所示,开发可以使用getInputStream()方法获取进程返回的信息
表示cmd命令。
Runtime 类提供 execO方法让Java 代码可以执行系统的命令,execO方法有很多重载的形式,例如。
Process exec(String command)
Process exec(Stringlcmdarray)
command:要执行的系统命令,字符串类型。
cmdarray:要执行的命令和相应的命令参数,字符串数组类型。
其实这两个重载方式很类似,如执行“javac hello.java”这行命令,使用第一种重载方式的代码如下:
Runtime.getRuntime().exec("javac hello.java");
使用第二种重载方式的代码如下:
String command[={"javac","hello.java" };
Runtime.getRuntime().exec(command);
exec()方法会返回一个 Process 对象。Process类是Java 中进程类,该类是抽象类,不能使用new
返回的信息。
关键字创建实例。Process 类的常用方法如表 11.22所示,开发可以使用getInputStream()方法获取进程返回的信息
查看内存
Runtime 类可以通过freeMemory0方法查看当前 Java虚拟机可用内存的剩余量。如果程序能够实时监控内存剩余量,就可以尽量控制程序对内存的占用,从而避免出现“内存溢出”的情况。同样,也可以用来对测试程序性能,检验程序算法是否导致内存紧张
实践与练习

收藏
0 条评论
下一页