Java从入门到精通
2023-05-30 14:53:48 2 举报
AI智能生成
Java课本基本知识
作者其他创作
大纲/内容
初识Java
Java简介
什么是Java语言
java是1995年由sun公司推出的一门极富创造力的 面向对象的程序设计语言,它是由有“Java之父”之称的Sun研究院院长詹姆斯 戈士林博士亲手设计而成的,Java的前身名为OAK,1995年改名为Java并正式发布
Java的应用领域
第 1 个领域、桌面应用系统开发
第 2 个领域、嵌入式系统开发
第 3 个领域、电子商务系统开发
第 4 个领域、企业级应用开发
第 5 个领域、交互式系统开发
第 6 个领域、多媒体系统开发
第 7 个领域、分布式系统开发
第 8 个领域、Web应用系统开发
第9个领域、移动端应用开发
Java的版本
JavaSE
全称为(Java Platform,Standard Edition),是Java的标准版,主要用于桌面应用程序开发
JavaEE
全称为(Java Platform,Enterprise Edition),是Java的企业版,主要用于开发服务器应用程序
Java语言的特性
简单
Java语言继承了C++语言的优点,去掉了C++中学习起来比较难的多继承、指针等概念,所以Java语言学习起来更简单,使用起来也更方便。
面向对象
面向对象是Java语言的基础,也是Java语言的重要特性,它本身就是一种纯面向对象的程序设计语言。
分布类
Java设计成支持在网络上应用,它是分布式语言。所以只要用Java编写了一个程序,就可以到处应用。可以节省大量人力物力。
可移植性
Java程序具有与体系结构无关的特性,可以非常方便的移植到网络是的不同计算机中,同时,Java的类库也实现了针对不同平台的接口,使得这些类库也可以被移植
解释类
运行Java程序需要解释器,任何移植了Java解释器的计算机或其他设备都可以用Java字节码进行解释。
安全性
Java通常被用在网络环境中,为此,Java提供了一个安全机制以防恶意代码的攻击。除了Java语言具有的许多安全特性以外,Java对通过网络下载的类具有一个安全防范机制
健壮性
Java的强类型机制、异常处理、垃圾的自动收集等是Java程序健壮性的重要保证。
多线程
Java语言支持多线程机制,能够使应用在同一时间并执行多项任务而且相应的同步机制可以保证不同线程能够正确的共享数据。使用多线程可以带来更好的交互能力和实时行为
高性能
Java编译后的字节码是在解释器中运行的,所有它的速度比其他的应用程序提高了很多
动态
Java在很多地方比C和C++更能适应环境,可以动态条癌症库中方法和增加变量
搭建Java环境
请在http://jdk.java,net网址下载
熟悉Eclipse开发工具
熟悉Eclipse
如果不会请看后面网址
https://blog.csdn.net/hj920885623/article/details/129181187?spm=1001.2014.3001.5501
使用Eclipse
https://blog.csdn.net/hj920885623/article/details/129181187?spm=1001.2014.3001.5501
程序调试
https://blog.csdn.net/hj920885623/article/details/129181187?spm=1001.2014.3001.5501
Java语言基础
Java主类结构
Java语言是面向对象的程序设计语言
输出结果为:你好 Java
基本数据类型
分为四大类
整数类型
浮点类型
字符类型
布尔类型
变量与常量
标识符
用来标识类名,变量名,方法名,数组名,文件名
标识符是由字母,下划线,美元符号,数字组成
标识符是由字母,下划线,美元符号,数字组成
条件是:1.第一个字符不能是数字
2.不能是Java的关键字
2.不能是Java的关键字
关键字
关键字又称保留字,是Java语言中已经被赋予特定意义的一些单词,不可以把这些单词作为标识符来使用。
常量
在程序运行过程中一直不会改变的量,通常也被称为“final变量”。常量在整个程序中只能被赋值一次。
变量
可多次赋值,分为“成员变量”和“局部变量”,局部变量优先级高于成员变量
运算符
赋值运算符
将右方的操作数所含的值赋给左方的操作数
算术运算符
+(加)
-(减)
*(乘)
/(除)
%(求余)
自增自减运算符
符号在前先运算后使用,符号在后先使用后运算
如:a++,--a
比较运算符
用于程序中的变量之间、变量和自变量之间以及其他类型的信息之间的比较
>
<
=
>=
<=
!=
逻辑运算符
“&&”两者都为真结果才是真
“||”只要有一者为真结果就是真
“!”非真即假非假即真
位运算符
“&”(与)两者都为1,结果才是1
“|”(或)只要有一者为1,结果就是
“~”(取反)0变1,1变0
“^”(异或)两者相同即为0,不同为1
移位操作
<<(左移):空位补零,溢出去掉
>>(右移):正数补零,负数补1,溢出去掉
>>>(无符号运算符):整体右移,空位补0,溢出去掉
三元运算符
运算规则:若条件式的值为true,则整个表达式取值1,否则取值2.
数据类型转换
1.隐式类型转换(即自动类型转换):作用是一定不会丢失数据
2.显式类型转换(又称强制类型转换):作用是有可能会丢失数据
代码注释与编码规范
“//”为单行注释,从符号开始到换行的所有内容都将被注释
“/**/”为多行注释,符号“/*”和“*/”之间的所有内容都将被注释
流程控制
复合语句
复合语句是以整个块区为单位的语句,所以又称块语句
复合语句为局部变量创建了一个作用域,该作用域为程序的一部分,在该作用域中某个变量被创造并被使用,如果在某个变量的作用域外被使用则会发生错误
条件语句
if语句效果为“如果满足某条件就执行某段语句”
if...eles语句效果为:如果满足某条件,就执行某种处理,否则执行另一种处理
f...elseif语句效果为:如果满足某条件,就进行某种处理,否则如果满足另一条件则执行另一种处理
switch语句
计算表达式的值,如果与case后的常量值相同则执行该case语句后的若干个语句直到遇到break语句为止,此时,如果该case语句中没有break语句,将继续执行后面case中的语句,直到遇到break,如果没有一个常量的值与表达式的值相同,则执行default后的语句,default语句是可选的,如果不存在,且switch中的表达式的值不与任何case的常量值相同,switch将不做任何处理
循环语句
while循环语句
也叫条件判断语句,它的循环方式为利用一个条件来控制是否要继续反复执行这个语句
do...while循环语句
与while循环语句类似,区别是while先判断条件是否成立再执行循环,而do...while循环语句则先执行一次循环后,在判断条件是否成立,do...while循环语句至少会循环一次。
for循环语句
for循环可以用来重复执行某条语句,直到某个条件得到满足,for循环有两种语句,一种是传统的for语句,一种是foreach语句
foreach语句
它是for语句的特殊简化版本,不能完全取代for语句,但任何foreach都可以改写为for语句版本,它不是一个关键字
循环控制
break语句
break可以跳出当前循环,就近原则,哪个循环离它近它跳出哪个循环,不能越级跳出。
continue语句
是针对break语句的补充,作用并不是立即跳出当前循环而是跳过本次循环,回到循环的条件判断环节,重新开始判断
数组
数组的概念
数组是具有相同数据类型的一组数据的集合
一维数组
创建一维数组
数组的声明
数组元素的类型[ ] 数组名
数组元素的类型 数组名[ ]
初始化一维数组
int arr[ ] = new int[ ]{1,2,3,4,5,25}
int arr2[ ] ={34,23,12,6}
使用一维数组
package wudanyuan;
public class shuzu5_1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int day[]=new int[] {31,28,31,30,31,30,31,31,30,31,30,31};//创造并初始化一维数组
for(int i=0;i<day.length;i++) {//利用循环将信息输出
System.out.println((i+1)+"月有"+day[i]+"天");//输出
}
}
}
public class shuzu5_1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int day[]=new int[] {31,28,31,30,31,30,31,31,30,31,30,31};//创造并初始化一维数组
for(int i=0;i<day.length;i++) {//利用循环将信息输出
System.out.println((i+1)+"月有"+day[i]+"天");//输出
}
}
}
结果如下:
二维数组
创建二维数组
二维数组的声明
数组元素的类型[ ] [ ] 数组名
数组元素的类型 数组名[ ] [ ]
初始化二维数组
二维数组初始化与一维数组初始化类似,同样可以使用大括号完成
type arrayname [ ][ ] = {value1,value2,...valuen}
type = 数组数据类型
arrayname =数组名称,一个合法的标识符
value = 二维数组中各元素,都代表一个一维数组
使用二维数组
package wudanyuan;
public class shuzu5_2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int a[][]=new int[3][4];
for(int i = 0;i < a.length;i++) {
for(int j = 0;j < a[i].length;j++) {
System.out.print(a[i][j]);
}
System.out.println();
}
}
}
public class shuzu5_2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int a[][]=new int[3][4];
for(int i = 0;i < a.length;i++) {
for(int j = 0;j < a[i].length;j++) {
System.out.print(a[i][j]);
}
System.out.println();
}
}
}
结果如下:
数组的基本操作
遍历数组
遍历数组就是获取数组中的每个元素
package wudanyuan;
public class shuzu5_3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int b[][]=new int[][] {{1},{2,3},{4,5,6}};
for(int k = 0;k < b.length;k++) {
for(int c = 0;c < b[k].length;c++) {
System.out.print(b[k][c]);
}
System.out.println();
}
}
}
public class shuzu5_3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int b[][]=new int[][] {{1},{2,3},{4,5,6}};
for(int k = 0;k < b.length;k++) {
for(int c = 0;c < b[k].length;c++) {
System.out.print(b[k][c]);
}
System.out.println();
}
}
}
结果如下:
在遍历数组时使用foreach语句遍历二维数组会更加简便
package wudanyuan;
public class shuzu5_4 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int arr2[][]= {{4,3},{1,2}};
System.out.println("数组中的元素是:");
int i = 0;
for(int x[]:arr2) {
i++;
int j = 0;
for(int e:x) {
j++;
if(i==arr2.length&&j==x.length) {
System.out.print(e);
}else
System.out.print(e+"、");
}
}
}
}
public class shuzu5_4 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int arr2[][]= {{4,3},{1,2}};
System.out.println("数组中的元素是:");
int i = 0;
for(int x[]:arr2) {
i++;
int j = 0;
for(int e:x) {
j++;
if(i==arr2.length&&j==x.length) {
System.out.print(e);
}else
System.out.print(e+"、");
}
}
}
}
结果如下:
充填替换数组元素
替换数组元素
Arrays.fill(数组名,值)
替换数组部分元素:前改后不改
Arrays.fill(数组名,前索引,后索引,值)
对数组经行排序
通过Array类的静态方法sort()可以对数组进行排序
Array.sort(数组名)
复制数组
复制数组元素:空位补0,溢出去掉
新数组名 = Arrays.copyOf(旧数组名,新数组长度)
复制数组的部分元素:前在后不在
新数组名 = Arrays.copyOfRange(旧数组名,前索引,后索引)
查询数组
查询数组:先排序在查询
索引 = Arrays.binarySearch(数组名,元素)
查询数组:先排序在查询,前含后不含
索引 = Arrays.binarySearch(数组名,前索引,后索引,元素)
数组排序算法
冒泡排序:是最常用的数组排序算法之一,它排序数组元素的过程总是将小的数往前放,较大的往后放,类似水中冒泡往上升的动作,所以叫冒泡排序
比较相邻的元素,把较小的元素移动到数组前面,把较大的元素放到数组后面,这样较小的元素就像气泡一样从底部上升到顶部
直接选择排序:属于一种选择排序,排序速度要比冒泡排序快点,也是常用的排序,初学者应该掌握
将指定排序位置元素与其他数组元素对比,如果满足条件就交换元素值,直接排序并不是和冒泡排序一样交换相邻元素,而是把满足条件的元素与指定的排序位置元素交换
反转排序:以相反的顺序把原有数组的元素重新排序,也是经常用到的一种排序方法
将数组最后一个元素和第一个元素交换,倒数第二个元素和第二个元素交换,以此类推,直到把所有元素反转替换
类和对象
面向对象的概述
在现实生活中,任何事物都可以称作对象
静态
如:翅膀,名称,头,便是我们所说的静态部分
动态
如:吃东西,飞行
类
我们可以把类看成一个箱子,一种事物便是一类
如:鸟是鸟类,家禽是家禽类,人是人类。
一个事物不能是一类事物
如:一只鸟不能是鸟类
封装
把静态和动态放进类里面的这个动作就叫做封装,封装也是面向对象编程的核心思想,采用封装的思想保证了类内部数据的完整性
继承
类与类之间同样具有关系,这种关系被称为继承。
拿鸟举例:鸟类和大雁,鸟类里面包含大雁,大雁有的鸟类也有,而鸟类有的大雁不一定有,所以鸟类是大雁的父类,大雁是鸟类的子类
多态
拿鸟举例:在鸟类里有不同种类的鸟如大雁,布谷鸟,麻雀,老鹰,这种就是多态
类
成员变量
对象中的静态属性也就是成员变量
成员方法
对象中的动态属性也就是成员方法
权限修饰符
pubilc
pubilc是共有的,你在里面写的所有东西其他的类都能用,不管这个类和你有没有关系,他都能用你写在里面的东西
private
private是私有的,不管你和我有没有关系,就算你和我有关系,你也不能用我写在里面的东西
如果想要在私有的里面的东西有两种方法
getter
获取
setter
设置
protected
protected则是你和我有关系那你就可以查看我写的东西,你和我没关系则不能查看
局部变量
在成员方法中定义一个变量,这个变量就是局部变量
this关键字
当你的name=name,根据就近原则,你只是把参数name赋值给了参数本身,成员变量的值并没有发生改变,这时加上一个this,使this.name代表的是代码中的成员变量了, 而第二个name指的是参数
类的构造方法
在类中,除了成员方法还有一个特殊类型的方法——构造方法new便是构造方法,当你在代码中输入new电脑便会自动产生一个变量
静态变量和静态方法
static修饰的变量和方法称为静态变量和静态方法
类的主方法
主方法是类的入口点,它定义了程序从何处开始。住房阿飞提供了对程序流向的控制,Java编译器通过主方法来执行程序
对象
对象的创建
对象可以认为是在一类事物中抽象出某一个特例,可以通过这个特例来处理这个事物出现的问题每实例化一个对象就会调用一次构造方法
访问对象的属性和行为
用户使用new操作符创建了一个对象后,可以使用“对象.类成员”来获取对象的属性和行为
对象的引用
在Java中,一切都可以看作对象,但真正操作标识符实质上是一个引用
对象的销毁
每个对象都有生命周期,当对象的生命周期结束时,分配给该对象的内存地址需要被收回
继承、多态、抽象类与接口
类的继承
在Java中,子类继承父类需要使用一个关键字——extends,并且Java只支持单继承,一个子类只能有一个父类
父类 写法与普通类相同
public class 父类类名(){
}
}
子类
public class 子类类名 extends 父类类名(){
}
}
Object类
Object是比较特殊的类,它是所有类的父类
equals()
在Java语言中,有两种比较对象的方式,两者的区别为equals()方法比较的是两个对象的实际内容
getClass
它会返回对象执行Class实例然后使用此实例调用getName()方法可以取得类的名称
toString()
toString()的功能是将一个对象返回为字符串形式
对象类型的转换
向上转换(自动类型转换)
将子类类型的对象转换为父类类型的对象
Animal a = new Animal();
将子类对象赋值给父类引用
Animal a = new Dog();
将子类对象赋值给父类引用
Animal a = new Dog();
向下转型(强制类型转换)
与向上转型相反,是父类转子类
Dog a = (Dog)new Animal();
因为是强制类型转换所有向下转型是不安全的,有可能会丢失数据
使用instanceof关键字判断对象类型
instanceof前面是对象名,后面是类名,作用是判断前面的对象是否属于该类或其子类
instanceof前面是对象名,后面是接口名,作用是判断前面的对象是否属于该接口的实现
方法的重载
重载与重写不同但又十分相似
方法名相同 参数不同
重写必须要有继承关系才能使用,而重写只要在同一个类里就能使用
重写
子类重写父类的方法 (只有子类才能重写父类方法,必须要有继承关系)
返回参数相同 方法名相同 传入参数相同 只有方法体不同
final关键字
final变量
用final修饰的变量就不可以在改变该变量的值
final修饰变量——不可改变的量(常量)
final方法
final修饰方法——不能被重写
final类
final修饰类——不能被继承
多态
多态可以使程序具有良好的扩张性,可以对所有类对象经行通用的处理
拿图形类举例:图形里有正方形、圆形、三角形,这些都是图形类的子类,这就是图形类的多态
抽象类与接口
抽象类
使用 abstract 关键字定义的类称为抽象类,而被 abstract定义的方法称为抽象方法
抽象类
有抽象方法的类一定是抽象类
修饰符 abstract class 类名{ }
抽象方法
没有方法体,在修饰符后面加 abstract
修饰符 abstract 返回参数 方法名 (传入参数);
接口
接口是抽象类的延伸,可以看成是纯粹的抽象类,它与抽象类不同,它的代码里只会有抽象方法,换句话说:所有方法都是抽象方法才是接口
定义接口的语法如下:
修饰符 interface 接口名{ }
实现多个接口的语法如下:
修饰符 class 类名 implements 接口名1,接口名2,...{ }
包和内部类
Java类名
类名冲突
在Java中,我们可以使用class关键字来进行定义一个类,在程序被编译后就会产生一个.class文件。类的定义是规定类名不能重复的,如果程序内只定义了少量的类,那自然不用担心这个问题。只要保证同一类包的类不同名,就可以完美的避免同名类冲突的情况
完整的类路径
一个完整的类名需要包名和类名的组合,每个类都隶属于一个类包,
创建包
导入包
使用import关键字导入包
import 包名.子包名.*; //导入所有类
import 包名.子包名.类名; //导入指定类
import 包名.子包名.类名; //导入指定类
使用import导入静态成员
import java.lang.max;
import java.lang.System.out;
public class Demo{
public static void main(String[] args){
out.println("较大值为:"+(max(1,4))); // 导入后可直接使用
}
}
import java.lang.System.out;
public class Demo{
public static void main(String[] args){
out.println("较大值为:"+(max(1,4))); // 导入后可直接使用
}
}
内部类
成员内部类
定义在一个类成员位置的内部类,称为成员内部类,在成员内部类中可以使用外部类的的任意成员变量与成员方法,即使该外部类成员变量被private所修饰。
this关键字
外部类与内部类之间也可使用this关键字,如果在内部类中需要使用到外部类的成员变量,那么可以使用外部类.this.变量名的方式使用。
匿名内部类
匿名内部类本质是一个隐藏了名字的内部类。匿名类是只有在创建时才会编写类体的一种写法。
语法如下:new 继承/实现(){
//重写的方法
};
//重写的方法
};
异常处理
异常概述
在程序中,异常可能由程序员没有预料到的各种情况产生,也可能超出程序员可控范围的环境因素产生,在Java中,这种在程序运行时可能出现的一些错误被称为 “异常”。
异常的抛出与捕捉
抛出异常
为了保证程序有效的执行,异常抛出后,需要对抛出的异常经行相应的处理,如果不做任何处理,程序就会被终止。
捕捉异常
try-carch语句块
try{
//代码块
}catch(Exception){//对Exception的处理
System.out.print();
}finally{
System.out.print();
}
//代码块
}catch(Exception){//对Exception的处理
System.out.print();
}finally{
System.out.print();
}
catch
finally
Java常见的异常类
自定义异常
在Java中有许多异常,但Java系统却无法做到百分百查出异常,这时候自定义异常的作用便出来了,它可以让我们自己定义异常
自定义异常大体可分为以下几个步骤:
创建自定义异常类
在方法中通过throw关键字抛出异常
在当前抛出的异常的方法中处理异常
在方法中抛出异常
throws关键字
throws关键字通常被应用在声明方法时,用来指定方法可能抛出的异常
throw关键字
throw关键字通常用于方法体中,并抛出一个异常对象
注意:程序在执行到throw语句时立即终止
运行时异常
Exception类
Exception类称为非致命性类,可以通过捕捉处理来使程序继续执行
RuntimeException异常
除 RuntimeException异常之外的异常。
Error类
Error类及其子类用来描述java运行系统中的内部错误以及资源耗尽的错误,这类错误比较严重
异常的使用原则
java异常强制用户考虑程序的强健性和安全性,异常处理不应用来控制程序的正常流程,其主要作用是捕获程序在运行时发生的异常并进行相应处理,编写代码处理某个方法可能出现异常时,可遵循以下几条原则
在当前方法声明中使用try-catch语句捕获异常
一个方法被覆盖时,覆盖它的方法必须抛出相同的异常或者异常的子类
如果父类抛出多个异常,则覆盖方法必须抛出那些异常的一个子类,不能抛出新异常
字符串
String类
单个字符使用char类型保存,而多个字符组成的文本就需要使用String类型来保存了,String类型最多可以保存2的32次方-1个字节(占用4Gb空间大小)
声明字符串
字符串必须要包含在一对双引号("")之内
例如:"12,32","ABCD","你好"
创建字符串
在java中将字符串作为对象来处理,因此可以像创建其它类对象一样来创建字符串对象创建对象要使用类的构造方法
String(char a[])
该方法用一个字符数组a创建String对象
String (char a[],int offset,int length)
该方法提取字符数组a中的一部分创建一个字符串对象。参数offset表示开始截取字符串的位置,length表示截取字符串的长度
String(char[] valie)
该构造方法可分配一个新的String对象,使其表示字符数组参数中所有的元素连接的结果
连接字符串
对于已经声明的字符串,也可以对其进行相应操作,连接字符串就是字符串操作中比较简单的一种,可对于多个字符串进行连接,也可以使字符串与其他数据类型进行连接
连接多个字符串
使用“+”运算符可实现多个字符串连接,“+”运算符可以连接多个Sting对象并产生一个新的String对象
连接其他数据类型
字符串也可以同其他数据类型相连接,如果将字符串同其他数据类型进行连接,会将其他数据类型直接转换为字符串
获取字符串信息
字符串作为对象,可通过相应方法获取字符串的有效信息 ,如获取某字符串的长度,每个索引位置的字符等
获取字符串的长度
使用String类的length()方法可获取声明的字符串对象的长度
语法如下:str.length();
注意:其中,str为字符串对象。
字符串查找
inexOf(String s)
该方法用于返回参数字符串s在指定字符串中首次出现的索引位置。
语法如下:str.indexOf(substr)
lastlndexOf(String str)
该方法用于指定字符串最后一次出现的索引位置。
语法如下:str.lastlndexOf(substr)
获得指定位置索引的字符
使用charAt()方法可将指定索引处的字符返回。
语法如下:str.charAt(int index)
字符串操作
获取子串
substring(int beginlndex)
该方法返回的是从指定的索引位置开始截取直到该字符串结尾的子串。
语法如下:str.substring(int beginlndex)
注意:其中,beginlndex指定从某一索引处开始截取字符串。
substring(int beginlndex,int endlndex)
该方法返回的是从字符串某一索引位置开始截取至某一索引位置结束的子串
语法如下:substring(int beginlndex,int endlndex)
beginlndex——开始截取子字符串的索引位置。
endlndex——子字符串在整个字符串中的结束位置。
去除空格
trim()
返回字符串的副本,忽略前导空格和尾部空格。
语法如下:str.trim();
字符串的替换
replace()
可实现将指定的字符或字符串替换成新的字符或字符串。
语法如下:str.replace(charSequence target, CharSequence replacement)
targt
要替换的字符或字符串。
replacement
用于替换原来字符串的内容。
判断字符串的开始和结尾
startsWith()
该方法用于判断当前字符串对象的前缀是否为参数指定的字符串。
语法如下:str.startsWith(String prefix)
prefix是指作为前缀的字符串。
endsWith()
该方法用于判断当前字符串是否为给定的子字符串。
语法如下:str.endsWith(String suffix)
suffix是指作为后缀的字符串。
判断字符串是否相等
equals()
如果两个字符串具有相同的字符和长度,则使用equals()方法进行比较时,返回true。否则返回false。
语法如下:str.equals(String otherstr)
equalsLgnoreCase()
使用equals()方法对字符串进行比较时是否分大小写的,而使用equalsLgnoreCase()方法是在忽略了大小写的情况下比较两个字符串是否相等,返回结果仍为boolean类型。
语法如下:equalsLgnoreCase(String otherstr)
按字典顺序比较两个字符串
compareTo()
compareTo()方法为按字典顺序比较两个字符串,该比较基于字符串中各个字符的Unicode值,按字典顺序将String对象表示的字符序列与参数字符串所表示的字符序列进行比较。如果按字典顺序此String对象位于参数字符串之前,则比较结果为一个负整数;如果按字典顺序此String对象位于参数字符串之后,则比较结果为一个正整数;如果这两个字符串相等,则结果为0。
语法如下:str.compareTo(String otherstr)
字母大小写转换
toLowerCase()
该方法将字符串中的所有大写字母转换为小写。如果字符串中没有应该被转换的字符,则将原字符串返回;否则将返回一个新的字符串,将原字符串中每个大写字母都转换成小写,字符串长度不变。
语法如下:str.toLowerCase()
toUpperCase()
该方法将字符串中所有的小写字母转换为大写。如果字符串中没有应该被转换的字符,则将原字符串返回;否则返回一个新字符串,将原字符串中每个小写字母都转换为大写,字符串长度不变。
语法如下:str.toUpperCase()
字符串分割
split(String sign)
该方法可根据给定的分割符对字符串进行拆分。
语法如下:str.split(String sign)
split(String sign,int limit)
该方法可根据给定的分割符对字符串进行拆分,并限定拆分的次数。
语法如下:str.split(String sign,int limit)
sign——分割字符串的分割符,也可以使用正则表达式。
limit——限制的分割次数。
格式化字符串
Sting 类的静态format()方法用于创建格式化的字符串。format()方法有两种重载形式。
format(String format,Object...args)
该方法使用指定的格式字符串和参数返回一个格式化字符串,格式化后的新字符串使用本地默认的语言环境。
语法如下:str.format(String format,Object...args)
format(Local l,String format,Object...args)
该方法使用指定的语言环境、格式字符串和参数返回一个格式化字符串,格式化后的新字符串便用其指定的语言环境。
语法如下:str.format(Local l,String format,Object...args)
日期和时间字符串格式化
日期格式化
例子。返回一个月中的天数
Date date = new Date();//创建 Date 对象
dateStrings=String.format(“%te”date) ; //通过format()方法对 date 进行格式化
dateStrings=String.format(“%te”date) ; //通过format()方法对 date 进行格式化
代码中变量 s的值是当前日期中的天数,如今天是 15 号,则 s 的值为 15;%te 是转换符。
时间格式化
format()
使用 format()方法不仅可以完成日期的格式化也可以实现时间的格式化。时间的格式化转换符要比日期的格式化转换符更多、更精确,它可以将时间格式化为时、分、秒、毫秒等。
格式化常见的日期时间组合
格式化日期与时间组合的转换符定义了各种日期时间组合式
常规类型格式化
常规类型格式化可应用于任何参数类型,可通过表中的转换符来实现。
使用正则表达式
正则表达式通常被用于判断语句中,用来检查某一字符串是否满足某一格式。正则表达式是含有-些具有特殊意义字符的字符串,这些特殊字符称为正则表达式的元字符。
在正则表达式中允许使用限定修饰符来限定元字符出现的次数。例如:“A*”代表A可在字符串中出现0次或多次。
字符串生成器
append()
该方法用于向字符串生成器中追加内容。通过该方法的多个重载形式,可实现接受任何类型的数据,如int、boolean、char、String、double 或者另一个字符串生成器等。
语法如下:append(content)
insert(int offset, arg)
该方法用于向字符串生成器中的指定位置插入数据内容。通过该方法的不同重载形式,可实现向字符串生成器中插入int、float、char 和 boolean 等基本数据类型的数据或其他对象。
语法如下:insert(int offset arg)
delete(int start , int end)
移除此序列的子字符串中的字符。该子字符串从指定的 stat 处开始,一直到索引 end-1 处的字符如果不存在这种字符,则一直到序列尾部。如果 start 等于 end,则不发生任何更改。
语法如下:delete(int start , int end)
常用类库
包装类
Integer类
nteger 类在对象中包装了一个基本数据类型 int 的值,该类的对象包含一个 int 类型的字段。此外该类提供了多个方法,能在 int 类型和 String 类型之间互相转换,同时还提供了其他一些处理 int 类时非常有用的常量和方法。
nteger 类提供了以下4个常量
MAX_VALUE——表示int 类型可取的最大值,即2(31次方)-1。
MIN_VALUE——表示int 类型可取的最小值,即-2(31次方)。
SIZE——用来以二进制补码形式表示 int 值的位数。
TYPE——表示基本类型int的 Class 实例。
Double类
Double类在对象中包装一个基本类型为 double 的值,每个Double类的对象都包含一个double类的字段。此外,该类还提供多个方法,可以将 double类型转换为 String类型,将 String类型转换为 doubl类型,也提供了其他一些处理 double 类型时有用的常量和方法。
Double类主要提供了以下常量
MAX_EXPONENT——返回int 值,表示有限double 变量可能具有的最大指数
MIN_EXPONENT——返回 int 值,表示标准化 double 变量可能具有的最小指数。
NEGATIVE_INFINITY——返回 double 值,表示保存 double 类型的负无穷大值的常量。
POSITIVE_INFINITY——返回double 值,表示保存double 类型的正无穷大值的常量。
Boolean类
Boolean 类将基本类型为 boolean 的值包装在一个对象中。一个 Boolean 类型的对象只包含一个类型为boolean 的字段。此类还为 boolean 类型和 String 类型的相互转换提供了许多方法,并提供了处理 boolean 类型时非常有用的其他一些常量和方法。
Boolean 提供了以下3个常量
TRUE——对应基值 true的 Boolean 对象。
FALSE——对应基值 false的 Boolean 对象。
TYPE——基本类型 boolean的 Class 对象。
Character类
Character 类在对象中包装一个基本类型为 char 的值,该类提供了多种方法,以确定字符的类别(小写字母、数字等),并可以很方便地将字符从大写转换成小写,反之亦然。
Character 类提供了大量表示特定字符的常量
CONNECTOR_PUNCTUATION——返回 byte 型值,表示Unicode 规范中的常规类别“Pc”
UNASSIGNED——返回 byte 型值,表示Unicode 规范中的常规类别“Cn”。
TITLECASE_LETTER——返回 byte 型值,表示Unicode 规范中的常规类别“Lt”。
Number类
对于数值型的包装类,它们有一个共同的父类-Number 类,该类是一个抽象类,它是 Byte、Integer、Short、Long、Float 和 Double 类的父类,其子类必须提供将表示的数值转换为 byteint、short、long、float 和 double 的方法。
doubleValue()方法返回双精度浮点值
floatValue0方法返回单精度浮点值
数字处理
数字格式化
在Java 中,没有格式化的数据遵循以下原则
如果数据绝对值大于0.001 并且小于10000000,使以常规小数形式表示
如果数据绝对值小于0.001或者大于10000000,使用科学记数法表示。
由于上述输出格式不能满足解决实际问题的要求,通常将结果格式化为指定形式后输出。在 Java中,可以使用DecimalFormat类进行格式化操作
当格式化数字时,可在 DecimalFormat类中使用一些特殊字符构成一个格式化模板,使数字按照-定的特殊字符规则进行匹配。
Math类
Math 类提供了众多数学函数方法,主要包括三角函数方法,指数函数方法,取整函数方法,取最大值、最小值,以及平均值函数方法。这些方法都被定义为 static 形式,所以在程序中应用比较简便可以使用如下形式调用
三角函数方法
public static double sin(double a): 返回角的三角正弦。
public static double cos(double a): 返回角的三角余弦。
public static double tan(double a): 返回角的三角正切。
public static double asin(double a):返回一个值的反正弦。
public static double acos(double a): 返回一个值的反余弦。
public static double atan(double a):返回一个值的反正切。
public static double toRadians(double angdeg): 将角度转换为弧度。
public static double toDegrees(double angrad):将狐度转换为角度。
指数函数方法
public static double exp(double a):用于获取e的a次方。
public static double log(double a):用于取自然对数,即取Ina的值。
public static double log10(double a):用于取底数为10 的a的对数。
public static double sqrt(double a): 用于取a的平方根,其中a 的值不能为负值。
public static double cbrt(doublea):用于取a的立方根。
public static double pow(double a,double b): 用于取a的b 次方。
取整函数方法
public static double ceil(double a): 返回大于等于参数的最小整数。
public static double floor(double a):返回小于等于参数的最大整数。
public static double rint(double a): 返回与参数最接近的整数,如果存在两个同样接近的整数V则结果取偶数。
public staticintround(float a):将参数加上0.5后返回与参数最近的整数。
public static longround(double a): 将参数加上0.5 后返与参数最近的整数,然后强制转换为长整型。
取最大、最法小值和绝对值函数方
public static double max(double adouble b): 取a与b之间的最大值。
public static int min(int aint b): 取a与b之间的最小值,参数为整型。
public static long min(long a,long b): 取a与b之间的最小值,参数为长整型。
public static float min(float a,floatb):取a与b之间的最小值,参数为单精度浮点型
public static double min(double a,double b):取a与b之间的最小值,参数为双精度浮点型。
public static intabs(int a):返回整参数的绝对值。
public static longabs(long a):返回长整型参数的绝对值。
public static float abs(float a): 返回单精度浮点型参数的绝对值。
public static double abs(double a): 返回双精度浮点型参数的绝对值。
Random类
Random 类是JDK 中的随机数生成器类,可以通过实例化一个 Radom 对象创建一个随机数生器
语法如下:Random r = new Random();
用户也可以在实例化 Random 类对象时,设置随机数生成器的种子。
语法如下:Random r = new Random(seedValue);
r: Random类对象。
seedValue:随机数生成器的种子。
BigInteger类
使用 BigInteger类,可以实例化一个 BigInteger 对象,并自动调用相应的构造函数。BigInteger类具有很多构造函数,但最直接的一种方式是参数以字符串形式代表要处理的数字。Biginteger 类的数字范围较 Integer 类的数字范围要大得多。
public BigInteger add(BigInteger val):——做加法运算。
public BigInteger subtract(BigInteger val)——做减法运算。
public BigInteger multiply(BigInteger val)—— 做乘法运算。
public BigInteger divide(BigInteger val)—— 做除法运算。
public BigInteger remainder(BigInteger val)——做取余操作。
public BigInteger divideAndRemainder(Biplntegcr val)—— 用数组返回余数和商,结果数组中第一个值为商,第二个值为余数。
public BigInteger pow(intexponent)—— 进行取参数的exponent 次方操作。
public BigInteger negate0——取相反数。
public BigInteger shifLeft(intn)——将数字左移n位,如果n为负数,做右移操作。
public BigInteger shiftRight(intn)——将数字右移n位,如果n为负数,做左移操作。
public BigInteger and(BigInteger val)——做与操作。
public BigInteger or(BigInteger val)——做或操作。
publicintcompareTo(BigInteger val)——做数字比较操作。
public boolean equals(Object x)——当参数x是BigInteger类型的数字并且数值与对象实例的数值相等时,返回true。
public BigInteger min(BigInteger val)——返回较小的数值。
public BigInteger max(BigIntegerval)——返回较大的数值。
BigDecimal类
BigDecimal类和BigInteger类都能实现大数字的运算,不同的是 BigDecimal类加入了小数的概念般的foat 型和 double 型数据只可以用来做科学计算或工程计算,但由于在商业计算中要求数字精度比较高,所以要用到 BigDecimal类。BigDecimal类支持任何精度的定点数,可以用它来精确计算货币值。
BigDecimal类型的数字可以用来做超大的浮点数的运算,如加、减、乘、除等,但是在所有的运算中除法是最复杂的,因为在除不尽的情况下商小数点后的末位的处理是需要考虑的。
BigDecimal类中divide()方法有多种设置,用于返回商小数点后的末位的处理
System类
System类是JDK中提供的系统类,该类是用final修饰的,所以不允许被继承。System类提供了很多系统层面的操作方法,并且这些方法全部但是静态的。
控制台输出字符
System 类提供了标准输入、标准输出和错误输出流,也就是说,System 类提供了3 个静态对象:in、out 和 err。本书中的代码多次使用了这些对象,最常见的就是 out 对象。
不会自动换行的print()方法
语法如下:System.out.print(“Hello”);
可以自动换行的println()方法
语法如下:System.out.println(“书籍是人类进步的阶梯!”);
此方法输出“书籍是人类进步的阶梯!”后会自动换行。光标停留在下一行的开头。
计时
System.currentTimeMillis()
System.currentTimeMillis()方法可以获取1970年1月1日零点至今的毫秒数。虽然 Date日期也有类似的方法,但代码会比System 类多,所以System.currentTimeMillis()方法是为获取当前毫秒梦最常用的方法。因为该方法的返回值精确到毫秒,所以可以利用该方法来记录程序的运行时间。
Scanner类
Scanner英文直译就是扫描仪,它的用途就和现实生活中的扫描仪一样,可以把数字化信息流为人类可识别的文字。控制台输出内容用到了System.out就表示向控制台输出,System.in就表示从控制台输入,让Scanner扫描System.in就可以获取用户输入的值了。
语法如下:import java.util.Scanner;
使用Scanner类扫描控制台的代码如下:Scanner sc = new Scanner(System.in);
日期时间类
Date类
Date类用于表示日期时间,使用该类表示时间需要使用其构造方法创建对象
使用Date类的第2种构造方法创建一个Date类的对象
代码如下:long timeMillis = System.currentTimeMillis();
Date date = new Date(TimeMillis);
Date date = new Date(TimeMillis);
日期时间格式化
DateFormat类是日期时间格式化子类的抽象类,可以按照指定的格式对日期或时间进行格式化,DateFormat类提供了很多类方法,以获得基于默认或给定语环境和多种格式化风格的默认日期时间formatter
SHORT——完全为数字,如11.13.42或3:30pm。
MEDIUM—— 较长,如Jan 12,1343。
LONG——更长,如January 12,1343或3:30:32pm。
FULL——完全指定,如Tuesday、April 12、1952AD或3:30:42pm PST。
使用DateFormat类还可以自定义日期时间的格式。要格式化一个当前语言环境下的日期,首先需要创建DateFormat类的一个对象,由于它是抽象类,因此使用其静态方法getDateInstance()进行创建
语法如下:DateFormat of = DateFormat.getDateInstanse();
由于DateFormat类是一个抽象类,不能用new 创建实例对象。因此,除了使用getXXXInstance()方法创建其对象,还可以使用其子类,如 SimpleDateFormat 类,该类是一个以与语言环境相关的方式来格式化和分析日期的具体类,它允许进行格式化(日期一文本)、分析(文本一日期)和规范化。
SimpleDateFormat类提供了19个格式化字符,可以让开发者随意编写日期格式
一些常用的日期时间格式下表
Calendar类
Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR等日历字段之间的转换提供了一些方法,并为操作日历字段(如获得下星期的日期)提供了一些方法。另外,该类还为实现包范围外的具体日历系统提供了其他字段和方法,这些字段和方法被定义为 protected。
Calendar 提供了一个类方法 getInstance(),以获得此类型的一个通用的对象。Calendar 类的getInstance()方法返回一个 Calendar 对象,其日历字段已由当前日期和时间初始化
方法如下:Calendar rightNow = Calendar.getInstance();
Runtime类
Runtime类是JDK提供的运行时类,该类为Java程序提供了与当前运行环境相连接的一个通道,Java程序可以利用该类对当前的运行环境执行一些简单的操作。Runtime 类不能使用 new 关键字创建实例,只能通过 Runtime.getRuntime()方法获取实例。
执行本地命令
Runtime类提供exec0方法让Java 代码可以执行系统的命令,exec0方法有很多重载的形式
command:要执行的系统命令,字符串类型。
cmdarray:要执行的命令和相应的命令参数,字符串数组类型。
查看内存
Runtime 类可以通过 freeMemory()方法查看当前Java 虚拟机可用内存的剩余量。如果程序能够实时监控内存剩余量,就可以尽量控制程序对内存的占用,从而避免出现“内存溢出”的情况。同样,也可以用来对测试程序性能,检验程序算法是否导致内存紧张。
收藏
0 条评论
下一页