Object类
object类:是所有Java类的祖先。每个类都是Object的子类,每个对象(包括数组)都实现了这个类的方法。
API:
getClass() ;返回一个对象实例的运行期类型
hashCode();返回对象实例的hash码,即内存地址
equlas();默认比较的内存地址;指出其他对象是否和当前对象相同;可以在子类中重写该方法,自定义相等条件
操作符"==" :基本数据类型比较两个数值是否相等;;引用数据类型比较的是两个地址是否相等
toString():打印对象信息;默认格式是(对象类型+@+hash码的十六进制值);可以在子类中重写以满足对象的属性输出
基本类型包装类(Integer、Character、Byte、Double···)
每个基本数据类型都有对应的包装类,里面包含了该数据所能取值范围的属性和这些属性的获取方法。
Integer类(int包装类)
构造方法:Integer i1 = new Integer(400); //int ---> Integer
Integer i2 = new Integer("-400");//只能传入纯数值类型的字符串System.out.println("int最小值:" + Integer.MIN_VALUE);//获取int类型最小取值
System.out.println("int最大值:" + Integer.MAX_VALUE);//获取int类型最大取值
类型转化://Integer=>int int i4 = i3.intValue();
//int --> Integer Integer i5 = Integer.valueOf(i4);//String =》 int int age = Integer.parseInt("25");
//String =》 Integer Integer age2 = Integer.valueOf("26");
//将int类型的十进制转换成二进制
String s1 = Integer.toBinaryString(100);
//将int类型的十进制转换成十六进制
String s2 = Integer.toHexString(100);
//将int类型的十进制转换成八进制
String s3 = Integer.toOctalString(100);Character类(char包装类)
字符串String str转化为char[]数组:char [] = str.tocharArray();
判断字符char ch是否是数字\大写\小写 CHaracter.isDigit(ch)\\\Character.isUpperCase(ch)\\\\Character.isLowerCase(ch)
BigDecimal类(小数精准计算)
构造方法:BigDecimal bd = new BigDecimal(“122”);必须是字符串传入。
还有一种赋值方法::BigDecimal bd = BigDecimal.valueOf(number);
bd.setScale(2, BigDecimal.ROUND_DOWN);//保留小数点后2位,向下取值
bd.setScale(2, BigDecimal.ROUND_UP);//保留小数点后2位,向上取值
bd.setScale(2, BigDecimal.ROUND_HALF_DOWN);//保留小数点后2位,四舍五入取值BigDecimal的加减乘除其实最终都返回的是一个新的BigDecimal对象,因为BigDecimal是不可变的 (immutable)的,在进行每一步运算时,都会产生一个新的对象,
Random类(生成随机数)
import java.util.Random; import java.util.concurrent.ThreadLocalRandom; /** * @author 宋新元 * @date 2018年8月1日下午3:25:50 随机数 * */ public class RandomMethod { public static void main(String[] args) { Random random = new Random(); // 生成[0,1.0)区间的小数 double d1 = random.nextDouble(); System.out.println(d1); // 生成[0,5.0)区间的小数 double d2 = random.nextDouble() * 5; System.out.println(d2); // 生成[1.0, 2.5)区间的小数 double d3 = random.nextDouble() * 1.5 + 1; System.out.println(d3); // 生成任意的整数 int i1 = random.nextInt(); System.out.println(i1); // 生成[0,10)区间的整数 int i2 = random.nextInt(10); System.out.println(i2); // 生成[0,10]区间的整数 int i3 = random.nextInt(11); System.out.println(i3); // 产生2个随机数 /* * 相同种子数Random对象的问题 r1和r2都是使用了相同的种子数,则每次产生的随机数都是一样 * 如果要得到不一样的随机情况,都只使用一个Random对象 */ Random r1 = new Random(12); // Random r2 = new Random(100); for (int i = 0; i < 9; i++) { System.out.println("r1:" + r1.nextInt()); // System.out.println("r2:" + r2.nextInt()); } // 多线程环境下使用ThreadLocalRandom类,用法和Random类似 ThreadLocalRandom localRandom = ThreadLocalRandom.current(); System.out.println(localRandom.nextInt(10, 100));// 生成10~100之间的随机数 } }
Date日期类
import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; public class DateMethod { public static void main(String[] args) { Date date = new Date();//获取当前时间,创建对象。 System.out.println(date);//输入日历 System.out.println(System.currentTimeMillis());//输出系统时间 毫秒 //日期格式话 DateFormat df = DateFormat.getDateInstance();//日期格式;输出 2018-1-1 System.out.println(df.format(date)); DateFormat df1 = DateFormat.getTimeInstance();//输出时间;10:03:34 System.out.println(df1.format(date)); DateFormat df2 = DateFormat.getDateTimeInstance();//日期+时间 System.out.println(df2.format(date)); DateFormat df3 = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL); System.out.println(df3.format(date));//最完整的日期格式 //自定义风格 DateFormat df4 = new SimpleDateFormat("yyyy年MM月dd日"); //"yyyy年MMMMdd日";八月 System.out.println(df4.format(date)); //把相对应格式的字符串化为时间: String str = "2222年08月13日"; try { Date date1 = df4.parse(str);//这里需要抛出异常 System.out.println(date1); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } DateFormat df5 = new SimpleDateFormat("yyyy年MM月dd日EE hh:mm:ss"); //"yyyy年MMMMdd日";八月 System.out.println(df5.format(date)); } }
Calendar日期类
import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; public class CalendarMethod2 { public static void main(String[] args) { Calendar cal = Calendar.getInstance(); // 获取当前时间,返回calendar对象 System.out.println(cal); System.out.println(cal.getTimeInMillis()); cal.set(2011, 11, 11);//重新定义时间 Calendar c1 = cal; System.out.println(cal.getTimeInMillis()); System.out.println(c1.getTimeInMillis()); cal.set(2014, 11, 11); Calendar c2 = cal;// c1的值也在改变 System.out.println(cal.getTimeInMillis()); System.out.println(c2.getTimeInMillis()); Calendar calendar = Calendar.getInstance(); //获取calendar里面的属性,还有很多自己查找 int year = calendar.get(calendar.YEAR);//当前时间的年份 int month = calendar.get(calendar.MONTH) + 1;//当前时间的月份,从0开始计算 int date = calendar.get(calendar.DATE);//当前时间的多少号 int hour = calendar.get(calendar.HOUR);//当前时间的小时数,12小时制 int minute = calendar.get(calendar.MINUTE);//当前时间的分钟数 int scond = calendar.get(calendar.SECOND); int week = calendar.get(calendar.DAY_OF_WEEK);//当前时间是星期几,返回1~7;其中1是星期天,2是星期一······· System.out.println("年份:" + year); System.out.println("月份:" + month); System.out.println("日期:" + date); System.out.println("小时:" + hour); System.out.println("分钟:" + minute); System.out.println("秒:" + scond); System.out.println("星期:" + week); // 实例 // 计算某一天是一年中的第几个星期 // 判断2018-8-1 cal.set(Calendar.YEAR, 2018); cal.set(Calendar.MONTH, 7); cal.set(Calendar.DAY_OF_MONTH, 1); int weekNo = cal.get(Calendar.WEEK_OF_YEAR);//获取一年中的第几周 System.out.println(weekNo); // 计算一年中的某一周是几号===》 2018年第31周周一是几号? DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); Calendar cal2 = Calendar.getInstance(); cal2.set(Calendar.YEAR, 2018); cal2.set(Calendar.WEEK_OF_YEAR, 31);//设置第31周 cal2.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);//设置第31周的星期一 System.out.println(df.format(cal2.getTime())); } }
String类
java.lang.String
表示不变的常量字符串
通常用于字符串比较,查找,类型转换等。
public class StringMethod { public static void main(String[] args) { // 字符串的定义初始化 // 方式1:字面量的方式 String s1 = "abc";// 将定义的值存放到字符串常量池 // 方式2:使用构造 String s2 = new String("abc");// 会产生2个对象,一个是new出来的存放在堆内存中,"abc"存放在常量池中对象 // 方式三:字符串拼接 String s3 = "a" + "b" + "c"; // 输出 System.out.println(s1 + "," + s2 + "," + s3); //把s2粘贴在s1后面· String string = s1.concat(s2); String string1 = " I have a apple "; String string2 = string1.trim();//去除string1两端空格 System.out.println(string2); /* * 针对字符串比较 == 比较内存地址 equal 比较内容 */ System.out.println(s1 == s2); System.out.println(s2 == s3); System.out.println(s1 == s3); System.out.println(s1.equals(s2)); System.out.println(s2.equals(s3)); System.out.println(s1.equals(s3)); // 以什么字符串开头/结尾 String str = "fsvsbsbs"; System.out.println(str.startsWith("fsv")); System.out.println(str.endsWith("sbs")); //控制台输入2个同学喜欢学科,如果相同输出喜欢的学科一样,否则不一样 Scanner sc = new Scanner(System.in); System.out.println("请输入tom喜欢的学科:"); String tomCourse = sc.next(); System.out.println("请输入jack喜欢的学科:"); String jackCourse = sc.next(); // if (tomCourse.equals(jackCourse)) { //使用忽略大小写的方式比较 if (tomCourse.equalsIgnoreCase(jackCourse)) { System.out.println("两人喜欢的学科一致,都是" + tomCourse); } else { System.out.println("两人喜欢的学科不一致,tom喜欢:" + tomCourse + ",jack喜欢:" + jackCourse); } //字符串拼接 System.out.println("我有" + 100 + "块钱"); System.out.println("我有" + (50 + 50) + "块钱"); System.out.println("我有" + 50 + 50 + "块钱"); //获取字符串的长度 String str1 = "世界杯刚刚过去了"; String string4 = str1.replace("杯", "球");//替换元素,但要创建一个String来接受,自身之不会改变 System.out.println("str的长度:" + str1.length()); //获取某个字符在字符串中的索引 //如果找不到,则返回-1,反之返回索引 int index = str1.indexOf('a'); int index2 = str1.indexOf('了'); System.out.println("a的下标:" + index); System.out.println("'了'的下标:" + index2); //从指定的位置开始查找,查看制定位置元素是否等于制定元素 int index3 = str1.indexOf('了', 8); System.out.println("'了'的下标:" + index3); //查找字符串 int index4 = str1.indexOf("刚刚"); System.out.println("[刚刚]的下标:" + index4); /*****************倒过来查找*******************/ //用来查找字符串中标方是否有相同字符 int index5 = str1.lastIndexOf('了'); int index6 = str1.lastIndexOf('了',3);//从指定位置开始查找 System.out.println("'了'的下标:" + index5); System.out.println("'了'的下标:" + index6); /** * 获取字符串中指定的字符,根据下标指定 */ char ch = str1.charAt(2); System.out.println("[2]下标的字符是:" + ch); /********************字符串截取*********************/ /* * 一个参数:从指定的下标位置开始截取,一直到字符结束 */ String chs = str1.substring(3); System.out.println("截取后的字符串:" + chs); /* * 2个参数 * 参数一:指定下标位置开始 * 参数二:指定结束下标位置,但是不包括此下标的字符。 */ String chs2 = str1.substring(3, 5); System.out.println("截取后的字符串:" + chs2); } }
StringBuffer类
java.lang.StringBuffer
表示允许对内容作改变的变量字符串。
通常用于对内容和长度进行频繁的修改。
线程安全
public class StringBufferMethod { public static void main(String[] args) { //使用构造定义字符串 StringBuffer buffer = new StringBuffer("hello "); //字符串追加 buffer.append("Gem"); System.out.println(buffer); //根据下标获取一个字符 char ch = buffer.charAt(2); System.out.println(ch); //替换字符 buffer.setCharAt(2, 'L'); System.out.println(buffer); //反转 System.out.println(buffer.reverse()); } }
StringBuild类
java.lang. StringBuilder
表示允许对内容作改变的变量字符串。
通常用于对内容和长度进行频繁的修改。
线程不安全
public class StringBuilderMethod { public static void main(String[] args) { // 创建该对象 StringBuilder builder = new StringBuilder(); // 赋值,追加值 builder.append("Hello"); System.out.println(builder); // 在指定的下标位置 插入某个字符串 builder.insert(0, "Gem "); System.out.println(builder); // 替换字符串 builder.replace(3, 4, "@"); System.out.println(builder); // 删除某一段字符串 builder.delete(3, 4); System.out.println(builder); // 反转 System.out.println(builder.reverse()); System.out.println(builder.length()); System.out.println(builder); System.out.println(builder.capacity());// 查看字符对象容量 System.out.println(builder.toString()); // 可以手动更改builder长度 builder.setLength(3); System.out.println(builder.toString()); } }
enum枚举类
import org.junit.Test; enum Weekday{//不同元素使用(,)隔开,最后一位不加符号 Sunday,Monday,TuesDay,Wednesday,Thursday,Friday,Saturday } public class EnumMethid { @Test public void show() { System.out.println(Weekday1.Monday.name());//没什么用,输出Monday System.out.println(Weekday1.Monday.toString());//没什么用,输出Monday int key = 3; switch (key) {//输出这是星期几 case 1: System.out.println(Weekday.Sunday); break; case 2: System.out.println(Weekday.Monday); break; case 3: System.out.println(Weekday.TuesDay); break; case 4: System.out.println(Weekday.Wednesday); break; case 5: System.out.println(Weekday.Thursday); break; case 6: System.out.println(Weekday.Friday);break; case 7: System.out.println(Weekday.Saturday);break; default:break; } for(Weekday w : Weekday.values()){//依次遍历枚举类Weekday System.out.println(w); } } }
我们可以在枚举类里面添加属性和方法,通过枚举值来调用
枚举类可以实现接口,然后通过枚举值来调用实现后的方法
public enum Weekday { //定义枚举值,多个枚举值之间使用逗号分开 //我们也可以在枚举值添加属性、方法,通过枚举值来调用;;这里相当于构造方法Weekday(String); Sunday("这是星期天"), Monday("这是星期一"), Tuesday("这是星期二"), Wednesday("这是星期三"), Thursday("这是星期四"), Friday("这是星期五"), Saturday("这是星期六"); private String annotation;//定义一个属性来储存中文注释 private Weekday(String str) {//定义一个私有构造,用来类里的添加注释 this.annotation = str; } public String getAnnotation() { return annotation; } public void setAnnotation(String annotation) { this.annotation = annotation; } }
枚举类里面还有Sunday.compareTo(Weekday.Monday)方法,来判断枚举类元素的位置前后关系。
import org.junit.Test; public class WeekdayTest { @Test public void show () { System.out.println(Weekday.Monday); System.out.println(Weekday.Monday.getAnnotation()); } }
同样,我们可以在枚举类里面添加抽象方法,在枚举值中加以实现,体现多态
public enum AnimalEnum { cat { public void play() { System.out.println("猫在树上玩"); } public String likeFood() { return "fish"; } }, dog { public void play() { System.out.println("狗在捉老鼠"); } public String likeFood() { return "bone"; } }, rabbit { public void play() { System.out.println("兔子在假睡"); } public String likeFood() { return "carrots"; } }; public abstract void play(); public abstract String likeFood(); }
import org.junit.Test; public class AnimalTest { @Test public void show () { System.out.println(AnimalEnum.cat); AnimalEnum.cat.play(); AnimalEnum.dog.play(); AnimalEnum.rabbit.play(); System.out.println(AnimalEnum.cat+"喜欢吃"+AnimalEnum.cat.likeFood()); } }