本文测试java中常用的类
包括:Object 、 String、 StringBuffer、 Tokenizer、 Date、 Calendar、 Math BingInteger
一、Object:所有类的祖先
package com.wllfengshu.test;
/**
* Object类
* @author Administrator
*补充:java包分为核心包和扩展包,核心包名以java开头,扩展包名以javax开头
*/
public class Test1Object {
public static void main(String[] args) {
//1、Object类是所有类的祖先,所有的类都隐式继承Object,Object类中的三个方法如下
//2、测试equals()方法
A a=new A();
B b=new B();
System.out.println(a.equals(b));//比较对象是否指向同一个引用
/**
* Object中的equals方法如下:
* public boolean equals(Object obj){
* return (this==obj)
* }
*/
//3测试hashCode()方法
//hashCode()用来返回对象的散列码(哈希值)
String c="123";
String d="123";
System.out.println(c.equals(d));
System.out.println(c.hashCode() == d.hashCode());
//总结:常见String类和基本数据类型的包装类都满足:若equals方法为true,则哈希值相等
//4测试toString()方法
//对象调用该方法返回默认格式:类名@对象的十六进制哈希值
System.out.println(a);
}
}
class A{
public void a(){
System.out.println("a");
}
}
class B{
public void b(){
System.out.println("b");
}
}
二、 String:字符串
package com.wllfengshu.test;
import org.junit.Test;
/**
* 测试 String字符串的特点、常用方法、注意事项
* StringBuffer、StringBuilder
* @author Administrator
*
*/
public class Test2String {
//0、String类为fianl类,不能被继承
/*class extString extends String{//错误:String类为final类,不能被继承
}*/
//1、创建字符串对象的方法
@Test
public void test1(){
String a="ABC";//通过字符串常量创建
String b=new String("ABC");//通过构造函数创建(注:String的构造函数还有很多)
String c=new String("ABC");
String d="ABC";
System.out.println(a==b);//false:双等号比较的字符串的首地址,故不想等
System.out.println(a.equals(b));//true
System.out.println(b==c);//false:双等号比较的字符串的首地址,故不想等
System.out.println(a==d);//true:变量a和d都指向字符串常量"123"
}
//2、String类常用方法
@Test
public void test2(){
String a="ABCDE";
System.out.println(a.length());//或者字符串长度
String b="ABC";
System.out.println(a.equals(b));//比较字符串变量a和b是否指向相同实体
String c="abc";
System.out.println(c.equalsIgnoreCase(b));//忽略大小写比较c和d是否指向相同实体
System.out.println(a.startsWith("AB"));//判断字符串a是否以AB开头
System.out.println(a.endsWith("E"));//判断字符串a是否以E结尾
System.out.println(a.compareTo("AD"));//a按照字典顺序与AD字符串比较大小,相等返回0
System.out.println(a.compareToIgnoreCase("ab"));//按照字典顺序比较,忽视大小写
System.out.println(a.contains("CD"));//判断字符串a是否含有指定字符串CD
System.out.println(a.indexOf("C"));//从字符串a的开头检查,首次出现字符串C的索引
System.out.println(a.indexOf("C",1));//从字符串a的索引为1处检查,首次出现字符串C的索引
System.out.println(a.lastIndexOf("C"));//从字符串a的开头检查,最后一次出现字符串C的索引
System.out.println(a.substring(3));//从索引为3处一直截取到最后,包括3
System.out.println(a.substring(1, 3));//从索引1截取到索引3,不包括3
String d=" ABCDEF G ";
System.out.println(d.trim());//去掉字符串d前后的空格
String e="123hello456".replaceAll("[a-zA-Z]", "你好");
System.out.println(e);//把字符串中对于满足正则表达式[a-zA-Z]的部分替换为"你好"
String f="abcd efgh ijk";
String[] g=f.split(" ");//按照空格进行分解字符串,空格可以是其他正则表达式
System.out.println(g[1]);
}
}
三、 StringBuffer:可编辑字符串
package com.wllfengshu.test;
/**
* 测试StringBuffer 和 StringBuilder
* @author Administrator
*
*/
public class Test3StringBuffer {
public static void main(String[] args) {
//0、String字符串不能修改,但是StringBuffer创建的字符串可以修改
//1、构造函数:
StringBuffer a = new StringBuffer("abc");//无参
System.out.println(a.length());//存放的字符串的长度
System.out.println(a.capacity());//该对象实际占用空间
//2、常用方法(很多方法都有重载)
System.out.println(a.append("123456"));//追加内容
System.out.println(a.charAt(2));//获取索引为2的字符
a.setCharAt(1, 'k');//把索引为1的位置替换为字符'k'
System.out.println(a);
System.out.println(a.insert(1, 'h'));//把指定字符插入到索引为1出
StringBuffer b=a.reverse();//字符串翻转
System.out.println(b);
StringBuffer c=a.delete(1, 2);//删除字符串中索引1到2的字符(不包括索引2)
System.out.println(c);
StringBuffer d=a.replace(2, 3,"4");//用字符串4替换字符串a索引2到3的字符(不包括索引3)
System.out.println(d);
//3、StringBuilder和StringBuffer区别
//StringBuilder:线程非安全的(建议单线程时使用)
//StringBuffer:线程安全的(建议多线程时使用)
}
}
四、 Tokenizer:字符串分解
package com.wllfengshu.test;
import java.util.StringTokenizer;
/**
* 测试StringTokenizer
* @author Administrator
* 字符串分析器
*/
public class Test4StringTokenizer {
public static void main(String[] args) {
//默认使用空白字符、制表符、换行符、回车符和换页符进行分割
StringTokenizer a = new StringTokenizer("ni hao");
while (a.hasMoreElements()) {
String b = (String) a.nextElement();
System.out.println(b);
}
/*
输出:
ni
hao
*/
//用指定字符来进行分割(可以同时多个字符)
StringTokenizer c=new StringTokenizer("ni hao,wo hai mei chi fan"," ,");
while (c.hasMoreTokens()) {
String d = (String) c.nextElement();
System.out.println(d);
}
/*
ni
hao
wo
hai
mei
chi
fan
*/
}
}
五、 Date:日期
package com.wllfengshu.test;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 测试Date类
* @author Administrator
* 日期
*/
public class Test5Date {
public static void main(String[] args) {
Date a = new Date();
System.out.println(a);
SimpleDateFormat b=new SimpleDateFormat("yyyy-MM-dd");//日期格式化
System.out.println(b.format(a));
}
}
六、Calendar:日历
package com.wllfengshu.test;
import java.util.Calendar;
import java.util.Scanner;
/**
* 测试Calendar、程序输入日历的例子
* @author Administrator
* 日历
*/
public class Test6Calendar {
public static void main(String[] args) {
// Calendar a=Calendar.getInstance();
// a.set(2017, 9, 28);
// int b = a.get(Calendar.MONTH);
// System.out.println(b);
//
// //eg:判断1949和2009之间相隔多少天
// Calendar calendar=Calendar.getInstance();
// calendar.set(1949, 2, 1);//注意:这里是三月
// long time1=calendar.getTimeInMillis();
// calendar.set(2009, 2, 1);
// long time2=calendar.getTimeInMillis();
// long days=(time2-time1)/(24*60*60*1000);
// System.out.println(days);
@SuppressWarnings("resource")
Scanner scanner=new Scanner(System.in);
String in = scanner.nextLine();
String[] input=in.split(" ");
String year=input[0];
String month=input[1];
System.out.println("输入日期为:"+year+"年"+month+"月");
MyCalendar mc=new MyCalendar(year,month);
String[] output=mc.getCalendar();
char[] str="日一二三四五六".toCharArray();
for (char c : str) {
System.out.printf("%7c",c);
}
for (int i = 0; i < output.length; i++) {
if (i%7==0) {
System.out.println();
}
System.out.printf("%4s",output[i]);
}
}
}
/**
* 通过里面的getCalendar()方法获取一个日历,存放在数组中
*/
class MyCalendar{
private int year;
private int month;
public MyCalendar(String year,String month){
this.year=Integer.valueOf(year);
this.month=Integer.valueOf(month);
}
public String[] getCalendar() {
String[] a=new String[42];//把每天几号都存在数组中
Calendar calendar=Calendar.getInstance();
calendar.set(year, month,1);
int weekDay=calendar.get(Calendar.DAY_OF_WEEK)-1;//计算1号星期几
System.out.println("这个月的1号是星期:"+weekDay);
int day=0;
if (month==1 || month==3 || month==5 || month==7 || month==8 ||month==10 || month==12) {
day=31;
}else if (month==4 || month==6 || month==9 || month==11) {
day=30;
}else if (month==2) {
if (((year%4==0)&&(year%100==0)) ||(year%400==0)) {
day=29;
}else {
day=28;
}
}else {
System.out.println("月份错误");
}
System.out.println("这个月有的天数:"+day);
for (int i = 0; i < weekDay; i++) {//1号前几天都为空
a[i]="";
}
int flay=1;//几号
for (int i = weekDay; i < weekDay+day; i++) {//处理后面的天数
a[i]=String.valueOf(flay);
flay++;
}
for (int i = weekDay+day; i < a.length; i++) {//处理多余的
a[i]="";
}
return a;
}
}
七、Math:数学
package com.wllfengshu.test;
/**
* 测试Math中常用数学方法
* @author Administrator
*
*/
public class Test7Math {
public static void main(String[] args) {
int a=-34;
int b=3;
System.out.println(Math.abs(a));//返回a的绝对值
System.out.println(Math.pow(a, b));//求a的3次幂
System.out.println(Math.sqrt(b));//返回b的平方根
System.out.println(Math.max(a, b));//返回a,b中最大的值
}
}
八、 BingInteger:大整数
package com.wllfengshu.test;
import java.math.BigDecimal;
import java.math.BigInteger;
/**
* 测试大数类
* @author Administrator
*
*/
public class Test8BigInteger {
public static void main(String[] args) {
BigInteger a=new BigInteger("1212121212");//整数
BigInteger b=new BigInteger("121212");//整数
BigDecimal c=new BigDecimal("12121.121212121212");//浮点数
//使用大数做算术运算不能使用运算符,要使用相应的方法
System.out.println(a.add(b));//加法
System.out.println(a.subtract(b));//减法
System.out.println(a.multiply(b));//乘法
System.out.println(a.divide(b));//除法
System.out.println(a.remainder(b));//求余数
System.out.println(a.compareTo(b));//比较大小
System.out.println(a.abs());//绝对值
System.out.println(a.pow(3));//a的3次幂
}
}