关于Object,Scanner,String等类的基本用法

Object类:

1)Object:是类层次的根类,每个类都使用Object作为超类(父类)

1. public int hashCode()返回该对象的哈希码值--把它理解为地址值(不是实际意义的地址值)

2.public final Class getClass()返回此Object 的运行时类

          Class类中有一个方法:

                public String getName ()以String的形式返回此Class对象所表现的实体(类,接口,数组类,基本类型或               void)名称;

  返回值是Class(JavaSE最后一天:反射)

 
public class Object1 {
public static void main(String[] args) {
	//创建学生类对象
	Student1 s1= new Student1();
	Student1 s2=new Student1();
     //返回该对象的哈希码值(地址值)
	System.out.println(s1.hashCode());
	System.out.println(s2.hashCode());
	System.out.println("-------------");
	//返回Student的运行时类
	Class cl1=s1.getClass();
	Class cl2=s2.getClass();
	System.out.println(cl1);
	System.out.println(cl2);
	System.out.println("-----------");
	//以String的形式返回Class对象所表现的Student类名称
	System.out.println(cl1.getName());
	System.out.println(s2.getClass().getName());
}
}
public class Student1 {

}

2)Object中的一个方法:

         public String toString();返回该对象的字符串形式

                Integer:是int类的包装类类型
   它里面提供了一个方法
   public static String toHexString(int i):以十六进制表示对字符串形式
 直接输出对象名称:实际执行了Object中的toString(),输出的全类名@十六进制数据
   System.out.println(s1.toString());//org.westos.Object1.Student1@4e25154f

  我现在输出对象名称,不想让toString()直接输出的是一个地址值(对象的地址值) 就需要重写Object中的toSring(),一般情况:自动生成即可 ,建议所有子类都重写此方法。 

 
 
 
package org.westos.Object2;

public class Student {
    private String name;
    private int age;
	public Student() {
		super();
		// TODO Auto-generated constructor stub
	}
	public Student(String name, int age) {
		super();
		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;
	}
	//重写toString方法
	@Override
	public String toString() {
		return "Student [name=" + name + ", age=" + age + "]";
	}

}
package org.westos.Object2;

public class Object {
public static void main(String[] args) {
	//创建Student对象
	Student s=new Student("666",999);
	//调用toString()方法
	System.out.println(s.toString());
}
}
3) public boolean equals(Object obj)指示其他某个对象是否与此对象“相等”。 
 
 ==:比较的值相等(地址值)

 equals:本身属于Object类中的方法,默认比较的是地址值是否相同

public class Student1 {

}
package org.westos.Object1;

public class Object1 {
public static void main(String[] args) {
	//创建学生类对象
	Student1 s1= new Student1();
	Student1 s2=new Student1();

	System.out.println(s1.equals(s2));//false
}
}

 按照正常情况:equals方法底层实际执行的两个对象在==,比较是地址值;假如:学生的年龄和姓名一致,看成同一个人

 在自定义的类中,重写Object中的equals()方法,比较是两个对象的成员变量的值是否相同.

package org.westos.Object2;


public class Student {
    private String name;
    private int age;
	public Student() {
		super();
		// TODO Auto-generated constructor stub
	}
	public Student(String name, int age) {
		super();
		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;
	}
	//重写toString方法
	@Override
	public String toString() {
		return "Student [name=" + name + ", age=" + age + "]";
	}
	
	//重写equals方法
	@Override
	public boolean equals(java.lang.Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Student other = (Student) obj;
		if (age != other.age)
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}
package org.westos.Object2;

public class Object {
public static void main(String[] args) {
	//创建Student对象
	Student s=new Student("666",999);
	//调用toString()方法
	System.out.println(s.toString());

   Student s1=new Student("666",999);
    System.out.println(s==s1);//false
    System.out.println(s.equals(s1));//true
 
}
}
4)protected Object clone()创建并返回此对象的一个副本
  
  Object 类的 clone 方法执行特定的复制操作。首先,如果此对象的类不能实现接口 Cloneable,则会抛出 CloneNotSupportedException。
 
   注意,所有的数组都被视为实现接口 Cloneable


package org.westos.Object2;

public class Student implements Cloneable {
    private String name;
    private int age;
	public Student() {
		super();
		// TODO Auto-generated constructor stub
	}
	public Student(String name, int age) {
		super();
		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;
	}
	//重写toString方法
	@Override
	public String toString() {
		return "Student [name=" + name + ", age=" + age + "]";
	}
	
