目录
一、Scanner
scanner中的方法:
import java.util.Scanner; public class Test { public static void main(String[] args) { //创建Scanner对象 Scanner sn = new Scanner(System.in); //1.接受整形数据,结束标志为/r/n,但不会将/r/n接收进去 System.out.println(sn.nextInt()); //2.接收字符串数据,结束标志为/r/n,会将/r/n接收进去 System.out.println(sn.nextLine()); //3.接收字符串数据,结束标志为空格,在回车之后也不会将/r/n接收进去 System.out.println(sn.next()); System.out.println(sn.nextLine()); } }
问题:若在nextInt()与next()输入数据后就直接回车运行,则可以明显发现错误,两次nextLine()都会被跳过不执行。
原因:nextInt()与next()不会将/r/n接收进去,所以在输入数据后直接回车则会导致下一次的输入第一个符号就是/r/n导致直接结束。
解决方法一:
在nextInt()与next()后加空格再将要输入进nextLine()的数字输入再进行回车则不会跳过nextLine().
原因:
输入数据后添加相对应的结束符再直接输入下次输入的数据进行回车,则不会出现/r/n在下次输入时出现,使数据可以正常输入。
解决方法二:(推荐)
使用包装类Integer类型转换
import java.util.Scanner; public class Test { public static void main(String[] args) { //创建Scanner对象 Scanner sn = new Scanner(System.in); //先将数字用字符串的形式输入 String numString = sn.nextLine(); //将字符串用包装类Interger的静态方法将数字字符串转成整形 int num = Integer.parseInt(numString); System.out.println(num); //正常输入下一个字符串 System.out.println(sn.nextLine()); } }
二、Object
Object中的两个成员方法
1.public String toString()
会返回该对象的地址值,子类一般对此方法重写。
在直接使用对象名使会调用该方法。
//未重写toString public class NonRewrite { int num; String name; public NonRewrite(int num, String name) { this.num = num; this.name = name; } }
//重写toString public class Rewrite extends Object { int num; String name; public Rewrite(int num, String name) { this.num = num; this.name = name; } @Override public String toString() { return "ObjectSon{" + "num=" + num + ", name='" + name + '\'' + '}'; } }
//测试 public class Test { public static void main(String[] args) { NonRewrite nr = new NonRewrite(15,"李四"); System.out.println(nr);//未重写会输出地址 Rewrite rw = new Rewrite(10,"张三"); System.out.println(rw);//重写会调用重写方法,与rw.toString()相同 } }
2.public boolean equals(Object obj)
//定义类 import java.util.Objects; public class Student { int num; String name; public Student(int num,String name) { this.num = num; this.name = name; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Student student = (Student) o; return num == student.num && Objects.equals(name, student.name); } @Override public int hashCode() { return Objects.hash(num, name); } }
//测试 public class Test { public static void main(String[] args) { Student student1 = new Student(10,"张三"); Student student2 = new Student(10,"张三"); System.out.println(student1==student2); // 比较地址值 System.out.println(student1.equals(student2));//比较对象元素 } }
三、String
String是不可变对象
1.String的创建方式
public class Test {
public static void main(String[] args) {
//String的创建方式:
//1.
//"abc"会存在方法区的常量池,赋值时会在常量池查看是否已有对应常量,有则会直接对其引用不会重新创建
String str1 = "abc";
String str2 = "abc";
System.out.println(str1==str2);
System.out.println(str1);
//2.
//当使用new则会在堆中创建新对象,不会查看是否有相同对象(不是指地址相同),直接创建
String str3 = new String("abc");
String str4 = new String("abc");
System.out.println(str3==str4);
System.out.println(str3);
//3.
char[] charLst = {'a','b','c'};
String str5 = new String(charLst);
System.out.println(str5);
//4.左闭右开
String str6 = new String(charLst,0,2);
System.out.println(str6);
//5.
byte[] byteLst = {'a','b','c'};
String str7 = new String(byteLst);
System.out.println(str7);
//6.
String str8 = new String(byteLst,0,2);
System.out.println(str8);
}
}
2.String常用方法
public class Test {
public static void main(String[] args) {
String str1 = "abc";
String str2 = "bcd";
String str3 = "ABC";
System.out.println(str1 == str2); //判断地址是否相同
System.out.println(str1.equals(str2)); //String已经重写了equals()函数,判断两个对象是否相等
System.out.println(str1.equals(str3));
System.out.println(str1.equalsIgnoreCase(str3)); //忽略大小写
System.out.println(str1.length()); //放回字符串长度
System.out.println(str1.charAt(0)); //放回字符串第几位的字符,从零开始
System.out.println(str1.concat(str2)); //拼接字符串
}
}
四、StringBuilder
StringBuilder类在java.lang包下, 可直接使用。
StringBuilder对象中的内容是可变的。
满足了String不可变的需求。
public class Test { public static void main(String[] args) { //无参创造对象 StringBuilder sb1 = new StringBuilder(); //String类型传入参数,已重写toString对象 StringBuilder sb2 = new StringBuilder("abc"); System.out.println(sb2); //append()函数拼接字符串 System.out.println(sb1.append("abc")); //返回一个拼接后的新对象 System.out.println(sb2.append("efg")); System.out.println(sb1); //自身也会改变为拼接后的字符串 System.out.println(sb2); System.out.println(sb1.reverse()); //返回一个翻转后的新对象 System.out.println(sb1); //自身也会改变为翻转后的字符串 String str = sb1.toString(); //转为String } }
五、Arrays工具类
Arrays是针对数组进行操作的工具类,在java.util下,需要导包。
工具类的规范:
1.构造方法私有化,外界无法调用其构造函数,从而达到无法创造Arrays实例对象的目的。
2.成员方法都是静态的,因无法创造Arrays实例对象,只有通过静态方法能被外界调用。
import java.util.Arrays; public class Test { public static void main(String[] args) { int[] arr ={4,3,2,1}; System.out.println(Arrays.toString(arr)); //转为字符串类型 Arrays.sort(arr); //排序 System.out.println(Arrays.toString(arr)); } }
六、包装类
为了对基本类型进行更多更方便的操作,对每种基本类型提供了对应的引用类型即包装类。
基本类型 | byte | short | char | int | long | float | double | boolean |
---|---|---|---|---|---|---|---|---|
包装类 | Byte | Short | Character | integer | Long | Float | Double | Boolean |
//Integer
public class Test {
public static void main(String[] args) {
//两种方式创建Integer对象
Integer num = new Integer(123); //参数为int
Integer str = new Integer("321"); //参数为String
System.out.println(num); //已重写toString()方法
System.out.println(str);
//String -> int
//1.
String strg = "123";
Integer int_s = new Integer(strg);
//2.
System.out.println(int_s.intValue());
System.out.println(Integer.parseInt(strg));
//自动装箱
Integer auto = 111;
System.out.println(auto);
System.out.println(auto+111);
}
}
七、Date
Date类可以用于获取当前时间与设定时间,还可用于时间与时间戳的转换
import java.util.Date;
public class Test {
public static void main(String[] args) {
//创建Date对象
Date date1 = new Date();
Date date2 = new Date(0L);
System.out.println(date1);
System.out.println(date2);
//设置时间(使用时间戳)
date1.setTime(15948984819884L);
System.out.println(date1);
//获取时间(获得时间戳)
System.out.println(date1.getTime());
}
}
八、SimpleDateFormat
SimpleDateFormat类用于格式化字符串与时间之间的转化
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Test {
public static void main(String[] args) throws ParseException {
Date date = new Date(1594898481984L);
String str = "2020年4月4日 12:22:30";
//未格式化时间
System.out.println(date);
//创建SimpleDateFormat对象
SimpleDateFormat sd = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
//格式化
System.out.println(sd.format(date));
//将已经格式化的字符串转成时间
System.out.println(sd.parse(str));
}
}
九、Calendar
calendar类可以对日期进行操作
import java.util.Calendar;
public class Test {
public static void main(String[] args){
//该类为抽象类,需要通过调用Calendar.getInstance()获取该类的子类获取对象
Calendar cld = Calendar.getInstance();
System.out.println(cld.get(Calendar.YEAR)); //静态成员为int类型,可以填写对应的数字
System.out.println(cld.get(Calendar.MONTH));
System.out.println(cld.get(Calendar.DAY_OF_MONTH));
System.out.println(cld.get(Calendar.DAY_OF_WEEK));
System.out.println(cld.get(Calendar.DAY_OF_YEAR));
System.out.println(cld.get(Calendar.DATE));
}
}