Java常用类

API

API(Application Programming Interface) : 应用程序编程接口
也称之为 : 帮助文档

快速使用步骤

  1. 打开帮助文档
  2. 点击显示,找到索引,看到输入框:要学习什么内容,你就在框里面输入什么内容
  •   举例:Random
    
  1. java.lang包下的类在使用的时候是不需要导包的
  2. 看类的描述
  •   Random类是用于生成随机数的类
    
  1. 看构造方法
  •   Random():无参构造方法
      Random r = new Random();
    
  1. 看成员方法
  •   public int nextInt(int n):产生的是一个[0,n)范围内的随机数
    
  1. 调用方法
    看返回值类型:人家返回什么类型,你就用什么类型接收
    看方法名:名字不要写错了
    看形式参数:人家要几个参数,你就给几个,人家要什么数据类型的,你就给什么数据类型的
  •   int number = r.nextInt(100);
    

Scanner类

用Scanner类的方法可以完成接收键盘录入的数据,接收的数据类型为基本数据类型和字符串类型.

import java.util.Scanner;

/*
 * Scanner:用于获取键盘录入数据。(基本数据类型,字符串数据)
 * public String nextLine():获取键盘录入字符串数据
 */
public class ScannerDemo {
	public static void main(String[] args) {
		//创建键盘录入对象
		Scanner sc = new Scanner(System.in);
		
		//接收数据
		System.out.println("请输入一个字符串数据:");
		String line = sc.nextLine(); //对sc对象调用nextline并用String接收
		
		//输出结果
		System.out.println("line:"+line);

Object类

类的描述

  • Object类:类层次结构的根类,所有的类都直接的或者间接的继承自该类
  • 构造方法:Object()

toString()方法

创建一个Student类;
当我们直接输出对象名,发现输出底层调用的是该对象的toString()

public class ObjectDemo {
	public static void main(String[] args) {
		Student s = new Student();//创建一个Student对象
		s.setName("林青霞");
		s.setAge(30);
		System.out.println(s); 
		//在这里其实是输出底层调用的是该对象的toString()
		//即System.out.println(s.toString());
		/*
		 public void println(Object x) { //Object x = s;
	        String s = String.valueOf(x);
	        synchronized (this) {
	            print(s);
	            newLine();
	        }
	    }
	    
	    public static String valueOf(Object obj) { //Object obj = x;
        	return (obj == null) ? "null" : obj.toString();
    	}
	    */
	}
}

查看API,我们发现建议所有子类都重写toString()
因此选择自动生成的/重写Object类的toString()方法

public class Student {
	private String name;
	private int age;
	
	public Student() {}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	@Override
	public String toString() {
		return "Student [name=" + name + ", age=" + age + "]";
	}
	
}

equals()方法

==:

  • 可以比较基本数据类型:比较的是基本数据类型的是否相同;
  • 可以比较引用数据类型,比较的是引用数据类型的地址值是否相同;

比较对象的内容是否相同:

  •   public boolean equals(Object obj)
    

注意
Object类中的equals()方法默认比较的是对象的地址是否相同
如果我们想比较对象的内容是否相同,就必须自己重写该方法
可以通过自动生成重写该方法

public class ObjectDemo {
	public static void main(String[] args) {
		Student s1 = new Student("林青霞", 30);
		Student s2 = new Student("林青霞", 30);
		
		//System.out.println(s1 == s2);//false
		//此时比较的是s1和s2的地址值是否相同
		
		System.out.println(s1.equals(s2));//false
		/*
	    public boolean equals(Object obj) {
	    	//this -- s1
	    	//obj -- s2
	        return (this == obj);
	    }
	    */
	   }
}

在Student类中重写equals()方法

public class Student {
	private String name;
	private int age;
	
	public Student() {}
	
	public Student(String name,int age) {
		this.name = name;
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	@Override
	public String toString() {
		return "Student [name=" + name + ", age=" + age + "]";
	}


	@Override
	public boolean equals(Object obj) {
		//s1.equals(s2)
		//this -- s1
		//obj -- s2
		
		if (this == obj)
			return true; //地址都一样就是同一个对象了
		if (obj == null)
			return false;
		//比较的是对象是否是同一个类的对象
		if (getClass() != obj.getClass())
			return false;
		Student other = (Student) obj; //other -- s2
		//比较内容是否相同
		if (age != other.age) //this.age -- s1.age
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			//字符串的equals()方法比较的是字符串的内容是否相同
			return false;
		return true;
	}
}

String类

概述:

“abc”:String类的一个实例,或者是String类的一个对象
“abc”:字符串字面值,可以看成是一个字符串对象
字符串:是常量,一旦被赋值,就不能被改变
字符串本质:字符数组

构造方法

  1. 字符串数据封装成字符串对象:
  •   String(String original) 
    
  1. 字符数组的数据封装成字符串对象:
  •   String(char[] value)
    
  1. 字符数组的一部分数据封装成字符串对象:
  •   String(char[] value, int index, int count)
    

代码演示

public class StringDemo {
	public static void main(String[] args) {
		//String(String original):把字符串数据封装成字符串对象
		String s1 = new String("hello");
		System.out.println(s1);
		System.out.println("----------");
		
		//String(char[] value):把字符数组的数据封装成字符串对象
		char[] value = {'h','e','l','l','o'};
		String s2 = new String(value);
		System.out.println(s2);
		System.out.println("----------");
		
		//String(char[] value, int index, int count)
		//把字符数组的一部分数据封装成字符串对象
		//String s3 = new String(value,0,value.length);
		String s3 = new String(value,0,3);
		System.out.println(s3);
		System.out.println("----------");
		
		//最常用的!!
		String s4 = "hello";
		System.out.println(s4);
	}
}

创建String类对象的方式和区别

  1. 通过构造方法创建对象:字符串对象是在堆内存

  2. 通过直接赋值的方式创建对象:字符串对象是在方法区的常量池

代码:

public class StringDemo {
	public static void main(String[] args) {
		//构造方法:堆内存
		String s1 = new String("hello");
		String s2 = new String("hello");
		
		//直接赋值:方法区的常量池
		String s3 = "hello";
		String s4 = "hello";
		
		System.out.println(s1 == s2);//false
		System.out.println(s1 == s3);//false
		System.out.println(s3 == s4);//true
	}
}

注:字符串的内容存储在方法区的常量池,这样做是为了方便字符串数据的复用。
图解:
在这里插入图片描述

方法练习

模拟用户登陆

  • 需求
    模拟用户登录,给三次机会,并提示还有几次

  • 方法
    boolean equals(Object obj): 比较字符串的内容是否相同
    boolean equalsIgnoreCase(String str): 比较字符串的内容是否相同,忽略大小写

  • 代码

import java.util.Scanner;

public class StringTest {
	public static void main(String[] args) {
		//定义两个字符串对象,用于存储已经存在的用户名和密码
		String username = "admin";
		String password = "admin";
		
		for(int x=0; x<3; x++) {
			//键盘录入用户名和密码
			Scanner sc = new Scanner(System.in);
			System.out.println("请输入用户名:");
			String name = sc.nextLine();
			System.out.println("请输入密码:");
			String pwd = sc.nextLine();
			
			//拿键盘录入的用户名和密码去跟已经存在的用户名和密码进行比较
			if(username.equals(name) && password.equals(pwd)) {
				System.out.println("登录成功");
				break;
			}else {
				if((2-x) == 0){
					System.out.println("你的帐号被锁定,请与管理员联系");
				}else {
					System.out.println("登录失败,你还有"+(2-x)+"次机会");
				}
			}
		}
	}
}

遍历字符串

  • 需求:
    遍历字符串(获取字符串中的每一个字符)

  • 方法:
    public char charAt(int index): 返回指定索引处的值
    public int length(): 返回字符串中的字符个数,字符串的长度

  • 代码

public class StringTest2 {
	public static void main(String[] args) {
		//要遍历字符串,首先先创建一个字符串
		String s = "abcde";
		
		//public int length():返回字符串中的字符个数(字符串的长度)
		for(int x=0; x<s.length(); x++) {
			System.out.println(s.charAt(x));
		}
	}
}

字符串的拼接

  • 需求:
    把数组中的数据按照指定个格式拼接成一个字符串

  • 例如:

  •   int[] arr = {1,2,3};
      输出结果:[1, 2, 3] (字符串形式)
    
  • 思路

  •   1. 定义一个int类型的数组
      2. 写方法:把数组中的元素按照指定的格式拼接成一个字符串
      3. 输出结果
    
  • 代码:

public class StringTest3 {
	public static void main(String[] args) {
		//定义一个int类型的数组
		int[] arr = {1,2,3};
		
		//调用方法
		String result = arrayToString(arr);
		
		//输出结果
		System.out.println("result:"+result);
	}
	
	public static String arrayToString(int[] arr) {
		String s = "";
		//[1, 2, 3]
		s+="[";
		
		for(int x=0; x<arr.length; x++) {
			if(x==arr.length-1) {
				s += arr[x];
			}else {
				s += arr[x];
				s += ", ";
			}
		}
		
		s+="]";
		return s;
	}
}

字符串反转

  • 需求:
    字符串反转

  • 例如:

  •   键盘录入“abc”		
      输出结果:“cba”
    
  • 思路:

  •   1. 键盘录入字符串数据
      2. 写方法:实现字符串数据的反转(把字符串倒着遍历,在把每一个得到的字符拼接成一个字符串)
      3. 调用方法
      4. 输出结果
    
  • 代码:

public class StringTest4 {
	public static void main(String[] args) {
		//键盘录入字符串数据
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入一个字符串:");
		String s = sc.nextLine();
		
		//写方法实现字符串数据的反转
		
		//调用方法
		String result = reverse(s);
		
		//输出结果
		System.out.println("result:"+result);
	}
	
	public static String reverse(String s) {
		//把字符串倒着遍历,在把每一个得到的字符拼接成一个字符串
		String ss = "";
		
		for(int x=s.length()-1; x>=0; x--) {
			ss += s.charAt(x);
		}
		
		return ss;
	}
}

StringBuilder类

概述

  • StringBuilder: 是一个可变的字符串;字符串缓冲区类

  • String 和 StringBuilder的区别:
    【String的内容是固定的】
    【StringBuilder的内容是可变的】

  • +=拼接字符串耗内存
    每次拼接都会产生新的字符串对象,而利用StringBuilder来拼接字符串自始至终用的都是同一个StringBuilder容器

  • 图解:
    在这里插入图片描述

构造方法

  • public StringBuilder()
  • public StringBuilder(String str)

构造方法的使用示例:

public class StringBuilderDemo {
	public static void main(String[] args) {
		//public StringBuilder()
		StringBuilder sb = new StringBuilder();
		System.out.println("sb:"+sb);
		System.out.println(sb.length());
		System.out.println("----------------");
		
		//public StringBuilder(String str)
		StringBuilder sb2 = new StringBuilder("helloworld");
		System.out.println("sb2:"+sb2);
		System.out.println(sb2.length());
	}
}

成员方法

  • public String toString(): 返回此序列中数据的 字符串表示形式
  • public StringBuilder append(任意类型): 添加数据,并返回对象本身
  • public StringBuilder reverse(): 字符串本身进行反转

使用示例

public class StringBuilderDemo {
	public static void main(String[] args) {
		//创建对象
		StringBuilder sb = new StringBuilder();
		
		//链式编程
		sb.append("hello").append("world").append(true).append(100);
		
		System.out.println("sb:"+sb);
		
		//public StringBuilder reverse()
		sb.reverse();
		System.out.println("sb:"+sb);
	}
}

案例

String和StringBuilder相互转换

StringBuilder – String

  •  public String toString():
     通过toString()就可以实现把StringBuilder转换为String
    

String – StringBuilder

  •  public StringBuilder(String s):
     通过构造方法就可以实现把String转换为StringBuilder
    
public class StringBuilderTest {
	public static void main(String[] args) {

		//StringBuilder -- String
		StringBuilder sb = new StringBuilder();
		sb.append("hello");

		//public String toString()
		String s = sb.toString();
		System.out.println(s);

		
		//String -- StringBuilder
		/*
		String s = "hello";
		StringBuilder sb = new StringBuilder(s);
		System.out.println(sb);
		*/
	}
}

数组拼接成字符串

例如

  •   int[] arr = {1,2,3};
      输出:[1, 2, 3]
    

代码

public class StringBuilderTest2 {
	public static void main(String[] args) {
		//定义一个int类型的数组
		int[] arr = {1,2,3};
		
		//写方法实现把数组中的元素按照指定的格式拼接成一个字符串
		
		//调用方法
		String result = arrayToString(arr);
		
		//输出结果
		System.out.println("result:"+result);
	}

	public static String arrayToString(int[] arr) {
		StringBuilder sb = new StringBuilder();
		//[1, 2, 3]
		sb.append("[");
		
		for(int x=0; x<arr.length; x++) {
			if(x==arr.length-1) {
				sb.append(arr[x]);
			}else {
				sb.append(arr[x]).append(", ");
			}
		}
		
		sb.append("]");
		
		String s = sb.toString();
		
		return s;
		
	}
}

字符串反转

代码

public class StringBuilderTest3 {
	public static void main(String[] args) {
		//键盘录入一个字符串数据
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入一个字符串:");
		String s = sc.nextLine();
		
		//写方法实现字符串数据的反转
		
		//调用方法
		String result = myReverse(s);
		
		//输出结果
		System.out.println("result:"+result);
		
	}
	public static String myReverse(String s) {
		//String -- StringBuilder -- reverse() -- String
		/*
		StringBuilder sb = new StringBuilder(s);
		sb.reverse();
		String ss = sb.toString();
		return ss;
		*/
		
		return new StringBuilder(s).reverse().toString();
	}
}

Arrays类

概述

Arrays类:提供了对数组操作的各种方法

构造方法

  • 在帮助文档中没有看到Arrays类的构造方法:
    Arrays类中有构造方法,只不过构造方法被private修饰,外界是无法使用的。因此帮助文档中没有显示。

  • 可以通过查看源码的方式找到:
    private Arrays() {}

  • 工具类的设计思想

  •   构造方法私有;
      成员都用static修饰;
      (例如Math,Collections,Arrays类等)
    

成员方法

public static String toString(int[] a): 把数组转成字符串
public static void sort(int[] a): 对数组进行升序排序

import java.util.Arrays;

public class ArraysDemo {
	public static void main(String[] args) {
		//定义一个数组
		int[] arr = {24,69,80,57,13};
		
		//public static String toString(int[] a):把数组转成字符串
		System.out.println("排序前:"+Arrays.toString(arr));
		
		//public static void sort(int[] a):对数组进行升序排序
		Arrays.sort(arr);
		
		System.out.println("排序后:"+Arrays.toString(arr));
	}
}

包装类

概述

为了对基本数据类型进行更多更方便的操作,Java就针对每一种基本数据类型提供了一个对应的引用类型

基本类型包装类

基本数据类型包装类最常见的用法:和字符串之间进行相互转换

	Byte	-- byte
	Short 	-- short
	Integer	-- int
	Long	-- long
	Float	-- float
	Double	-- double
	Character -- char
	Boolean	-- boolean

Integer 类

Integer类在对象中包装了一个基本类型 int 的值

构造方法

  •   Integer(int value) 
      Integer(String s) 
      	注意:这个字符串s 必须由数字字符组成
    
  • 示例

public class IntegerDemo {
	public static void main(String[] args) {
		//Integer(int value) 
		int value = 100;
		Integer i = new Integer(value);
		System.out.println(i); //100
		System.out.println("------------");
		
		//Integer(String s) 
		String s = "100";
		Integer ii = new Integer(s);
		System.out.println(ii);
	}
}

案例

int和String类型相互转换

int – String

  •   String类中:public static String valueOf(int i)
    

String – int

  •   Integer类中:public static int parseInt(String s)
    
  • 代码

public class IntegerDemo {
	public static void main(String[] args) {
		//int	--	String
		int number = 100;
		//方式1
		String s1 = "" + number;
		System.out.println(s1);
		//方式2
		//public static String valueOf(int i)
		String s2 = String.valueOf(number);
		System.out.println(s2);
		System.out.println("--------------");
		
		//String  -- int
		String s = "100";
		//方式1
		//String -- Integer -- int
		Integer i = new Integer(s);
		//public int intValue()
		int x = i.intValue();
		System.out.println(x);
		//方式2
		//public static int parseInt(String s)
		int y = Integer.parseInt(s);
		System.out.println(y);
		
	}
}

字符串中数据排序

例如

  •   我有如下一个字符串:“91 27 46 38 50”
      请写代码实现最终输出结果是:“27 38 46 50 91”
    

思路

  •   1. 定义一个字符串对象
      2. 把字符串中的数字数据存储到一个int类型的数组中
      3. 对int数组进行排序
      4. 把排序后的数组中的元素进行拼接得到一个字符串
      5. 输出字符串
    

代码

public class IntegerDemo {
	public static void main(String[] args) {
		//定义一个字符串对象
		String s = "91 27 46 38 50";
		
		//把字符串中的数字数据存储到一个int类型的数组中
		//public String[] split(String regex)
		String[] strArray = s.split(" "); //按照空格进行分割
		
		//定义一个int类型的数组
		//将字符串中的数字数据存储到一个int类型的数组中
		int[] arr = new int[strArray.length];
		for(int x=0; x<arr.length; x++) {
			arr[x] = Integer.parseInt(strArray[x]);
		}
		
		//对int数组进行排序
		Arrays.sort(arr);
		
		//把排序后的数组中的元素进行拼接得到一个字符串
		StringBuilder sb = new StringBuilder();
		for(int x=0; x<arr.length; x++) {
			if(x==arr.length-1) {
				sb.append(arr[x]);
			}else {
				sb.append(arr[x]).append(" ");
			}
		}
		String result = sb.toString();
		
		//输出字符串
		System.out.println("result:"+result);
	}

JDK5新特性

  • 自动装箱:把基本数据类型转换为对应的包装类类型
    public static Integer valueOf(int i)

  • 自动拆箱:把包装类类型转换为对应的基本数据类型
    public int intValue()

  • 注意:在使用包装类类型的新特性的时候,如果做操作,最好先判断是否为null

  • 开发中的原则:只要是对象,在使用前就必须进行不为null的判断

Date类

Date表示特定的瞬间,精确到毫秒

构造方法

  • Date(): 根据当前时间创建的日期对象
  • Date(long date): 根据给定的毫秒值创建对象,从1970 年 1 月 1 日 00:00:00 开始

示例

public class DateDemo {
	public static void main(String[] args) {
		//Date()
		Date d = new Date();
		System.out.println(d);
		
		//Date(long date) 
		long date = 1000 * 60 * 60;
		Date dd = new Date(date);
		System.out.println(dd);
	}
}

成员方法

  • public long getTime(): 获取的是毫秒值(从1970年1月1日 00:00:00开始的)
  •   从Date得到一个毫秒值:
      getTime()
    
  • public void setTime(long time): 设置时间,给的是毫秒值ms
  •   从一个毫秒值得到一个Date对象:
      1. 构造方法:Date(long date)
      2. setTime(long time)
    

示例:

public class DateDemo2 {
	public static void main(String[] args) {
		//创建对象
		Date d = new Date();
		
		//public long getTime()
		System.out.println(d.getTime());
		
		//public void setTime(long time)
		d.setTime(1000*60*60);
		System.out.println(d.getTime());
	}
}

SimpleDateFormat类

概述

是一个以与语言环境有关的方式来格式化和解析日期的具体类
它允许进行格式化(日期 -> 文本);解析(文本 -> 日期)

  • 格式化(日期 -> 文本): Date – String
    public final String format(Date date)
  • 解析(文本 -> 日期): String – Date
    public Date parse(String source)

构造方法

  • SimpleDateFormat(): 用默认的模式
  •   SimpleDateFormat sdf = new SimpleDateFormat();
    
  • SimpleDateFormat(String pattern):用给定的模式
  •   SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
    
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class SimpleDateFormatDemo {
	public static void main(String[] args) throws ParseException {
		/*
		//Date -- String
		Date d = new Date();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
		String s = sdf.format(d);
		System.out.println(s);
		*/
		
		//String -- Date
		String str = "2080-08-08 12:23:45";
		//把一个字符串解析为日期的时候,请注意模式字符串和给定的日期字符串的格式要匹配
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Date d = sdf.parse(str);
		System.out.println(d);
	}
}

练习

制作工具类DateUtil

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/*
 * 工具类
 * 
 * 构造方法私有
 * 成员方法静态
 */
public class DateUtil {
	private DateUtil() {}
	// 把日期转换为指定格式的字符串
	public static String dateToString(Date date, String format) {
		SimpleDateFormat sdf = new SimpleDateFormat(format);
		String s = sdf.format(date);
		return s;
	}
	
	// 把指定格式的字符串解析为日期
	public static Date stringToDate(String s,String format) throws ParseException {
		SimpleDateFormat sdf = new SimpleDateFormat(format);
		Date d= sdf.parse(s);
		return d;
	}
}

测试工具类

import java.text.ParseException;
import java.util.Date;

public class DateUtilTest {
	public static void main(String[] args) throws ParseException {
		Date d = new Date();
		
		String s = DateUtil.dateToString(d, "yyyy年MM月dd日 HH:mm:ss");
		System.out.println(s);
		
		String s2 = DateUtil.dateToString(d, "yyyy年MM月dd日");
		System.out.println(s2);
		
		String s3 = DateUtil.dateToString(d, "HH:mm:ss");
		System.out.println(s3);
		
		String str = "2080-08-08 12:23:34";
		Date dd = DateUtil.stringToDate(str, "yyyy-MM-dd HH:mm:ss");
		System.out.println(dd);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值