	//重写equals方法
	@Override
	public boolean equals(java.lang.Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Student other = (Student) obj;
		if (age != other.age)
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}
	@Override
	protected java.lang.Object clone() throws CloneNotSupportedException {
		// TODO Auto-generated method stub
		return super.clone();
	}
   
}
package org.westos.Object2;

public class Object {
public static void main(String[] args)throws CloneNotSupportedException {
	//创建Student对象
	Student s=new Student("666",999);
	//调用toString()方法
	System.out.println(s.toString());

   Student s1=new Student("666",999);
    System.out.println(s==s1);//false
    System.out.println(s.equals(s1));//true
     java.lang.Object obj= s.clone();
     Student s2=(Student)obj;
     System.out.println(s2==s);
     System.out.println(s2.equals(s));
}
}

Scanner:

1) Scanner类: 简单文本扫描器。
 回想:键盘录入的步骤
   1)需要创建键盘录入对象
   Scanner sc =new Scanner(System.in);
   2)导入包:import java.util.Scanenr;   ctrl+shift+o
   3)接收数据

   XXX 变量名= sc.nextXXX(); 

          构造方法:public Scanner(InputStream source): 以输入流的形式录入数据的

  InputStream:字节输入流:

               InputStream  in = System.in ; //底层执行返回的是一个字节输入流(标准输入流)

2)Scanner类的一些常见的方法:
  XXX 变量名 = 键盘录入对象.nextXXX();
 在Scanner类中它提供一个判断功能:
  public boolean hasNextXXX():当前扫描器判断是否有下一个可以录入的XXX类型数据
  nextXXX();
 
  java.util.InputMismatchException:录入的数据和接收的数据类型不匹配异常

package org.westos.Scanner2;

import java.util.Scanner;

public class ScannerDemo1 {
public static void main(String[] args) {
	Scanner sc=new Scanner(System.in);
	//录入数据
	System.out.println("请输入一个数据");
	if(sc.hasNextInt()) {
		int i=sc.nextInt();
		System.out.println(i);
	}
	else {System.out.println("你输入的数据类型有误");}
}
}
3)问题:
   键盘录入两个int类型的数据,分别输出,没有问题
  键盘录入两个String类型的数据,分别输出:没有问题
   先录入一个String类型的数据,在录入int类型的数据,没有问题
   先录入一个int类型的数据,在录入String类型的数据,有问题,第二个数据是字符串类型,又由于录入下一        个数据要"空格"本身是一个字符串,b是空格,b的值没有录入!
   如何解决:重写创建键盘录入对象
  
package org.westos.Scanner2;

import java.util.Scanner;

public class ScannerDemo2 {
public static void main(String[] args) {
	Scanner sc=new Scanner(System.in);
	//录入数据
	System.out.println("请输入第一个数据");
	int a=sc.nextInt();
	System.out.println("请输入第二个数据");
	//String b=sc.nextLine();
	//System.out.println("a="+a+",b="+b);
	//重新创建一个键盘录入对象
	Scanner sc2=new Scanner(System.in);
	String b=sc2.nextLine();
	System.out.println("a="+a+",b="+b);

}
}

Scanner:

1) String:表示字符串:
   字符串是常量;它们的值在创建之后不能更改。
  String是一种特殊的引用类型:
   默认值:null
 
 构造方法:
String():无参构造
String(byte[] bytes) :将字节数转换成字符串
public String(byte[] bytes, int index,int length):将字节数组的一部分转换成字符串
public String(char[] value):将字符数组转化成字符串     toCharArray():将字符串转换成字符
  public String(char[] value, int index, int count):将字符数组的一部分转换成字符串
  public String(String original):将一个字符串常量构造成一个字符串对象




常用的方法:
public int length()返回此字符串的长度

面试题:
数组中有没有length(),字符串中有没有length(),集合中有没有length()?

数组中没有length()方法,只有length属性
字符串中有length()
集合中没有length(),获取集合的元素数:size()

package org.westos.String1;

