Object Scanner String
一丶Object类(所有类的根父类)
构造方法:Object();
1、toString()方法:返回该对象的字符串表示。
1)子类没有重写之前,访问其toString()方法相当于Sysyem.out.println(对象名);
打印出来:打印出来的是地址值:包名.类名@16进制数据:地址值
2)源码分析: public String toString(){
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
getClass()方法:返回的当前正在运行的类;
getName:返回的是全路径名称,是以String字符串形式显示出来
//getClass().getName();访问的就是类名
hashCode()方法:返回该对象的哈希值。
希码值:是通过哈希表(Hashtable)里面的哈希算法算出来的,可以理解为地址值(整数)
@:地址标记
Integer.toHexString(hashCode()):返回一个整数的16进制数据
3)方法重写:开发中尽量所有类都要重写toString()方法
写一个类的时候,定义完必要的成员变量,在适当的情况重写Object类的toString()方法;
在eclipse中无需直接手动添加重写toString()方法同set()/get()方法一样,eclipse中提供了自动添加重写toString方法
重写后再次调用toString()方法
打印出来: 类名 [成员变量1 = xxx, 成员变量2 = xxx]
2、equals(Object obj)方法:判断obj这个对象与当前对象是否“相等”
1)子类没有重写之前,默认的比较的是地址值,返回的是boolean类型false/true。
2)源码: public boolean equals(Object obj) {
return (this == obj);
}
3)方法重写:比较两个对象中的内容是否相同,就需要在其子类中去重写equals()方法!
eclipse中同样提供了equals的方法重写 egg:
@Override //成员方法 name,age
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass()) //if(!(obj instanceof Student))
return false;
Student other = (Student) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!this.name.equals(other.name))
return false;
return true;
}
说明:对象名 instanceof 类名 判断该对象是否是该类的实例化。
重写了equals(Object obj)方法后,比较的便不是地址值,只要obj是该类的一个实例,并且其成员变量值相同,便返回true。
3、clone()方法:创建并返回此对象的一个副本,也就是复制功能执行特定的复制操作。
1)方法重写:要重写clone()方法,其类必须实现Cloneable接口
@Override //如果此对象的类不能实现接口Cloneable,则会抛出 CloneNotSupportedException异常
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
2)clone方法的使用:protected Object clone()返回的是Object类型的一个对象
需要强转成当前类类型使用 egg;Teacher t2 = (Teacher)t1.clone();
t2 就是 t 复制的副本
二、Scanner类(获取用户的键盘输入)
1、构造方法:public Scanner(InputStream source)
2、常用方法: 1)public int nextInt()
返回键盘录入的int类型的值
2)public String nextLine()
返回键盘录入的String类型的值
3、Scanner类的使用:
1)不需要继承,只需导包即可:import java.util.Scanner;
2)创建Scanner类的对象:Scanner s = new Scanner(System.in);
3)显示的提示使用键盘录入:System.out.println("所要录入的什么东西");
4)获取键盘录入的值:String str = s.nextLine();
int i = s.nextInt();
注意:创建一个对象可以多此获取键盘录入的值,但如果先获取到int类型的值再获取String类型的值,就获取不到了,需要重新创建对象。
三、String类(Java程序中的所有字符串字都作为此类的实例实现)
1、构造方法: public String() //无参构造
public String(byte[] bytes) //参数是byte类型的数组,将该数组转换为字符串类型
public String(byte[] bytes,int offset,int length) //参数 byte类型的数组bytes,从第offset个开始,长度为length
public String(char[] value) //参数是cher类型的数组,将该数组转换为字符串类型
public String(char[] value,int offset,int count)
public String(String original) //相当与 String s = "(String original)";
2、内存分配:在方法区内有一个常量池区域,专门存放字符串,并且程序中所有出现的字符串都会存放在次常量池中
所以字符串一但被赋值,其值不可改变
egg:字符串相加
字符串变量相加,先开辟空间,再相加
字符串常量相加,先相加,然后在常量池中找是否有这个值,有就直接返回其地址值,没有再在常量池中创建
public class StringDemo {
public static void main(String[] args) {
String s1 = "hello";
String s2 = "world";
String s3 = "helloworld";
System.out.println(s3 == s1 + s2);// false
System.out.println(s3.equals((s1 + s2)));//true
System.out.println(s3 == "hello" + "world");///true
System.out.println(s3.equals("hello" + "world"));//true
}
}
3、常用方法——判断功能
boolean equals(Object obj) //String类自己已经重写了equals方法,所以判断两个字符串是否相同;
boolean equalsIgnoreCase(String str) //判断该字符串与 String str是否相同 不考虑大小写;
boolean contains(String str) //判断该字符串是否包含 String str;
boolean startsWith(String str) //判断该字符串是否以 String str 开始;
boolean endsWith(String str) //判断该字符串是否以 String str 结束;
boolean isEmpty() //判断该字符串是否为空;
String s = null; 空对象,根本没法调用方法 与 String s = ""; 不同
4、常用方法——获取功能
int length() //获取该字符串的长度,注意与数组中数组长度区分 s.length()/i.length;
char charAt(int index) //获取该字符串第 int index 个字符;
int indexOf(int ch) //获取该字符串 第一次出现 int ch 字符的索引;若没有返回-1;
int indexOf(String str) //获取该字符串 第一次出现 String str 字符串的索引;
int indexOf(int ch,int fromIndex) //获取该字符串 从第 int formIndex 个开始第一次出现的 int ch 字符的索引;
int indexOf(String str,int fromIndex) //获取该字符串 从第 int formIndex 个开始第一次出现的 String str 字符串的索引;
String substring(int start) //获取从第 int start 个开始到结束 这个新的字符串;
String substring(int start,int end) //获取从第 int start 个开始到第 int end 个结束,这个新的字符串; 包左不包右;
5、常用方法——转换功能
byte[] getBytes() //将该字符串转换为 byte[] 数组;
char[] toCharArray() //将该字符串转换为 char[] 数组;
static String valueOf(char[] chs) //将 char [] chs 转换为 字符串;
static String valueOf(int i) //将 int i 转换为 字符串;
String toLowerCase() //将该字符串的所有字母转换为小写字母;
String toUpperCase() //将该字符串的所有字母转换为大写字母;
String concat(String str) //将 String str 拼接在该字符串的后面;
6、常用方法——其他方法
替换功能
String replace(char old,char new) //将 char old 改为 char new,并返回 new;
String replace(String old,String new) //将 String old 改为 String new,并返回 new;
去除字符串两空格
String trim() //去除当前字符串中首尾中出现的空格,并返回;
按字典顺序比较两个字符串
int compareTo(String str) //若该字符串在String str之前,则返回负整数;若之后,返回正整数;若相等,返回0
int compareToIgnoreCase(String str) //不考虑大小写
原文:http://378213986.blog.51cto.com/11691396/1950063