Java从入门到精通
2023-09-04 09:15:45 7 举报
AI智能生成
java从入门到精通第1到12章
作者其他创作
大纲/内容
第1章:初始java
1.1java简介
1.1.1:什么是Java语言
Java是1995年由sun公司推出的一门极富创造力的面向对象的程序设计语言
1.1.2:java的应用领域:借助java程序人员可以自由地使用现有的的软件系统平台和硬件
java的应用领域主要有以下几个方面
1.桌面应用系统开发
2.嵌入式系统开发
3.电子商务应用
4.企业级应用开发
5.交互式系统开发
6.多媒体系统开发·
7.分布式系统开发
8.web应用系统开发
9.移动端应用开发
1.1.3:java的版本:Javase和Javaee
Javase:java标准版
Javaee:java企业版
1.1.4:怎样学好java
明确方向
基础学习
了解设计模式
不要死记语法
多实践,多思考,多请教
不要急躁
尝试自己解决问题
多查阅资料
多阅读别人代码
1.1.5:javaapi文档
api是应用程序编程接口,主要包括类的继承结构,成员变量,成员方法,构造方法等
1.2:Java语言的特性
简单:java语法简单明了,容易掌握
面向对象:java语言的重要特性
分布性:java的分布特性分别是操作分布和数据分布
可移植性:java的类库也实现了针对不同平台的接口
解释型:运行Java需要解释器
安全性:java可以编写出防病毒和防修改的系统
健壮性:Java语言的设计目标之一,是能编写出多方面、可靠的应用程序
多线程:java语言支持多线程机制,能够使用应用程序在同一时间并执行多项任务
高性能:字节码可以在程序运行时被翻译成特定的机器指令,从而进一步提高运行速度
1.3:搭建Java环境
1.3.1:jdk下载
jdk版本众多,选择适合的就好
1.3.2:在Windows10系统下搭建jdk环境
配置环境变量
第2章:熟悉eclipse开发工具
2.1:熟悉eclipse
2.1.1:eclipse简介:eclipse为编程人员提供了一流的java程序开发环境
2.1.2:下载eclipse:点击下载
2.1.3:安装eclipse的中文语言包:下载Babel汉化包(习惯英文更好使用)
2.1.4:eclipse的配置与启动
将eclipse压缩包解压至想要盘中的目录(注意全英文文件夹路径)
2.1.5:eclipse工作台
进入欢迎界面,点击菜单一行中的file--new--Javaproject(新建java文件)
2.1.6:透视图与视图
1.透视图:不同透视图可以切换,但是同一时刻只能使用一个透视图
2.视图:视图有自己独立的菜单栏和工具栏
2.1.7:菜单栏
文件、编辑、源代码、重构、帮助、搜索、窗口、项目、运行、浏览
2.1.8:工具栏
1.主工具栏:位于eclipse菜单栏下方的工具栏
2.视图工具栏:视图有不同的用途
3.透视图工具栏:切换视图按钮
2.1.9:“包资源管理器”视图
2.1.10:“控制台”视图
2.2:使用eclipse
2.2.1:创建java项目
选择文件新建
弹出新建java对话框
点finish完成
2.2.2:创建Java类文件
新建java类
向导文件夹
2.2.3:使用编译器编写程序代码:
打开java编辑器
编写java代码
2.2.4:运行Java代码
运行结果
2.3:程序调试
1.断点:java调试器每次遇到程序断点时都会将当前线程挂起,及暂停当前线程的运行
2.以调试方式运行java程序
3.程序调试:单步跳过:运行单独的一行程序代码。
第3章:java语言基础
3.1:Java主类结构
1.包声明:package Number为声明类的包
2.声明局部变量和成员变量:s1为成员变量,s2为局部变量
3.编写主方法:main为主方法。从花括号开始({)至花括号结束(}),public static void是main()的修饰符、静态修饰符,必须声明public static void main(String[] args)一组字符串,字符串为main()的主参数。[文字描述算法在代码中]
3.2:基本数据类型
3.2.1:整数类型:简称整形,用来存储整数值
整数类型:(byte,short,interesting,long)
3.2.2:浮点类型:简称浮点型,用来存储含有小数部分的数值
浮点类型:(float、double)
3.2.3:字符类型:用于储存单个字符
字符类型:.char型:储存单个字符,占用16位,用单引号表示
2.转义字符:是一种特殊的字符变量,以反斜杠开头
3.2.4:布尔类型
布尔类型:只有true和false两个值
3.3:变量与常量
3.3.1:标识符和关键字
1.标识符:用来标识类名、变量名、方法名、数组名、文件名的有效字符序列
由任意顺序字母(A/a)、下划线(-)、美元符号($)和数字(不能放开头)组成。
.只能包含字母、下划线、美元符号、数字
.不能以数字开头
.要避开关键字(关键字即为代码中彩色的字)这里用任意代码作为示例。
由任意顺序字母(A/a)、下划线(-)、美元符号($)和数字(不能放开头)组成。
.只能包含字母、下划线、美元符号、数字
.不能以数字开头
.要避开关键字(关键字即为代码中彩色的字)这里用任意代码作为示例。
2.关键字:又称保留字,是Java语言中的已经被赋予特定意义的一些单词,不可以把这些单词作为标识符来使用。3.2节介绍数据类型时提到的int Blooean等都是关键字Java语言中的关键字,如表3.4所示。
3.3.2:声明变量:变量的使用是程序设计中的一个十分重要的环节。声明变量就是要告诉编译器这个变量的数据类型,这样编译器才能知道配置多少空间给它。变化的
定义和赋值:类型+变量名 例如:(double+weight)
.局部变量:在方法内部定义,只在该方法内有效
定义和赋值:类型+变量名 例如:(double+weight)
.局部变量:在方法内部定义,只在该方法内有效
3.3.3:声明常量:在程序中运行过程中一直不会改变的量,称为常量,通常也被称为final变量常量在整个程序中只能被赋值一次。
3.3.4:变量的有效范围:由于变量被定义出来后只是暂时存在内存中,等到程序执行到某一个点,该变量会被释放掉。也就是说变量有它的生命周期。
1.成员变量
2.局部变量
3.4:运算符
3.4.1:赋值运算符:以“=”表示,将右边数赋值给左边
Java中的算术运算符主要,加有减乘除求余,他们都是二元运算符。Java中算术运算符的功能及使用方式如表3.5所示。
3.4.3:自增和自减运算符:a++,++a;a--,--a;(运算符在前,先运算后使用;运算符在后,先使用后运算);
比较运算符属于二元运算符,用于程序中的变量之间变量和自变量之间以及其他类型的信息之间的比较。比较运算符的运算结果是boolean型,当运算符对应的关系成立时运算结果为true,否则为false。所有比较运算符通常作为判断依据,用在条件语句中比较运算符。共有六个,如图3.6所示。
3.4.5:逻辑运算符:&&(与):两者都为真,结果才是真;
||(或):只要有一者为真,结果就是真;
!(非):非真即假,非假即真;
false&&.....&&.....:结果一定为false(短路现象)
true||.....||.....:结果一定为true(短路现象)
||(或):只要有一者为真,结果就是真;
!(非):非真即假,非假即真;
false&&.....&&.....:结果一定为false(短路现象)
true||.....||.....:结果一定为true(短路现象)
3.4.6:位运算符:二进制之间进行运算使用位运算符
&(与):两者都为1,结果才是1;
|(或):只要有一者为1,结果就是1;
~(取反):0变1,1变0;
^(异或):两者相同即为0,不同为1;
<<(左移):整体往左移一位,空位补0,溢出去掉。
>>(右移):整体往右移一位,正数补0,负数补1,溢出去掉。
>>>(无符号右移):整体往右移,空位补0,溢出去掉。
&(与):两者都为1,结果才是1;
|(或):只要有一者为1,结果就是1;
~(取反):0变1,1变0;
^(异或):两者相同即为0,不同为1;
<<(左移):整体往左移一位,空位补0,溢出去掉。
>>(右移):整体往右移一位,正数补0,负数补1,溢出去掉。
>>>(无符号右移):整体往右移,空位补0,溢出去掉。
3.4.7:三元运算符:例如:A?B:C
A:一定是一个条件语句
B:A为真结果为B
C:A为假结果为C
int a=3;
int b=a>2? a++/a--/++a:8;
a=4;b=3 / a=2 b=4 /a=4 b=4
转换if else语句:if(a>2){
b=a++/a--/}
else{
b=8}
A:一定是一个条件语句
B:A为真结果为B
C:A为假结果为C
int a=3;
int b=a>2? a++/a--/++a:8;
a=4;b=3 / a=2 b=4 /a=4 b=4
转换if else语句:if(a>2){
b=a++/a--/}
else{
b=8}
Java中的表达式就是使用运算符连接起来的。符合Java规则的是指运算符的优先级决定了表达式中运算执行的销售数据。通常优先级由高到低的顺序次增量和减量运算。算术运算比较运算逻辑运算赋值运算。如果两个运算有相同的优先级,那么左边的表达式要比右边的表达式。先被处理表3.9显示了在Java中众多运算符特定的优先级。
3.5:数据类型转换:自动类型转换:一定不会丢失数据(即低精度数据类型向高精度数据类型转换 例如:byte型转换为short型,系统会自动进行转换)
强制类型转换:有可能会丢失数据(即高精度数据类型向低精度数据类型转换 例如:short型转换位byte型)
数据类型排列顺序:byte<short<int<long<float<double
强制类型转换:有可能会丢失数据(即高精度数据类型向低精度数据类型转换 例如:short型转换位byte型)
数据类型排列顺序:byte<short<int<long<float<double
隐式换也要遵循一定的规则来解决。在什么情况下将哪种类型的数据转换成另一种类型的数据表。表3.10列出了各种数据类型隐式转换的一般规则。
当把高精度的变量的值赋给低精度的变量时,必须使用显式类型转换运算。
3.6:代码注释与编码规范
单行注释
//....(注释内容)
多行注释
/*
....
注释内容
*/
文档注释
/** */
单行注释
//....(注释内容)
多行注释
/*
....
注释内容
*/
文档注释
/** */
第4章:流程控制
4.1:复合语句:女生语言及其他语言相同。Java语言的复合语句是以整个块区为单位的语句,所以又称块语句。复合语句由开括号。到闭括号结束。在前面的学习中,我们已经接触到了这种复合语句。例如,在定义一个类或方法时,类体是由花括号作为开始与结束的标记方法体也同样是以花括号作为标记。复合语句中的每个语句都是从上到下执行复合语句以整个块为单位,没有能够用在任何一个单独语句可以使用的。地方,并且在复合语句中还可以嵌套复合语句。
4.2:条件语句
4.2.1:if条件语句:
if...else语句:if(条件表达式)
{
语句序列2
}
else
{
语句序列3
}
语句4
{
语句序列2
}
else
{
语句序列3
}
语句4
if语句:
if...else if语句:
4.2.2:switch多分支语句:
4.3:循环语句
4.3.1:while循环语句
4.3.2:do...whie循环语句
4.3.3:for循环语句
4.4:循环控制
4.4.1:break语句:跳出当前循环
4.4.2:contiune语句:跳过本次循环
第5章:数组
5.1:数组概述:具有相同类型的一组数据的集合,数组简单的认为是很多格子。
5.2:一维数组
5.2.1:创建一维数组:点
1.如何去定义数组:上面先括号+数组名比较常用
2 分配内存并进行初始化
5.2.2:初始化一维数组
5.2.3:使用一维数组
5.3:二维数组
5.3.1:创建二维数组:面
1声明数组
2.分配内存
5.3.2:初始化二维数组
5.3.3:使用二维数组
5.4:数组的基本操作
5.4.1:遍历数组:遍历数组中的每个元素
5.4.2:填充替换数组元素:数组中的元素定义完成后,可通过Arrays类的静态方法fill()对数组中元素进行替换
Arrays.fill(数组名,值);
Arrays.fill(数组名,值);
import java.util.Arrays;
public class Fivetwo {
public static void main(String[] args) {
// TODO Auto-generated method stub
int arr[] =new int[5];//创建int数组
Arrays.fill(arr, 9);//使用同一个值进行填充,最后输出为9
for(int i=0;i<arr.length;i++) {
System.out.println("第"+i+"个元素是:"+arr[i]);//将元素输出
}
}
}//例题5.5
public class Fivetwo {
public static void main(String[] args) {
// TODO Auto-generated method stub
int arr[] =new int[5];//创建int数组
Arrays.fill(arr, 9);//使用同一个值进行填充,最后输出为9
for(int i=0;i<arr.length;i++) {
System.out.println("第"+i+"个元素是:"+arr[i]);//将元素输出
}
}
}//例题5.5
替换数组的部分元素(前索引值改后索引值不改)
Arrays.fill(数组名,前索引,后索引,值);前索引和后索引的值
Arrays.fill(数组名,前索引,后索引,值);前索引和后索引的值
5.4.3:对数组进行排序:Arrays.soft(数组名)
5.4.4:复制数组:(空位补0,溢出去掉)
新数组名= Arrays.copyOf(旧的数组名,新数组长度);多种重载形式,类型多样
新数组名= Arrays.copyOf(旧的数组名,新数组长度);多种重载形式,类型多样
5.4.5:查询数组:(先排序后查询)
索引=Arrays.binarySearch(数组名,元素);
索引=Arrays.binarySearch(数组名,元素);
5.5:数组排序算法
5.5.1:冒泡排序:它排序数组元素的过程总是在将小的数往上放,较大的竖往后放类似于水中气泡往上升的动作,所以称为冒泡排序。
5.5.2:直接选择排序:选择排序也叫直接排序,它的排序速度比冒泡排序要快一些。
5.5.3:反转排序:就是以相反的排序,把原有的数组内存重新排序。反转排序的基本思想比较简单,把数组的最后1个元素和第1个元素替换,倒数第2个元素与第2个元素替换,以此类推。
第6章:类和对象
6.1:面对对象概述
6.1.1:对象:对象是事物存在的实体
6.1.2:类:同一类事物的统称,以方法的形式定义
6.1.3:封装:封装是面向对象编程的核心思想,简单点说就是,我把某些东西封装起来,这些关键的核心的东西不能给你看,但是我可以提供给你一些简单使用的方法。
就说现在最最常用的手机,人人都会用,打电话、发短信、玩游戏、刷视频等等,但你知道手机怎么实现这些功能的吗??不知道吧,我们会用就可以了,怎么实现的对我们来说不重要。那这就很类似封装的理念了。
封装其实是对外隐藏复杂细节,提供简单易用的接口,便于外界调用,从而提高系统的可扩展性、可维护性。在Java中这种隐藏或公开是通过权限修饰符来实现的。
采用封装保证内部结构完整性
就说现在最最常用的手机,人人都会用,打电话、发短信、玩游戏、刷视频等等,但你知道手机怎么实现这些功能的吗??不知道吧,我们会用就可以了,怎么实现的对我们来说不重要。那这就很类似封装的理念了。
封装其实是对外隐藏复杂细节,提供简单易用的接口,便于外界调用,从而提高系统的可扩展性、可维护性。在Java中这种隐藏或公开是通过权限修饰符来实现的。
采用封装保证内部结构完整性
6.1.4:继承:类与类之间同样具有关系,称为关联。继承就是关联的一种。
例如:水果(父类)——香蕉,苹果,橘子......——苹果:脆的,粉的(子类)....
父类和子类存在层次关系
例如:水果(父类)——香蕉,苹果,橘子......——苹果:脆的,粉的(子类)....
父类和子类存在层次关系
6.1.5:多态:多个形态
6.2:类
6.2.1:成员变量:静态属性和动态属性
直接写在类里的叫成员变量
直接写在类里的叫成员变量
6.2.2:成员方法:框住局部变量
6.2.3:权限修饰符:控制着类和类的成员变量以及成员方法的访问,具体如表所示
6.2.4:局部变量:在方法被执行时创建
6.2.5:局部变量的有效范围:从变量的开始到变量的结束
6.2.6:this关键字:表示当前类的对象
//静态属性————成员变量去写
public class Bird {//静态属性
//静态属性————成员变量去写
private String name;//名字 //default默认的意思
private String wing;//翅膀
private String mouth;//嘴
private String head;//头
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;//指这个类bird
}
public String getWing() {
return wing;
}
public void setWing(String wing) {
this.wing = wing;
}
public String getMouth() {
return mouth;
}
public void setMouth(String mouth) {
this.mouth = mouth;
}
public String getHead() {
return head;
}
public void setHead(String head) {
this.head = head;
}
private String name;//名字 //default默认的意思
private String wing;//翅膀
private String mouth;//嘴
private String head;//头
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;//指这个类bird
}
public String getWing() {
return wing;
}
public void setWing(String wing) {
this.wing = wing;
}
public String getMouth() {
return mouth;
}
public void setMouth(String mouth) {
this.mouth = mouth;
}
public String getHead() {
return head;
}
public void setHead(String head) {
this.head = head;
}
//静态属性————成员变量去写
public class Bird {//静态属性
//静态属性————成员变量去写
private String name;//名字 //default默认的意思
private String wing;//翅膀
private String mouth;//嘴
private String head;//头
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;//指这个类bird
}
public String getWing() {
return wing;
}
public void setWing(String wing) {
this.wing = wing;
}
public String getMouth() {
return mouth;
}
public void setMouth(String mouth) {
this.mouth = mouth;
}
public String getHead() {
return head;
}
public void setHead(String head) {
this.head = head;
}
private String name;//名字 //default默认的意思
private String wing;//翅膀
private String mouth;//嘴
private String head;//头
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;//指这个类bird
}
public String getWing() {
return wing;
}
public void setWing(String wing) {
this.wing = wing;
}
public String getMouth() {
return mouth;
}
public void setMouth(String mouth) {
this.mouth = mouth;
}
public String getHead() {
return head;
}
public void setHead(String head) {
this.head = head;
}
6.3:类的构造方法:产生对象但信息不全面(需要传入参数)
6.4:静态变量和静态方法:同一个类的不同实例对象,可以共用同一静态变量。
6.5:类的主方法:主方法是类的入口点,它定义了程序从何处开始。
6.6:对象
6.6.1:对象的创建:使用new操作符调用构造方法就可以创建一个对象
6.6.2:访问对象的属性和范围:
6.6.3:对象的引用:在项目中创建TransferProperty类,在该类中说明对象是如何调用类成员的。
6.6.4:对象的销毁:Java有一套完整的垃圾回收机制
第7章:继承、抽象类、多态和接口
7.1:类的继承:Java语言每一个子类只能继承一个父类:简称单继承。
子类——父类——祖父类
继承:extends
父类:和平常类写法一样
public class 父类类名{
}
子类:
public class子类类名 extends 父类类名{
}
子类继承父类后,调用后同时会进行子类和父类打印
子类——父类——祖父类
继承:extends
父类:和平常类写法一样
public class 父类类名{
}
子类:
public class子类类名 extends 父类类名{
}
子类继承父类后,调用后同时会进行子类和父类打印
7.2:Object类:所有的类的父类
toString方法重写
7.3:对象类型的转换
7.3.1:向上转型:将子类对象(等号右边)向父类引用(等号左边)
自动类型转换
自动类型转换
7.3.2:向下转型":将父类对象向子类引用
需要进行强制类型转换
需要进行强制类型转换
7.4:使用instanceof关键字判断对象类型:对象名+instanceof+类名(判断对象是否属于这个类或者是他的子类)
7.5:方法的重载:方法名相同,参数不同
7.6:final关键字:不可被修改(常量)
final修饰方法——不可以被重写
final修饰方法——不可以被继承
final修饰方法——不可以被重写
final修饰方法——不可以被继承
7.6.1:final变量
7.6.2:final方法
7.6.3:final方法
7.7:多态:同一方法或同一个地方出现不同的形态就叫多态
7.8:抽象类与接口
7.8.1:抽象类:抽象方法:修饰符 abstract 返回数 方法名();有抽象方法的类一定是抽象类
修饰符 abstract class 类名{
}
将抽象方法写入普通类中会报错
有以下两种方法改变
1.将abstract移除加上方法体
2.将普通类改成抽象类
修饰符 abstract class 类名{
}
将抽象方法写入普通类中会报错
有以下两种方法改变
1.将abstract移除加上方法体
2.将普通类改成抽象类
7.8.2:接口:Java语言每个类可以实现多个接口
修饰符 interface 接口名{
}
实现:inplements
修饰符 class 类名 implements 接口1, 接口2....{
}
就假设接口有三个方法,但是普通类只写了两个情况该怎么解决:
1.将普通类改成抽象类
2.将没写的方法重写
对象名+instanceof+接口名(判断对象是否属于这个接口的实现类)
修饰符 interface 接口名{
}
实现:inplements
修饰符 class 类名 implements 接口1, 接口2....{
}
就假设接口有三个方法,但是普通类只写了两个情况该怎么解决:
1.将普通类改成抽象类
2.将没写的方法重写
对象名+instanceof+接口名(判断对象是否属于这个接口的实现类)
第8章:包和内部类
8.1:Java类包:
8.1.1:类名冲突:有包的存在就有类名存在,类名定义多种,但功能不同
8.1.2:完整的类路径:1.双击打开工作区域是不一样的
C:\Users\隐入尘烟\eclipse-workspace
2.复制空间寻找包内内容
3.创建项目
C:\Users\隐入尘烟\eclipse-workspace
2.复制空间寻找包内内容
3.创建项目
8.1.3:创建包:在项目里创建包
8.1.4:导入包:1.使用import导入包
2.使用import导入静态成员
2.使用import导入静态成员
8.2:内部类
8.2.1:成员内部类:
8.2.2:匿名内部类:匿名类是只在创建对象时才会编写类体的一种写法,匿名类特点:现用现写
第9章:异常处理
9.1:异常概述:异常可能由程序员没有想到的情况超出范围内
9.2:异常的抛出与捕获
9.2.1:抛出异常
9.2.2:捕捉异常:try{
//代码块
}catch (Exceptiontype1){
catch (xceptiontype2)
}
....
finally{
//程序代码块}
//代码块
}catch (Exceptiontype1){
catch (xceptiontype2)
}
....
finally{
//程序代码块}
9.3:Java常见的异常类:红色为常见异常
9.4:自定义异常:定义1个exception类继承,这就是自定义异常
括号里是传入参数,super是隐藏方法,作用是调用父类的构造方法打印出错误信息
括号里是传入参数,super是隐藏方法,作用是调用父类的构造方法打印出错误信息
9.5:在方法中抛出异常:错误:1.黄色感叹号:是警告,对于Java代码没有太大影响;2.Exception异常处理,要处理 3.报错,错误是无法解决的
9.5.1:使用throws关键字抛出异常
9.5.2:使用throw关键字抛出异常
public class Captor {
static int quotient(int x,int y)throwMyException{ //定义方法抛出异常
if(y<0) {
throw new MyException("除数不能是负数");//判断参数是否小于0
}
return x/y; //返回值
}
public static void main(String args[]){
try {
int result = quotient(3,-1);
}catch (MyException e) {
System.out.println(e.getMessage());
}catch (ArithmeticException e) {
System.out.println("除数不能为0");
}catch (Exception e) {
System.out.println("程序发生了其他的异常");
}
}
}//例题9.8
public class Captor {
static int quotient(int x,int y)throwMyException{ //定义方法抛出异常
if(y<0) {
throw new MyException("除数不能是负数");//判断参数是否小于0
}
return x/y; //返回值
}
public static void main(String args[]){
try {
int result = quotient(3,-1);
}catch (MyException e) {
System.out.println(e.getMessage());
}catch (ArithmeticException e) {
System.out.println("除数不能为0");
}catch (Exception e) {
System.out.println("程序发生了其他的异常");
}
}
}//例题9.8
9.6:运行时异常:各类异常
9.7:异常的使用原则:
第10章:字符串
10.1:String类
10.1.1:声明字符串:声明一个字符串就是创建一个字符串对象。声明字符串:包含在双引号之内
10.1.2:创建字符串:字符串和字符类型的数组有相似之处
char [] ch = {'g','o','o','d'};
str=new String(ch);
等同于
String s =new String("good"); //底层实现方法
char [] ch = {'g','o','o','d'};
str=new String(ch);
等同于
String s =new String("good"); //底层实现方法
10.2:连接字符串
10.2.1:连接多个字符串:使用+连接运算符可实现连接多个字符串的功能
10.2.2:连接其他数据类型
10.3:获取字符串信息
10.3.1:获取字符串长度:在数组中,用.length,获取长度
10.3.2:字符串查找:第一次出现和最后一次出现的长度
indexOf和last indexOf
indexOf和last indexOf
10.3.3:获取指定索引字符的位置:str.charAt
10.4:字符串操作
10.4.1:获取子字符串:str.substring(int beginindex)
10.4.2:去除空格:str.trim():去除首尾空格,结合替换 去除
10.4.3:字符串替换:str.replace
10.4.4:判断字符串的开始与结尾:startsWith()和endWith()
10.4.5:判断字符串是否相等:equals:
equalsIgnoreCase :忽略大小写判断是否相同
equalsIgnoreCase :忽略大小写判断是否相同
10.4.6:按字典顺序比较两个字符串:str.compareTo
10.4.7:字母大小写转换:str.toLowerCase()
str.toUpperCase()
str.toUpperCase()
10.4.8:字符串分割:split
10.5:格式化字符串str.format(String):指定格式字符串
str.format(Local):指定语言环境
str.format(Local):指定语言环境
10.5.1:日期和时间字符串格式化:
子主题
10.6:使用正则表达式
10.7:字符串生成器:StringBuild类
第11章:常用类库
11.1:包装类:把基本数据类型转换为对象进行处理,java中的包装类及其对应的基本数据类型如表11.1所示
11.1.1:Interger类:integer类在对象中包装了一个基本数据类型int的值,该类的对象包含了一个int类型的字段。此外,该类提供了多个方法,能在int类型和String类型之间互相转换,同时还提供了其他一些处理int类型时非常有用的常量和方法,integer类的常用方法如表11.2所示
11.1.2:Double类:double类在对象中包装一个基本类型为double的值,每个double类的对象都包含一个double类型的字段。此外,该类还提供多个方法,可以将double类型转换为String类型,将String类型转换为double类型,也提供其他一些处理double类型时有用的常量方法。double类的常用方法如表11.3所示
11.1.3:Boolean类:Boolean类将基本类型为boolean的值包装在一个对象中。一个Boolean类型的对象只包含一个类型为boolean的字段,此外,此类还为Boolean类和Stringl类型的相互转换提供了许多方法。并提供处理boolean类型时非常有用的其他一些常量方法。boolean类的常用方法如表11.4所示
11.1.4:Character类:Characte在对象中包装一个基本类型为char的值,该类提供了多种方法以确定字符的类别(小写字母数字等),并可以很方便的将字符从大写转换为小写,反之亦然。Characte提供了很多方法来完成对字符的操作。常用的方法,如表11.5所示。
11.1.5:Number类:前面介绍了Java 中的包装类,对于数值型的包装类,它们有一个共同的父类——number类。该类是一个抽象类,它是Byte Integer Short Long Float和Double类的父类,其子类必须提供j将表示的数值转换为byte, Int short,long float和double的方法。例如double value()方法返回双精度浮点值float value()方法返回单精度浮点值。这些方法如表11.6所示。
11.2:数字处理
11.2.1:数字格式化:DecimalFormat类
数字化格式化在解决实际问题时应用非常普遍,如表示某超市的商品价格需要保留两位有效数字。数字格式化操作主要针对的是浮点型数据,包括double型和float型数据。在Java中使用Java.test Decimal format格式化数字。本节将着重讲解Decimal format类在Java中。没有格式化的数据将遵循以下原则:
1.如果数据绝对值大于0.001并且小于10000000,使以常规小数形式表示
2.如果数据绝对值小于0.001并且小于10000000,使用科学计数法表示
由于上述输出格式不能满足解决实际问题的要求,通常将结果格式化为指定形式后输出。在Java中可以使用decimal format类进行格式化操作。decimal format类是number format的一个子类,用于格式化十进制数字。它也可以将一些数字格式化为整数,浮点数,百分数等。通过使用该类可以为要输出的数字加上单位或控制数字的。精度一般情况下,可以在实例化decimal format对象时传递数字格式,也可以通过decimal format类中的apply Parttner()方法来实现数字格式化。当格式化数字时。可在的decimal format类中使用一些特殊字符构成一个格式化模板,使数字按照一定的殊字符规则进行匹配。表11.7列举了格式化模板中的特殊字符及其所代表的含义。
数字化格式化在解决实际问题时应用非常普遍,如表示某超市的商品价格需要保留两位有效数字。数字格式化操作主要针对的是浮点型数据,包括double型和float型数据。在Java中使用Java.test Decimal format格式化数字。本节将着重讲解Decimal format类在Java中。没有格式化的数据将遵循以下原则:
1.如果数据绝对值大于0.001并且小于10000000,使以常规小数形式表示
2.如果数据绝对值小于0.001并且小于10000000,使用科学计数法表示
由于上述输出格式不能满足解决实际问题的要求,通常将结果格式化为指定形式后输出。在Java中可以使用decimal format类进行格式化操作。decimal format类是number format的一个子类,用于格式化十进制数字。它也可以将一些数字格式化为整数,浮点数,百分数等。通过使用该类可以为要输出的数字加上单位或控制数字的。精度一般情况下,可以在实例化decimal format对象时传递数字格式,也可以通过decimal format类中的apply Parttner()方法来实现数字格式化。当格式化数字时。可在的decimal format类中使用一些特殊字符构成一个格式化模板,使数字按照一定的殊字符规则进行匹配。表11.7列举了格式化模板中的特殊字符及其所代表的含义。
11.2.2:Math类:math类提供了众多数学函数方法,主要包括三角函数方法指数函数方法取整函数方法取最大值最小值以及平均值函数方法。这些方法都被定义为static形式,所以在程序应用中比较简便,可以使用如下形式调用。
1三角函数
2.指数函数
3.取整函数
4.取最大值、最小值、绝对值
11.2.3:Random类:random类是GDP中随机数生成器类,可以通过实例化一个random对象创建一个随机数生成器,语法如下。
11.2.4:BigInterger类:big integer类的数字范围较integer类的数字范围要大得多。前文介绍过,intent类是int的包装类,int的最大值为2的31次方减1,如果要计算更大的数字,使用intent类就无法实现了。所以Java中提供了 big integer类来处理更大的数字。big integral支持任意精度的整数,也就是说,在运算中big integer类可以准确的表示任何大小的整数值而不会丢失信息。在big integer类中封装了多种操作。除了基本的加减乘除,这些操作还提供了绝对值相反数最大公约数以及判断是否为质数等操作。使用big intent类可以实例化一个对象,并自动调用相应的构造函数。 big integer具有更多构造函数,但是最直接的一种方式是参数以字符串形式代表要处理的数字。
11.2.5:BigDecimal类:big December类和big integer 类都能实现大数字的运算。不同的是,big December类加入了小数的概念,一般的float型和double型数据只可以用来做科学计算或者工程计算,但由于在商业计算中要求数字精度比较高,所以要用到big decimal类。bigdecimal支持任何精度的定点数,可以用它来精确计算货币值。在big decimal类中常用的两个构造方法,如表11.8所示。
11.3:System类::system 类是jdk中提供的系统类,该类用final修饰的,所以不允许被继承。system类提供了很多系统层面的操作方法,并且这些方法全部都是静态的。system类提供的较常用方法,如表11点11所示。本节重点讲解利用system 类控制台输出和计时这两个操作。
11.3.1:控制台输出字符:system 类提供了标准输入标准输出的和错误输出流。也就是说,system类提供了三个静态对象,in out和err。本书中的代码多次使用了这些对象。最常见的是out对象。在控制台输出字符串输出的字符有两种:
1.会自动换行
2.不会自动换行
print方法与println方法输出的对比效果如表11.12所示。
1.会自动换行
2.不会自动换行
print方法与println方法输出的对比效果如表11.12所示。
113.2:计时
11.4:Scanner类:与c语言不同,java从控制台中读取用户输入的值,用到的不是一行可以直接使用的代码,而是由一个叫Scanner的类来实现的。Scanner类提供了如表11.13所示的几种常用的方法。
11.5:日期时间类
11.5.1:Date类:date类用于表示日期时间,使用该类表示时间需要使用其构造对象,其构造方法及其说明如表11.14所示。
上述代码System类的currentTimeMi拉力赛()方法主要用来获取当前系统时间距标准时间的毫秒数。另外,这里需要注意的是,创建Date对象时使用的long型整数,而不是double型,这主要是因为double类型可能会损失精度。date类的常用方法及其说明如表11.15所示。
上述代码System类的currentTimeMi拉力赛()方法主要用来获取当前系统时间距标准时间的毫秒数。另外,这里需要注意的是,创建Date对象时使用的long型整数,而不是double型,这主要是因为double类型可能会损失精度。date类的常用方法及其说明如表11.15所示。
11.5.2:日期时间格式化:使用GetDateInstance()方法获取的是所在国家或地区的标准日期格式。datefomart类的常用方法及其说明如表11.16所示
11.5.3:Canlendar类:Calendar类提供的常用字段及其说明如表11.19所示
11.6:Runtime类:Runtime类的常用方法如表11.21所示
11.6.1:执行本地命令:exec()方法会返回一个Proocess对象。就是进程类,process类的常用方法如表11.22所示
11.6.2:查看内存:Runtime类可以通过freememory方法查看当前java虚拟机可用内存的剩余量
第12章:集合类
12.1:集合类概述:java.util包中提供了一些集合类,这些集合类又被称为容器,提到容器不难想到数组。集合类与数组的不同之处在于:数组长度是固定的,集合的长度是可变的。数组用来存放基本数据类型,集合用来存放对象引用。常用的集合有List集合、Set集合和Map集合,其中List集合继承了Collection接口,各接口还提供了不同的实现类。上述集合类的继承关系如图12.1所示
12.2:Collection接口:Collection接口是层次结构中的根接口,构成Collection的单位称为元素。Collection接口通常不也能直接使用,但该接口提供了添加元素、删除元素、管理数据的方法。由于List接口与Set接口都继承了Collection接口,因此这些方法对List集合与Set集合是通用的。Collection接口的常用方法如表12.1所示。
12.3:List集合
12.3.1:List接口:List集合包括List接口继承了Collection接口,因此包含Collection接口中的所有方法。此外List接口还定义了以下两个非常重要的方法:get(int index):获得指定索引位置的元素
set(int index,Object obj): 将集合中指定索引的位置的对象修改为指定的对象。
set(int index,Object obj): 将集合中指定索引的位置的对象修改为指定的对象。
12.3.2:List接口的实现类:ArrayList类与LinkedList类。
12.4:Set集合:Set集合中的对象不按特定的方式排序,只是简单地把对象加入集合中,但Set集合中不能包含重复对象。Set集合由Set接口的实现类组成。Set接口继承了collection接口,因此包含Collection接口的所有方法。
1.HashSet类实现Set接口,由哈希表(实际上是一个HashMap实例)支持。它不保证Set集合的迭代顺序,特别是它不保证该顺序恒久不变。此类允许使用null元素。
TreeSet类不仅实现了Set接口,还实现了java.util.SortedSet接口,因此TreeSet类实现的Set集合在遍历集合时按照自然顺序递增排序,也可以按照指定比较器递增排序,即可以通过比较器对用TreeSet类实现的Set集合中的对象进行排序。TreeSet类的新增方法如表12.2所示
12.5:map集合
Map集合没有继承Collection接口,其提供的是key到value的映射。Map集合中不能包含相同的key,每个key只能映射一个value。key还决定了存储对象在映射中的存储位置,但不是由key对象本身决定的,而是通过一种“散列技术”进行处理,产生一个散列码的整数值。散列码通常用作一个偏移量,该偏移量对应分配给影射的内存区域的起始位置,从而确定存储对象在映射中的存储位置。Map集合包括Map接口以及Map接口所有的实现类。
Map集合没有继承Collection接口,其提供的是key到value的映射。Map集合中不能包含相同的key,每个key只能映射一个value。key还决定了存储对象在映射中的存储位置,但不是由key对象本身决定的,而是通过一种“散列技术”进行处理,产生一个散列码的整数值。散列码通常用作一个偏移量,该偏移量对应分配给影射的内存区域的起始位置,从而确定存储对象在映射中的存储位置。Map集合包括Map接口以及Map接口所有的实现类。
12.5.1:Map接口
Map接口提供了将key映射到值的对象。一个映射不能包含重复的key,每个key最多只能映射到一个值。除集合的常用方法外,Map接口还提供了如表12.3所所示的特殊方法。
Map接口提供了将key映射到值的对象。一个映射不能包含重复的key,每个key最多只能映射到一个值。除集合的常用方法外,Map接口还提供了如表12.3所所示的特殊方法。
12.5.2:Map接口的实现类
Map接口常用的实现类有HashMap类和TreeMap类
1.HashMap类是基于哈希表的Map接口的实现,此实现提供所有可选的映射操作。并允许使用null值和null件,但必须保证键的唯一性。HashMap类通过哈希表对其内部的映射关系进行快速查找。此类不保证映射的顺序,但特别是它不保证该顺序恒久不变。
2. Tree map类不仅实现了map接口,还实现了Java.utill.Sorted map接口,因此集合中的映射关系具有一定的顺序。但在添加、删除和定位映射关系时,Tree map类比Hashmap类性能稍差。由于Tree map类实现了Map接口集合中的映射关系,是根据键对象按照一定的顺序排列的,因此不允许键对象是null。
Map接口常用的实现类有HashMap类和TreeMap类
1.HashMap类是基于哈希表的Map接口的实现,此实现提供所有可选的映射操作。并允许使用null值和null件,但必须保证键的唯一性。HashMap类通过哈希表对其内部的映射关系进行快速查找。此类不保证映射的顺序,但特别是它不保证该顺序恒久不变。
2. Tree map类不仅实现了map接口,还实现了Java.utill.Sorted map接口,因此集合中的映射关系具有一定的顺序。但在添加、删除和定位映射关系时,Tree map类比Hashmap类性能稍差。由于Tree map类实现了Map接口集合中的映射关系,是根据键对象按照一定的顺序排列的,因此不允许键对象是null。
第13章:枚举类型与泛型
13.1:枚举类型:枚举类型:使用枚举类型,可以取代前面学习过的定义常量的方式,代前面学习过的定义常量的方式,同时枚举类型还赋予程序在编译时进行检查的功能。
13.2:泛型
泛型实质上就是使程序员定义安全的类型。在没有出现泛型之前,Java也提供了对object类型的引用“任意化” 操作,这种“任意化”操作就是对object类型引用进行向下转型及向下转型操作,但某些强制类型转换的错误也许不会被编译器捕捉,而在运行后出现异常,可见强制类型转换存在安全隐患,所以在此提供了泛型机制。
泛型实质上就是使程序员定义安全的类型。在没有出现泛型之前,Java也提供了对object类型的引用“任意化” 操作,这种“任意化”操作就是对object类型引用进行向下转型及向下转型操作,但某些强制类型转换的错误也许不会被编译器捕捉,而在运行后出现异常,可见强制类型转换存在安全隐患,所以在此提供了泛型机制。
收藏
收藏
0 条评论
下一页