Java基础之Object超类,Scanner类以及String的相关应用

Object 超类:是类层次结构的根类.每个类都使用 Object 作为超类(父类);

                ----> 任何类都可以继承超类Object;

        举例:

package org.wesots_01;

//定义学生类继承类超类;
public class Student extends Object{
        //Object中的toString方法;返回该对象的字符串表示;
        //重写了Object超类中的方法;
        @Override
        public String toString() {
                return "Student [name=" + name + ", age=" + age + "]";
        }

        //重写了Object中的equals方法
        @Override
        public boolean equals(Object obj) {//传入对对象
                if (this == obj)
                        return true;
                if (obj == null)
                        return false;
                if (getClass() != obj.getClass())//this.getClass ();正在运行的那个类: class 包名.类名
                        return false;
                Student other = (Student) obj;//向下转型
                if (age != other.age)//this.age  other:传入的s2
                        return false;
                if (name == null) {//this
                        if (other.name != null) //传入的姓名的值是否为null
                        return false;
                } else if (!name.equals(other.name))
                        return false;
                return true;
        }
}

//子类可以调用超类中的各种方法;
public class ObjectDemo {

        public static void main(String[] args) {

                //创建一个学生对象
                Student s1 = new Student() ;
                System.out.println(s1.hashCode());//118352462   返回该对象的哈希码值,把它理解地址值(不是实际意义的地址值);

                Student s2 = new Student() ;
                System.out.println(s2.hashCode());//118352462    同s1;

                System.out.println("-------------------------");

                Class c1 = s1.getClass() ;//Object 的运行时类
                System.out.println(c1);//class org.wesots_01.Student :以Class形式表示的当前类
                String name = c1.getName() ;
                System.out.println(name);//以字符串显示当前的类:org.wesots_01.Student :全类名

                System.out.println("-------------------------");

                String str2 = s1.toString() ;
                System.out.println(str2);    //Student [name=null, age=0]

                System.out.println("--------------------------");

                //Object中的另一个方法:equals
                //创建两个学生对象
                Student t1 = new Student("高圆圆",27);
                Student t2 = new Student("高圆圆",27) ;
                System.out.println(t1==t2); //比较的是地址值,记住是地址值,所以为false;
                System.out.println("-----------");
                System.out.println(t1.equals(t2)); //ture :重写方法之后比较的是值,所以为true;                

                System.out.println("------------------------");

                //调用Object超类中的clone()方法用来复制操作;
                //调用clone方法
                Object obj = s1.clone() ;
                //向下转型
                Student s2 = (Student)obj;
                System.out.println(s2.getName()+"---"+s2.getAge());

                System.out.println("--------------------------");

                //在没有接触过Object的clone方法之前,如何复制对象的
                Student s3 = s1 ;
                System.out.println(s3.getName()+"---"+s3.getAge());

                System.out.println("---------------------------");

                //链式编程
                String str = s1.getClass().getName() ;    //返回当前正在运行的类,并且直接得到它的名称;
                System.out.println(str);        //org.wesots_01.Student

                String str2 = s2.getClass().getName() ;
                System.out.println(str2);        //org.wesots_01.Student
        }
Scanner类:简单文本扫描器;
        键盘录入的步骤:
   1) 需要创建键盘录入对象:
       Scanner sc =new Scanner(System.in);
   2) 导入包:
                            import java.util.Scanenr;     快捷键:ctrl+shift+o
  3) 接收数据:
      XXX 变量名= sc.nextXXX();
                                    nextint();   输入的是数字;

                                    nextLine();   输入的是字符;

        在输入过程中存在的问题:
   1) 键盘录入两个int类型的数据,分别输出,没有问题;
   2) 键盘录入两个String类型的数据,分别输出,没有问题;
   3) 先录入一个String类型的数据,在录入int类型的数据,没有问题;
   4) 先录入一个int类型的数据,在录入String类型的数据,有问题,第二个数据是字符串类型,又由于录入下一个数据要"空格"本身是一个字符串b是空格,b的值没有录入;
           如何解决:重写创建键盘录入对象;
                举例:

public class ScannerDemo3 {