public class StringDemo1 {
public static void main(String[] args) {
	String str1=new String();
	System.out.println("str1="+str1);//返回的不是地址值,说明String类重写了Object类的toString()方法
	System.out.println("------------");
	byte[]bytes= {48,78,97,65,79,99};
	String str2=new String(bytes);//将字节数组转换成字符串
	System.out.println("str2="+str2);
	System.out.println(str2.length());//返回该字符串的长度
	String str3=new String(bytes,2,3);//将字节数组的一部分转换成字符串
	System.out.println("str3="+str3);
	System.out.println("----------");
	char []value= {'我','是','渣','团','球','迷'};
	String str4=new String(value);//将字符数组转换成字符串
	System.out.println("str4="+str4);
	String str5=new String(value,2,3);//将字符数组的一部分转换为字符串
	System.out.println("str5="+str5);
	System.out.println("----------");
	String str="tgrdg";
	String str6=new String(str);//将一个字符串常量构造成一个字符串对象
	System.out.println("str6="+str6);
	System.out.println("----------");
	String str7="";//字符串内容为空
	String str8=null;//对象为空
	
}
}
2)String字符串的最大的特点:
  字符串一旦被赋值,其值不能被改变
package org.westos.String1;

public class StringDemo2 {
public static void main(String[] args) {
	String str1="asdfzxcv";
	String str2="qwer";
	change(str1,str2);//该方法调用后,在main方法str1和str2的只并没有改变
	System.out.println("str1="+str1);//"asdfzxcv"
	System.out.println("str2="+str2);//"qwer"
}
public static void change(String str1,String str2) {
	str1+=str2;
	str2+=str1;
	System.out.println("str1="+str1+",str2="+str2);
}
}
3)
package org.westos.String1;

public class StringDemo3 {
public static void main(String[] args) {
	String str1=new String("999");
	String str2="999";
	System.out.println(str1==str2);//false
	System.out.println(str1.equals(str2));//true:说明String类把Object类的equals()方法重写了
	System.out.println("-----------");
	String str3=new String("666");
	String str4=new String("666");
	System.out.println(str3==str4);//false
	System.out.println(str3.equals(str4));//true
	System.out.println("--------------");
	String str5="777";
	String str6="777";
	System.out.println(str5==str6);//true:常量赋值:如果字符串常量区有,就直接调用.所以str6的地址值与str5一致
	System.out.println(str5.equals(str6));//true
}
}
4)String类的常用的判断功能
 
   boolean equals(Object obj):将此字符串与指定的对象比较
boolean equalsIgnoreCase(String str)将此 String 与另一个 String 比较,不考虑大小写
boolean contains(String str):判断当前大川中是否包含子字符串  (重点)
boolean startsWith(String str):以当前str字符串开头(重点)
boolean endsWith(String str):以当前str字符串结尾(重点)
boolean isEmpty():判断字符串是否为空
public String concat(String str):字符串的特有功能:拼接功能和+拼接符是一个意思
String类的常用的判断功能
 *
 * 		boolean equals(Object obj):将此字符串与指定的对象比较
		boolean equalsIgnoreCase(String str)将此 String 与另一个 String 比较,不考虑大小写
		boolean contains(String str):判断当前大川中是否包含子字符串  (重点)
		
		boolean startsWith(String str):以当前str字符串开头(重点)
		boolean endsWith(String str):以当前str字符串结尾(重点)
		boolean isEmpty():判断字符串是否为空
		
		
		public String concat(String str):字符串的特有功能:拼接功能和+拼接符是一个意思
5)String类的常用获取功能:
 
  public int length():获取字符串的长度
  public char charAt(int index)返回指定索引处的 字符
  public int indexOf(int ch)返回指定字符在此字符串中第一次出现处的索引
   问题:既然传入的字符:这里为什么用int类型 ,'a'和97 都表示a
  public int indexOf(int ch,int fromIndex)返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索。
  public int indexOf(String str)返回指定子字符串在此字符串中第一次出现处的索引
  public int indexOf(String str,int fromIndex)回在此字符串中第一次出现指定字符串处的索引,从指定的索引开始搜索。 
  截取功能
  public String substring(int beginIndex):从指定位置开始截取,默认截取到末尾,返回新的字符串

  public String substring(int beginIndex, int endIndex):从指定位置开始到指定位置末尾结束,包前不包后

package org.westos.String1;

