第三周 Day3

1.匿名内部类

概念:没有名字的类
一般情况:很少使用具体类的内部类,因为内部类本身就可以new对象;
应用场景:就是抽象类和接口中使用的最多,其中接口最多;
固定格式:
        new 类名(一般情况下:都是抽象类)或者接口名(){
                重写抽象类或者接口的抽象方法()
            }
        };
//接口类
interface  Inter{
    //只有一个抽象方法
    void show() ;//抽象方法
    void show2() ;//有多个抽象方法了
}
//外部类
class Outer{
     public void method(){
         
          Inter i = new Inter() {
            // 匿名内部类的本质:就是继承了该抽象类或者实现了接口的子类对象!
            @Override
            public void show() {
                System.out.println("show Inter...");
            }
​
            @Override
            public void show2() {
                System.out.println("show2 Inter...");
            }
        } ;
        i.show();
        i.show2();
     }
}
//测试类
public class InnerClassTest {
    public static void main(String[] args) {
​
        //创建Outer类对象
        Outer outer = new Outer() ;
        outer.method();
    }
​
}

2.匿名内部类的开发中使用
 形参问题:
              如果方法形式参数是一个抽象类,调用方法的时候实际参数应该传递的当前抽象类的子类对象!
              方法的形式参数如果是一个接口类型,调用方法的时候,需要传递接口的子实现类对象;
               方法的返回值如果是一个接口,需要接口的子实现类对象;

3.Scanner类提供一些判断功能:
    public boolean hasNextXXX(){} XXX就对应的数据类型--- 判断下一个录入的数据是否为XXX类型
     boolean hasNextInt() :判断是否下一个录入的是int类型;
     boolean hasNextLine(); 判断是否下一个录入的是String类型;
     
获取功能:
        XXX  nextXXX() --->录入数据
        int nextInt() {} 录入的是int类型
        tring nextLine(){} 录入的是String类型

4.Scanner细节

先录入的String,在录入int,没问题
先录入int,在录入String,有问题:
    问题描述:就是因为在录入数据的时候,接收数据--->按 "回车键",下一个录入的是String           就是因为"回车符号"---->就是换行---->当空字符进去了,所以第二个数还没有录入的就完了
    
解决方案:
     1)String nextLine() 录入一行数据,--->官方用       
     使用另一种方法:public String next() 录入的指定的字符串内容(通用格式)
     
     2)就要使用nextLine()方法录入STring,在录入String之前,重新创建一个新的键盘录入对象,也可以!

5.String类
     String str = "abc"; //创建字符串对象的标准格式;
     直接是在常量中查看是否存在这个字符串常量,如果存在,就会常量池的地址值,否则,常量池中开辟空间
     
String的构造方法:
    String() :空参构造
    
    String(byte[] bytes) :有参构造,里面是字节数组(将byte[]--String)
    
    String(byte[] bytes, int offset, int length) :将一部分字节数组--->字符串
                       参数1:字节数组
                       参数2:指定的位置开始
                        参数3:指定的长度
                        
     String(char[] value) :将字符数组---->字符串
     
    String(char[] value, int offset, int count) :将一部分字符数组--->字符串
              参数1:字符数组对象
              参数2:从指定位置开始
              参数3:记录数多少个 
              
    String(String original) :构造的字符串对象,参数为字符串常量值
    
    
""空字符序列和null不同!
          "":说明有内容,空的,依然可以使用String类型里面的所有功能
          null:空对象,不能在使用String的方法,在使用,就空指针异常NullPointerException

6.String常用的判断功能
      public boolean contains(String序列 s):字符串中是否包含指定的字符
      public boolean endsWith(String suffix):是否以指定的字符串结尾
      public boolean startsWith(String prefix):是否以指定的字符串开头
      public boolean isEmpty()判断字符串内容是否空字符,长度为0,就是true
      public boolean equals(Object anObject)-->重写Object,区分大小写判断字符串内容是否相同
      public boolean equals(Object anObject): 不区分大小写判断字符串内容是否相同

7.String类的获取功能(都必须掌握):
    public char charAt(int index)获取指定索引出的字符值
    String[] spilt(String regex)适应指定的分割符号拆分字符串,返回的字符串数组;
    public String concat(String str):拼接功能--->获取新的字符串;
    public int indexOf(int ch)返回指定字符第一次出现的字符串内的索引;
    public int indexOf(String str):返回指定字符串中子字符串第一次出现索引值;
    public int lastIndexOf(int ch):返回指定字符最后一次出现的索引;
    public int lastIndexOf(String str):返回指定字符串中子字符串第一次出现索引值;
    String substring(int beginIndex):从指定位置开始默认截取到末尾--->返回一个新的字符串
    String substring(int beginIndex, int endIndex):从指定位置开始截取到指定位置结束包前,不包后(只能取到endIndex-1处),返回的一个字符串

8.

数组中有没有length(),String类中有没有length(),集合中有没有length()方法?
                   数组中没有length(),叫length属性
                   String类有的length():获取字符串长度
                           获取功能之一:int length()

                   集合中没有,是sise():获取集合的元素数

9.        String s = "hello";
            String s = new String("hello") ;
            
区别:
    前者:常量赋值的 形式,直接在常量中找,是否存在常量,如果存在,就直接返回常量池地址;
        如果不存在,那么现在常量池中开辟空间,然后再去把常量池地址赋值给变量s,从而有地址指向!
             
    后者:
         new 对象,---需要在堆内存空开辟空间(堆内存空间地址值),而里面有一个字符串常量"hello"
         在常量池中,找如果有,直接返回常量池地址值,如果没有,开辟常量池的空间地址!
    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值