        public static void main(String[] args) {

                //录入两个int类型的数据
                Scanner sc = new Scanner(System.in) ;

                //输入两个整型;
                int a = sc.nextInt() ;
                int b = sc.nextInt() ;
                System.out.println("a:"+a+",b:"+b);

                //输入两个字符串;
                String str1 = sc.nextLine() ;//录入字符串
                String str2 = sc.nextLine() ;
                System.out.println("str1:"+str1+",str2:"+str2);

                //先输入一个字符串,再输入一个整型;
                String c = sc.nextLine() ;
                int  d= sc.nextInt() ;
                System.out.println("c:"+c+",d:"+d);

                //先输入一个整型,再输入一个字符串,有问题:需要重写键盘输入对象;
                int e = sc.nextInt() ;
                //需要创建键盘录入对象
                Scanner sc2 = new Scanner(System.in) ;
                String f = sc2.nextLine() ;
                System.out.println("e:"+e+",f:"+f);
        }
}

String的用法及其属性:
        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();

        举例:

public class StringDemo {

        public static void main(String[] args) {

                //String():无参构造
                String s1= new String() ;
                System.out.println("s1:"+s1);//不是地址值:说明String类本身就是重写Object类中的toString()方法
                System.out.println("------------");

                //String(byte[] bytes) :将字节数转换成字符串
                //定义一个字节数组
                byte[] bys = {97,98,99,100,101} ;
                String s2 = new String(bys) ;
                System.out.println("s2:"+s2);    //abcde
                System.out.println("---------------");

                //public String(byte[] bytes, int index,int length):将字节数组的一部分转换成字符串
                String s3 = new String(bys, 1, 2) ;
                System.out.println("s3:"+s3);   //bc

                System.out.println("----------------");
                //public String(char[] value):将字符数组转化成字符串
                char[] ch = {'我','爱','高','圆','圆'} ;
                String s4 = new String(ch) ;
                System.out.println("s4:"+s4);   //我爱高圆圆

                //public String(char[] value, int index, int count):将字符数组的一部分转换成字符串
                String s5 = new String(ch, 2,3);
                System.out.println("s5:"+s5);   //高圆圆

                System.out.println("-----------------");
                //public String(String original):将一个字符串常量构造成一个字符串对象
                String s6 = new String("abc") ;
                //在写法上:等同于:String s6 = "abc" ;

                String s7 = "" ;//空字符串
                System.out.println("s7:"+s7);    //该字符串为空
    
                String s8 = null ;//对象是空的
                System.out.println("s8:"+s8);    //null
        }
}

        String字符串的最大的特点:

   字符串一旦被赋值,其值不能被改变;

        面试题:
                String s1 = new String("abc");
String s1 = "abc" ;
                 这两个分别创建了几个对象?  ==> 分析如下图;

    
        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):字符串的特有功能,拼接功能和+拼接符是一个意思;

                举例:

public class StringDemo5 {

        public static void main(String[] args) {

                //定义字符串
                String s1 = "helloworld" ;
                String s2 = "HelloWorld" ;
                //boolean equals(Object obj):将此字符串与指定的对象比较
                System.out.println("equals:"+s1.equals(s2));   //false

                System.out.println("---------------------------");
                //boolean equalsIgnoreCase(String str)将此 String 与另一个 String 比较,不考虑大小写
                System.out.println("equalsIgnoreCase:"+s1.equalsIgnoreCase(s2));  //true

                System.out.println("---------------------------");
                //boolean contains(String str):判断当前字符串中是否包含子字符串  (重点)
                System.out.println("contains:"+s1.contains("llo"));    //true
                System.out.println("contains:"+s1.contains("android"));  //false

                System.out.println("---------------------------");
                //boolean startsWith(String str):是否以当前给定的str字符串开头(重点)
                System.out.println("startsWith:"+s1.startsWith("he"));   //true

                System.out.println("---------------------------");
                //boolean isEmpty():判断字符串是否为空
                System.out.println("isEmpty:"+s1.isEmpty());   //false
        }
}

        例题:

package org.westos.c_string;

import java.util.Scanner;

