day10

本文深入讲解Java中的核心类,如Object、String及Scanner类的基本用法与重要特性,包括类层次结构、字符串处理技巧和键盘输入操作。
Object类:
  类 Object 是类层次结构的根类。每个类都使用 Object 作为超类(父类)。所有对象(包括数组)都实现这个类的方法。
 public int hashCode()返回该对象的哈希码值
 hashCode()----->通过哈希算法(哈希表:hashtable)---->地址值(不是实际意义上的地址值!)
 
  public final Class getClass()返回此 Object 的运行时类  (Java反射机制中讲!)
  Class类中有一个方法:

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





Object的另一个方法:
 public String toString();返回该对象的字符串表示(建议所有子类都重写此方法)
 
  Integer类中有一个方法:
  public static String toHexString(int i):将一个int类型的数据转换成一个十六进制的字符串表现形式
  
  如果直接输出对象名称,想要显示当前对象的成员变量的值,那么必须重写Object类中的toString()方法



Object中的另一个方法:
 public boolean equals(Object obj)指示其他某个对象是否与此对象“相等”。
 
 面试题:
 ==和equal()方法的区别
 ==:比较的是两个对象的地址值是否相同,
 equals()方法默认比较的是两个对象的地址值是否相同,如果重写了Object类中的equals()方法,那么默认比较就是两个对象的内容是否相同
 
  使用工具自动生产equals()方法
 
 javascript:Array对象,Number对象,String对象,valueOf():====>s1.valueOf(s2) ;比较是内容是否相同





 Object类中的其他两个方法:
 protected void finalize()throws Throwable:当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法,但是,什么时候调用垃圾回收器
 不确定;
 
  System类中的一个方法:
  public void gc():运行垃圾回收器,这个垃圾回收器最终调用的就是finalize()方法
  
 protected Object clone()创建并返回此对象的一个副本
                throws CloneNotSupportedException
                
            注意事项:
            Object 类的 clone 方法执行特定的复制操作。首先,如果此对象的类不能实现接口 Cloneable,则会抛出 CloneNotSupportedException

.

使用clone()方法,当前对象所在类需满足条件如下



1)Scanner:用来创建一个文本扫描器(键盘录入)
 2)java高级特性:IO流(后面讲)
 BufferReder:字符缓冲流来键盘录入
 java.util.Scanner;s
 Scanner sc = new Scanenr(System.in);
 
 System类中的静态字段:
 public static final InputStream in:  标准输入流
 InputStream :字节流InputStream is = System.in ;  实质:抽象类多态
 public static final OutputStream out:  标准输出流
 
  开发步骤:
  1)创建键盘录入对象
 2)录入数据
 3)输出


Scanner类中常用的方法:
 
 判断的功能:
 细节:可以添加逻辑判断
 hasNextXXX(); 在录入数据之前,加上判断功能,判断是否由下一个可以录入的XXX类型的数据
 nextXXX();//通过录入获取这个int类型的数据
 
 举例:
 public boolean hasNextInt()
 nextInt();
 
 nextInt():录入int类型的数据
 nextLine():录入一个字符串类型
 
  java.util.InputMismatchException:输入和想到的数据不匹配




Scanner类中的注意事项:
  先录入int类型的数据,在录入String类型数据,第二次录入的数据没有接收到,直接输出结果了,由于"回车"才能接收数据
  回车换行符导致的!
  解决方案:
 *在第二次录入String类型数据之前,需要重新创建键盘录入对象录入String类型





String类:
  代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现;字符串一旦被赋值,其值不能再改变
  
  String类常用的构造方
  法:
 String():表示一个空字符序列。
 public String(byte[] bytes,Charset ch):默认字符集(编码格式):GBK,如果是GBK格式,可以不写第二个参数
 public String(byte[] bytes,int index,int length):将部分字节数组构造成一个字符串
 public String(char[] value):将字符数组构造成一个字符串
 public String(char[] value,int index,int length):将部分的字符数组构造成一个字符串
 public String(String original):通过字符串常量构造一个字符串对象
 * 
 
 获取字符串的长度功能:
 public int length()
 
 面试题:
 数组中有没有length(),字符串(字符串缓冲区:StringBuffer)中没有length(),集合中有没有length()(集合后面讲)?
 数组没有length(),length属性
 字符串中有length()
 集合中没有length(),获取集合中元素数量:size()
 *
 
 
编码和解码:一定要保证编码格式一致
  编码:
  把能看懂的东西转换成一个看不懂的东西:String----->byte[]:public byte[] getBytes(String charsetName)
  解码:
 把当前的byte[]转成能看懂的东西(String):byte[]----->String  :public String(byte[] bytes,CharsetName ch)
 
 举例:
 谍战片:
 今天老地方见:
 
 编码:"今"----->字节数组:byte[]---->字节类型:形成一种二进制数据
 解码:二进制数据---->十进制进制数据----->String:"今"


字符串的一个特点:一旦被赋值,其值不能被改变(不可变的字符序列)
 
 面试题:
 String s = "hello"
 和String s = new String("hello") 两个有什么区别?分别创建了几个对象
 
 第一个创建了一个对象
 第二个s创建两个对象(堆内存中有new String(),然后字符串常量池中也有这样一个字符串常量(开辟空间的地址))



String类的中常用的判断功能:
 boolean equals(Object obj):当前该对象是否obj这个对象是否相等;
boolean equalsIgnoreCase(String str):比较字符串是否相等,忽略大小写
boolean contains(String str):判断str这个字符串是否包含在当前字符串中
boolean startsWith(String str):是否以str子字符串开头
boolean endsWith(String str):判断是否以str子字符串结尾
boolean isEmpty():判断字符串是否为空

String s = "" ;空字符
String s = " " ;字符串"空格"
String s = null ;当前字符串对象为空



字符串变量相加,先开辟空间,在相加
 字符串常量相加:首先在字符串常量池找,有没有当前这个常量值,有,就直接返回,没有,需要创建!


看程序写结果




Stringtest

需求:模拟用户登陆,给3次机会,并给提示
  
 分析:
  假设:定义一个用户和密码
 String name = "admin" ;
 String password = "admin" ;
 2)创建键盘录入对象,录入用户名和密码
 3)给3次机会,使用for循环进行操作for(int x = 0 ; x <3 ; x ++){}
 
 录入:录入的用户和密码来和已经存在的用户名和密码进行比较,
 判断:如果一致:
 登陆成功
 不一致:
 有一个不符合,就登陆不成功
 if((2-x)==0){
 }else{
 输出还有(2-x)次机会

 



评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值