java学习血泪史
十二.常用系统类
包名 | 描述 |
---|---|
java.lang.* | Java基本语言包,被Java程序默认引入 |
java.util.* | Java使用工具集,包括Date, Vector, ArrayList |
java.io.* | Java输入输出流包 |
java.net.* | Java处理网络编程的包 |
java.sql.* | Java数据库编程包 |
java.applet.* | Java的Applet包 |
java. security.* | Java安全模型包 |
1.Object
java.lang.Object
- public boolean equals(Object o)
- 表示两个对象是否相等,不同的子类会有不同的“相等逻辑”
- 如果子类没有覆盖equals方法,则继承Object的“相等逻辑”
- 为用户自定义的子类更方便的融入,使用Java自带的方便的函数(便于实现某个对象和另一个对象是否相等逻辑)
- public String toString()
- 表示一个对象的“字符串表示”,可以让我们方柏霓的窥测到一个对象里面的属性----一般对象是立体的
- 如果子类没有覆盖toString()方法,则继承Object的“字符串”表示——类的Class信息
- 自己的类可以根据需要重写toString(),如Point类中
//覆盖toString()
public String toString(){
return “x=” +x+“,y=”+y;
}
//toString() 的使用情况
System.out.print(p) = System.out.print(p.toString())
- public final Class getClass()
- 返回一个对象所属类的相关信息-----该类元数据信息区的地址
- 先看一个特殊的类——Class,它的一个对象表示:另外某个类被虚拟机加载到专用内存区域(类信息区)的一段内存
- 是Java“反射特性”的基础,可以实现:由一个类的名字,生成对应的对象
2.String
java.lang.String
见常用实用类中的String
3.Vector/ArrayList
java.util.Vector/java.lang.ArrayList
实现自增长动态数组
功能几乎完全相同,区别在于Vector是线程安全的(但效率较低)
适合使用Vector类的场合
- 需要处理的对象数目不定,序列中的元素是对象
- 需要将不同类的对象组合成一个数据序列
- 需要做频繁的插入和删除操作
- 需要进行查找操作
适合使用ArrayList的场合
- 序列中的元素是简单数据类型,主要的操作:顺序访问
- 序列中的元素数目固定,插入、删除和查找操作较少
Vector/ArrayList方法
//创建Vector类
public Vector()
public Vector(int size)
public Vector(int size, int incrSize)
//添加元素
public void add(Object obj)
public void add( int index, Object obj) //参数顺序都定义过了
//修改元素
public void set(Object obj, int index)
//删除元素
public void remove(int index)
public void removeAll()
//访问Vecotr的元素
public Object get(int i)
//Vecotr的长度
public int size()
4.Arrays 类
java.util.Arrays 类能方便地操作数组,它提供的所有方法都是静态的。
//给数组赋值:通过 fill 方法。
public static void fill(int[] a, int val)
//对数组排序:通过 sort 方法,按升序。
public static void sort(Object[] a)
//比较数组:通过 equals 方法比较数组中元素值是否相等。
public static boolean equals(long[] a, long[] a2)
//查找数组元素:通过 binarySearch 方法能对排序好的数组进行二分查找法操作。
public static int binarySearch(Object[] a, Object key)
//赋值数组
public static void arraycopy(sourceArray, int index1, copyArray, int index2, int length)
5.Collections类
对集合类的操作
构造是private的,只能使用静态方法
boolean add(Object o) //添加对象到集合
boolean remove(Object o) //删除指定的对象
int size() //返回当前集合中元素的数量
boolean contains(Object o) //查找集合中是否有指定的对象
boolean isEmpty() //判断集合是否为空
Iterator iterator() //返回一个迭代器
boolean containsAll(Collection c) //查找集合中是否有集合c中的元素
boolean addAll(Collection c) //将集合c中所有的元素添加给该集合
void clear() //删除集合中所有元素
void removeAll(Collection c) //从集合中删除c集合中也有的元素
void retainAll(Collection c) //从集合中删除集合c中不包含的元素
6.Math类
Math 类封装了常用的数学运算,提供了基本的数学操作,如指数、对数、平方根和三角函数等
1.静态常量
Math.E
Math.PI
2.求最大值、最小值和绝对值
Math.max(10, 20)
Math.min(15.6,15)
Math.abs(-12)
3.求整运算
static double ceil(double a) //返回大于或等于 a 的最小整数
static double floor(double a) //返回小于或等于 a 的最大整数
static double rint(double a) //返回最接近 a 的整数值,如果有两个同样接近的整数,则结果取偶数
static int round(float a) //将参数加上 1/2 后返回与参数最近的整数
static long round(double a) //将参数加上 1/2 后返回与参数最近的整数,然后强制转换为长整型
4.三角函数运算
static double sin(double a) //返回角的三角正弦值,参数以孤度为单位
static double cos(double a) //返回角的三角余弦值,参数以孤度为单位
static double asin(double a) //返回一个值的反正弦值,参数域在 [-1,1],值域在 [-PI/2,PI/2]
static double acos(double a) //返回一个值的反余弦值,参数域在 [-1,1],值域在 [0.0,PI]
static double tan(double a) //返回角的三角正切值,参数以弧度为单位
static double atan(double a) //返回一个值的反正切值,值域在 [-PI/2,PI/2]
static double toDegrees(double angrad) //将用孤度表示的角转换为近似相等的用角度表示的角
staticdouble toRadians(double angdeg) //将用角度表示的角转换为近似相等的用弧度表示的角
5.指数运算
static double exp(double a) //返回 e 的 a 次幂
static double pow(double a,double b) //返回以 a 为底数,以 b 为指数的幂值
static double sqrt(double a) //返回 a 的平方根
static double cbrt(double a) //返回 a 的立方根
static double log(double a) //返回 a 的自然对数,即 lna 的值
static double log10(double a) //返回以 10 为底 a 的对数
6.生成随机数(random()方法和random类)
- (数据类型)(最小值+Math.random()*(最大值-最小值+1))
(int)(1+Math.random()*(10-1+1))
//从1到10的int型随数
- 利用Math包内的random方法
for (int i=0;i<30;i++){
System.out.println((int)(1+Math.random()*10));
}
(int)(1+Math.random()*10);
//通过java.Math包的random方法得到1-10的int随机数
//公式是:最小值---最大值(整数)的随机数
//(类型)最小值+Math.random()*最大值
- 通过java.util包中的Random类的nextInt方法来得到1-10的int随机数
Random ra =new Random();
for (int i=0;i<30;i++){
System.out.println(ra.nextInt(10)+1);
}
7.string类
1.定义字符串
String tiantian= "自闭";
//用taintian_1的值给tiantian_2赋值
String tiantian_1 = new String("自闭");
String tiantian_2 = new String(tiantian_1)
//用char数组给String字符串赋值
char a[] = {'H','e','l','l','0'};
String sChar = new String(a);、
//用char数组中的一部分给String对象赋值
//String(char[] value,int offset,int count)
//offset 参数是子数组第一个字符的索引,count 参数指定子数组的长度
char a[] = {'H','e','l','l','o'};
String sChar = new String(a,1,4);
String s1 = "tiantian";
String s2 = new String("tiantian");
s1 = s2; //--->false
s1.equals(s2); //--->true
- 连接字符串
1.“+”运算符
最简单、最快捷,也是使用最多的字符串连接方式。
String tian_1 = "自";
String tian_2 = "闭";
String tiantian = tian_1 + tian_2;
2.concat() 方法
将一个字符串连接到另一个字符串的后面
//语法形式
字符串 1.concat(字符串 2);
- 获取字符串长度方法length()
字符串名.length();
- 转换大小写
全部转化成小写
字符串名.toLowerCase() //将字符串中的字母全部转换为小写,非字母不受影响
全部转化为大写
字符串名.toUpperCase() //将字符串中的字母全部转换为大写,非字母不受影响
- 去空格
trim()方法
返回字符串的副本,忽略前导空白和尾部空白。
- 提取子字符串
1. substring(int beginIndex) 形式
调用时,括号中是需要提取字符串的开始位置,方法的返回值是提取的字符串。
String str="我爱 Java 编程";
String result=str.substring(3);
System.out.println(result); //输出:Java 编程
2. substring(int beginIndex,int endIndex) 形式
需要特别注意的是, 对于开始位置 beginIndex, Java 是基于字符串的首字符索引为 0 处理的,但是对于结束位置 endIndex,Java 是基于字符串的首字符索引为 1 来处理的
public static void main(String[] args)
{
String day="Today is Monday"; //原始字符串
System.out.println("substring(0)结果:"+day.substring(0)); //Today is Monday
System.out.println("substring(2)结果:"+day.substring(2)); //day is Monday
System.out.println("substring(10)结果:"+day.substring(10)); //onday
System.out.println("substring(2,10)结果:"+day.substring(2,10)); //day is M
System.out.println("substring(0,5)结果:"+day.substring(0,5)); //Today
}
- 分割字符串
str.split(String sign) //如果不指定,则表示不限制,直到将整个目标字符串完全分割为止。
str.split(String sign,int limit) //limit 表示分割后生成的字符串的限制个数
例如:
public static void main(String[] args)
{
String Colors="Red,Black,White,Yellow,Blue";
String[] arr1=Colors.split(","); //不限制元素个数
String[] arr2=Colors.split(",",3); //限制元素个数为3
System.out.println("所有颜色为:");
for(int i=0;i<arr1.length;i++)
{
System.out.println(arr1[i]);
}
System.out.println("前三个颜色为:");
for(int j=0;j<arr2.length;j++)
{
System.out.println(arr2[j]);
}
}
运行结果:
所有颜色为:
Red
Black
White
Yellow
Blue
前三个颜色为:
Red
Black
White,Yellow,Blue
- 字符串的替换(replace()、replaceFirst()和replaceAll())
replace() 方法
replace() 方法用于将目标字符串中的指定字符(串)替换成新的字符(串)
字符串.replace(String oldChar, String newChar)
replaceFirst() 方法
replaceFirst() 方法用于将目标字符串中匹配某正则表达式的第一个子字符串替换成新的字符串
字符串.replaceFirst(String regex, String replacement) //regex 表示正则表达式;replacement 表示用于替换的字符串
String words="hello java,hello php";
String newStr=words.replaceFirst("hello","你好 ");
System.out.println(newStr); //输出:你好 java,hello php
replaceAll() 方法
replaceAll() 方法用于将目标字符串中匹配某正则表达式的所有子字符串替换成新的字符串
字符串.replaceAll(String regex, String replacement)
String words="hello java,hello php";
String newStr=words.replaceAll("hello","你好 ");
System.out.println(newStr); //输出:你好 java,你好 php
- 字符串的比较(equals()、equalsIgnoreCase()和compareTo())
equals() 方法
equals() 方法将逐个地比较两个字符串的每个字符是否相同。对于字符的大小写,也在检查的范围之内。
相同返回true,不同返回false
字符串1.equals(字符串2);
equalsIgnoreCase() 方法
equalsIgnoreCase() 方法的作用和语法与 equals() 方法完全相同,唯一不同的是 equalsIgnoreCase() 比较时不区分大小写。
compareTo() 方法
compareTo() 方法用于按字典顺序比较两个字符串的大小,该比较是基于字符串各个字符的 Unicode 值。
如果按字典顺序 str 位于 otherster 参数之前,比较结果为一个负整数;如果 str 位于 otherstr 之后,比较结果为一个正整数;如果两个字符串相等,则结果为 0。
str.compareTo(String otherstr);
- 查找字符串(indexOf()、lastlndexOf()和charAt())
1. indexOf() 方法
indexOf() 方法用于返回字符(串)在指定字符串中首次出现的索引位置,如果能找到,则返回索引值,否则返回 -1。
str.indexOf(value) //value 表示待查找的字符(串)
str.indexOf(value,int fromIndex) //fromIndex 表示查找时的起始索引,如果不指定 fromIndex,则默认从指定字符串中的开始位置(即 fromIndex 默认为 0)开始查找。
String s="Hello Java";
int size=s.indexOf('v'); //size的结果为8
2. lastlndexOf() 方法
lastIndexOf() 方法用于返回字符(串)在指定字符串中最后一次出现的索引位置,如果能找到则返回索引值,否则返回 -1。
str.lastIndexOf(value)
str.lastlndexOf(value, int fromIndex) //lastIndexOf() 方法的查找策略是从右往左查找,如果不指定起始索引,则默认从字符串的末尾开始查找。
根据索引查找
charAt() 方法可以在字符串内根据指定的索引查找字符
字符串名.charAt(索引值)
- 字符串的加密解密
来源:http://c.biancheng.net/view/847.html
为了保证程序的安全,经常采用数据加密的方法。Java 中提供了专门用于加密运算的类和接口。
除了使用加密类和接口外,还可以通过多种方式实现字符串的加密。其中常用的就是获取字符串的字节数组,之后对字节数组中的每个字节都进行运算,得到新的内容,这时所获得的字符串与原字符串将不相同,以此达到加密的效果;解密时再将加密字符串进行相反的运算,这样即可得到原字符串。
本实例简单介绍如何通过数据运算实现字符串的加密和解密,实现步骤如下。
(1) 创建一个静态的 encryptAndDencrypt() 方法,在该方法中传入两个参数。代码如下:
public static String encryptAndDencrypt(String value, char secret)
{
byte[] bt=value.getBytes(); //将需要加密的内容转换为字节数组
for(int i=0;i<bt.length;i++)
{
bt[i]=(byte)(bt[i]^(int)secret); //通过异或运算进行加密
}
String newresult=new String(bt,0,bt.length); //将加密后的字符串保存到 newresult 变量中
return newresult;
}
上述代码首先将需要加密的内容转换为字节数组,接着遍历字节数组中的内容,在 for 语句中通过异或运算进行加密,然后将加密后的字符串保存到 newresult 变量中。最后返回 newresult 变量的值。
(2) 在 main() 方法中添加代码,接收用户在控制台输入的内容并输出,然后调用 encryptAndUncrypt() 方法对字符串分别进行加密和解密,并将加密和解密后的内容输出。代码如下:
public static void main(String[] args)
{
Scanner scan=new Scanner(System.in);
char secret='8'; //加密文字符
System.out.println("请输入您想加密的内容:");
String pass=scan.next();
System.out.println("原字符串内容:"+pass);
String encryptResult=encryptAndDencrypt(pass,secret);
System.out.println("加密后的内容:"+encryptResult);
String uncryptResult=encryptAndDencrypt(encryptResult,secret);
System.out.println("解密后的内容:"+uncryptResult);
}
(3) 执行上述代码进行测试,如下所示。
请输入您想加密的内容:
hello,java
原字符串内容:hello,java
加密后的内容:P]TTWRYNY
解密后的内容:hello,java
8.StringBuffer类
追加、反转、删除字符串及替换字符串中的某个字符
在 Java 中,除了通过 String 类创建和处理字符串之外,还可以使用 StringBuffer 类来处理字符串。StringBuffer 类可以比 String 类更高效地处理字符串。
一般用在需要频繁修改一个字符串变量的场景
(1)创建 StringBuffer 类
StringBuffer 类提供了 3 个构造方法来创建一个字符串,如下所示:
StringBuffer() //构造一个空的字符串缓冲区,并且初始化为 16 个字符的容量。
StringBuffer(int length) //创建一个空的字符串缓冲区,并且初始化为指定长度 length 的容量。
StringBuffer(String str) //创建一个字符串缓冲区,并将其内容初始化为指定的字符串内容 str,字符串缓冲区的初始容量为 16 加上字符串 str 的长度。
(2)追加字符串
StringBuffer 类的 append() 方法用于向原有 StringBuffer 对象中追加字符串。
StringBuffer 对象.append(String str)//该方法的作用是追加内容到当前 StringBuffer 对象的末尾
(3)替换字符
StringBuffer 类的 setCharAt() 方法用于在字符串的指定索引位置替换一个字符
StringBuffer 对象.setCharAt(int index, char ch);
(4)反转字符串
StringBuffer 类中的 reverse() 方法用于将字符串序列用其反转的形式取代
StringBuffer 对象.reverse();
(5)删除字符串
1. deleteCharAt() 方法
deleteCharAt() 方法用于移除序列中指定位置的字符
StringBuffer 对象.deleteCharAt(int index);
2. delete() 方法
delete() 方法用于移除序列中子字符串的字符
StringBuffer 对象.delete(int start,int end);
3.StringTokenizer类
java.util包
4.Scanner类(扫描)
在Java语言中,格式化输入是通过类java.util.Scanner来完成的。
默认情况下,Scanner是使用“空白”作为分隔符将输入分解为标记,然后使用它所提供的不同的next方法将得到的标记转换为不同的类型的值。
Scanner scanner = new Scanner(System.in);
System.out.print("请输入:");
String str = scanner.next();
System.out.printf("%s",str);
输出有空格的字符串,需要用Scanner.useDelimiter( )方法,可以将分隔符号修改为"回车",或者其他字符。
Scanner scanner = new Scanner(System.in).useDelimiter("\n"); //useDelimiter("\n"); //“\n”换行符(回车)作为输入的分隔符
System.out.print("请输入:");
String str = scanner.next();
System.out.printf("%s",str);
String和StringBuffer的区别
- String对象一经赋值,分配的空间是固定的,不能追加修改
- StringBuffer对象本质是一个预存数组,当字符串长度
8.Data类
java.util包,使用Data类的无参数构造方式创建的对象可以获得本地当前时间
//1.获取当前的本地时间
Data time = new Data();
System.out.println(time);
//Date对象表示时间的默认顺序是星期、月、日、小时、分、秒、年;
//2.自定义设置时间
Data data = Data(1000); //参数指的是毫秒
//这个时间是1970-1-1-08:00:01
9.Calender类
-
Calendar日历字段
-
Calendar.YEAR 年份
-
Calendar.MONTH 月份
-
Calendar.DATE 日期
-
Calendar.DAY_OF_MONTH 日期
-
Calendar.HOUR 12小时制的小时
-
Calendar.HOUR_OF_DAY 24小时制的小时
-
Calendar.MINUTE 分钟
-
Calendar.SECOND 秒
-
Calendar.DAY_OF_WEEK 星期几
Calendar常用方法
1.使用默认时区和语言环境获得一个日历 getInstance()
Calendar cal = Calendar.getInstance();
2.返回一个表示此 Calendar时间值的 Date对象,getTime()
Date date = cal.getTime();
3.使用给定的 Date设置此Calendar的时间,setTime(date)
cal.setTime(date);
4.返回给定日历字段的值,月是从0开始(0~11),get()
cal.get(Calendar.YEAR);
5.使用set()设置时间,cal.set(year, month, date,hourOfDay, minute, second),月是从0开始(0~11)
cal.set(2019, 4, 4, 4, 4, 4);
6.给单个日历字段设置时间
cal.set(Calendar.YEAR, 2019);
7.add方法计算时间,为给定的日历字段添加或减去指定的时间,根据时间变更其它日历字段
cal.add(Calendar.MONTH, 10);
8.roll方法计算时间,为给定的日历字段添加或减去指定的 时间,不更改更大的字段
cal.roll(Calendar.MONTH, 5);
HashMap类
java.util.HashMap