/**
 * 模拟登录,给三次机会,并提示还有几次。
 *
 *分析:
 *		1)定义一个规则:
 *			用户名:admin
 *			密码:admin
 *		2)循环三次,使用for循环
 *			创建键盘录入对象
 *			录入的用户名和密码和当前存在的用户名和密码进行比较,如果一致,登录成功,(break)
 *		3)登录失败
 *			分两种情况:
 *				提示有几次机会
 *				次数:2-x   
 *			当前2-x==0,换一中提示,当前机会用完了,请联系管理员...
 */
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 InputUserName = sc.nextLine() ;
			System.out.println("请输入密码:");
			String InputPwd = sc.nextLine() ;

			//判断录入的和存在用户名或者密码和存在的用户名或者密码看他们是否一致
			if(username.equals(InputUserName) && password.equals(InputPwd)) {  //equals的底层修改过,只要值相同就相同;
				//一致,登录成功
				System.out.println("登录成功....");
				break ;
			}else {
				//没有登录成功:2,1,0
				if((2-x)==0) {
					System.out.println("请速联系管理员");
				}else {
					//!=0 ,2,1
					System.out.println("当前您还是有"+(2-x)+"次机会");
				}
			}
		}
	}
}
        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):从指定位置开始到指定位置末尾结束,包前不包含;

        举例:

public class StringDemo {

	public static void main(String[] args) {

		//定义一个字符串:
		String s = "helloworld" ;

		//public int length():获取字符串的长度
		System.out.println("length():"+s.length());
		System.out.println("-----------------------");

		// public char charAt(int index)返回指定索引处的 字符
		System.out.println("charAt():"+s.charAt(7));
		System.out.println("-----------------------");

		//public int indexOf(int ch)返回指定字符在此字符串中第一次出现处的索引
		System.out.println("indexOf():"+s.indexOf('l'));
		//public int indexOf(int ch,int fromIndex)返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索
		System.out.println("indexOf():"+s.indexOf("l", 4));
		System.out.println("------------------------");

		//public int indexOf(String str)返回指定子字符串在此字符串中第一次出现处的索引
		System.out.println("indexOf():"+s.indexOf("owo"));	
		System.out.println("------------------------");

		//public String substring(int beginIndex):从指定位置开始截取,默认截取到末尾,返回新的字符串
		System.out.println("subString():"+s.substring(4));//oworld 

		//public String substring(int beginIndex, int endIndex):从指定位置开始到指定位置末尾结束,包前不包含(包左不包右)
		System.out.println("substirng():"+s.substring(3, 8));//lowor
	}
}
        String的常用转换功能:
                public byte[] getBytes():将字符串转换为字节数组;
                public char[] toCharArray():将字符串转换成字符数组(重点)
                public static String valueOf(int i):将int类型的数据转换成字符串(重点)
                这个方法可以将任何类型的数据转化成String类型;
                public String toLowerCase():转成小写;

                public String toUpperCase():字符串中所有的字符变成大写;

        举例:

public class StringDemo3 {

public static void main(String[] args) {

                //定义一个字符串
                String str ="JavaSE" ;
                //public byte[] getBytes() :将字符串转换为字节数组
                byte[] bys = str.getBytes();
                for(int x = 0 ; x < bys.length; x ++) {
                        System.out.println(bys[x]);
                }

                System.out.println("--------------------");
                //public char[] toCharArray() :将字符串转换成字符数组(重点)
                char[] chs = str.toCharArray() ;
                for(int x = 0 ; x < chs.length ; x ++) {
                        System.out.println(chs[x]);
                }

                System.out.println("---------------------");
                //public static String valueOf(int i):将int类型的数据转换成字符串(重点)
                System.out.println("valueOf():"+String.valueOf(100));//"100"

                System.out.println("----------------------");
                //public String toLowerCase():转成小写
                System.out.println("toLowerCase():"+str.toLowerCase());
                System.out.println("toUpperCase:"+str.toUpperCase());

                //public String concat(String str):字符串的拼接共
                //"hello"+"world" 最基本的字符串拼接
                String s1 = "hello" ;
                String s2 = "world" ;
                System.out.println("contact():"+s1.concat(s2));
        }
}

        String类型的其他功能:

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

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

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

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

        举例:

public class StringDemo4 {

	public static void main(String[] args) {

		//定义一个字符串
		String str = "helloworld" ;
		System.out.println("replace:"+str.replace('l', 'k'));
		System.out.println("replace:"+str.replace("owo", "ak47"));

		System.out.println("------------------------");

		String s1 = " helloWorld " ;
		System.out.println("s1:"+s1+"----");
		String s2 = s1.trim() ;//去两端空格
		System.out.println("s2:"+s2+"----");

		System.out.println("----------------------");
		String s3 = "hello" ;
		String s4 = "hello";

		String s5 = "abc" ;
		System.out.println("compareTo():"+s3.compareTo(s4));
		System.out.println(s3.compareTo(s5));   //按照字典顺序比较;
	}
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值