public class StringDemo5 {
public static void main(String[] args) {
	String str1="wotiqiuhaixing";
	String str2="wotiqiuhaixing";
	System.out.println(str1==str2);//true
	System.out.println(str1.length());//14
	System.out.println("-----------");
	System.out.println(str1.charAt(3));//'i'
	System.out.println(str1.indexOf(97));//8
	System.out.println(str2.indexOf('i',4));//5
	System.out.println("---------");
	System.out.println(str2.indexOf("qiu"));//4
	System.out.println(str1.indexOf("qiu",2));//4
	System.out.println("-----------");
	System.out.println(str1.substring(3));//"iqiuhaixing"
	System.out.println(str1.substring(4, 7));//"qiu"
}
}
6)在不使用main方法的情况下,调用org.junit.Test;在该类直接造方法作为测试方法
package org.westos.String1;
import org.junit.Test;
public class StringDemo6 {
    
	@Test
	public void start() {
		String str="niliubi";
		System.out.println(str);
	}
}

7) String的常用转换功能:
 
  public byte[] getBytes() :将字符串转换为字节数组
  public char[] toCharArray() :将字符串转换成字符数组(重点)
  public static String valueOf(int i):将int类型的数据转换成字符串(重点)
   这个方法可以将任何类型的数据转化成String类型
  public String toLowerCase():转成小写
  public String toUpperCase():字符串中所有的字符变成大写
  

package org.westos.String1;
import org.junit.Test;
public class StringDemo7 {
  @Test
  public void start() {
   String str="wojavaxuedehaixing";
   byte [] by=str.getBytes();
   System.out.print("[");
   for(int i=0;i<by.length;i++) {
	   if(i==by.length-1)
		   System.out.println(by[i]+"]");
	   else System.out.print(by[i]+",");
   }
   System.out.println("----------");
   char []ch=str.toCharArray();
   System.out.print("[");
   for(int i=0;i<ch.length;i++) {
	   if(i==ch.length-1)
		   System.out.println(ch[i]+"]");
	   else System.out.print(ch[i]+",");
   }
   System.out.println("----------");
   System.out.println(String.valueOf(45));//"45"
   System.out.println(str.toUpperCase());
   String str2="ASDFQWERZXCVJKL";
   System.out.println(str2.toLowerCase());
  }
}

8) String类型的其他功能:

  public String replace(char oldChar,char newChar):将大字符串中的某个字符替换掉成新的字符

   public String replace(String oldStr,String newStr):将大串中的某个子字符串替换掉

                public String trim():去除字符串两端空格

                public int compareTo(String anotherString)按字典顺序比较两个字符串

package org.westos.String1;

public class StringDemo8 {
public static void main(String[] args) {
	String str="  qwerasdf  tyuiop  ";
	System.out.println(str.replace('w','z'));
	System.out.println(str.replace("qwer","zxcv"));
	System.out.println(str.trim());
	System.out.println("------");
	String str2="hello";
	String str3="heles";
	String str4="hellojava";
	System.out.println(str2.compareTo(str3));//7
	System.out.println(str2.compareTo(str4));//-4
	System.out.println(str4.compareTo(str3));//7
}
}

9) 

1. 需求:把数组中的数据按照指定个格式拼接成一个字符串(用方法改进)

  
  假设有一个数组:
   int[] arr = {1 ,2, 3} ;
  
  最终结果是一个String数据
   [1, 2, 3]
  
  分析:
   1)定义一个int类型的数组
   2)定义一空字符串:String s = "" ;
  
   3)遍历数组之前:拼接一个[
   4)遍历int类型 数组
  判断是否最后一个元素
拼接每一个元素
   拼接]
   否则
   拼接每一个元素
   拼接, 
package org.westos.String1;

public class StringDemo10 {
public static void main(String[] args) {
	int []arr= {12,34,56,78};
	String str="";
	str+="[";
	for(int i=0;i<arr.length;i++) {
		if(i==arr.length-1) {
			str+=arr[i];
		str+="]";
		}
		else {
			str+=arr[i];
			str+=",";
		}
	}
	System.out.println(str);
}
}
2. 需求:把一个字符串的首字母转成大写,其余为小写。(只考虑英文大小写字母字符)
 分析:
  获取第一个字符:通过截取 返回一个新的字符串s1
  将s1转换成大写
  在获取除了第一个1字符以为的其他字符,截取s2
  s2转换成小写
  s1和s2拼接
package org.westos.d_string;

public class StringDemo9 {
public static void main(String[] args) {
	String str="assdQDSFsfSW";
	System.out.println(str.substring(0,1).toUpperCase().concat(str.substring(1).toLowerCase()));
}
}



猜你喜欢

转载自blog.csdn.net/weixin_41916558/article/details/80049701