java对象和字符串学习

内部类分类

按照内部类位置分类:
    成员位置:在成员位置定义的类,被称为成员内部类
    局部位置:在局部位置定义的类,被称为局部内部类
成员内部类:

    格式:class Outer{class Inner{}}
    创建内部类对象访问内部类:
        格式:Outer.Inner inner = new Outer().new Inner();
    成员内部类的修饰符:
        把成员内部类当成属性,属性有的修饰符内部类都有。
    内部类访问特点:
        1.内部类可以直接访问外部类的成员,包括私有。
        2.外部类要访问内部类的成员,必须创建对象。
局部内部类:
    举例说明:
            class Outer{
                public void show(){
                    class Inner{
                        public void test(){
                
                        }
                    }
                    new Inner().test();
                    }
                }
            class test{
                public static void main(String[] args) {
                    new Outer().show();
                 }
            }
    局部内部类的特点
        1.可以直接访问外部类的成员
        2.可以创建内部类对象,通过对象调用内部类方法,来使用局部内部类功能
        3.局部内部类访问局部变量必须用final修饰(JDK1.7之前要加final不然报错  但是在JDK1.8 不用加 不会报错)
静态内部类:
    就是在成员内部类的基础上给内部类加上static这样静态内部类就只能访问静态的变量和方  法了。
匿名内部类:
    该类是内部内中使用最多:
    匿名内部类的格式:
        new 类名或者接口名(){
            重写方法;
        } ;
    匿名内部类的本质:
        是一个继承了该类或者实现了该接口的子类匿名对象。
    

对象经常使用的Object方法总结

public int hashCode()
       此方法是将对象的引用地址进行逻辑处理输出一个新的字符数字。此方法在有些类中会被重写    例如:String类。返回该对象的哈希码值。默认情况下,该方法会根据对象的地址来计算。不同对     象的,hashCode()一般来说不会相同。但是,同一个对象的hashCode()值肯定相同。
public final Class getClass()
       获取对象的真实类的全名称。
public String toString()
       此方法是将对象的引用地址返回,注意:String类里面会重写此方法。返回的是内容
public boolean equals(Object obj)
       比较两个引用是否相等,注意:在String类中是比较内容。

Scanner用法

Scanner的方法介绍:
    hasNextxxx():
        判断输入的是否是某种类型的元素,其中XXX可以是Int,Double等。如果需要判断输入的字符串直接使用hasNext()方法就行。
    nextXXX表示获取输入流:
        常用的几种方法:
            public int nextInt():获取一个int类型的值
​           public String nextLine():获取一个String类型的值
​           public String next():获取一个String类型的值
    问题:
        使用nextLine()方法时,不将空格看做是两个字符串的间隔
        使用next()方法时,将空格看作是两个字符串的间隔:意思就是会将空格当成结束符。
        还有就是nextInt对回车不会进行回收,但是nextline会将回车当成结束符。

String类的学习很重要哦

常见的构造方法:
    public String():空构造
    public String(String original):创建内容为original的字符串对象
    public String(byte[] bytes):把字节数组转成字符串  
    public String(byte[] bytes,int index,int length):把字节数组的一部分转成字符串(index:表示的是从第几个索引开始, length表示的是长度)
    public String(char[] value):把字符数组转成字符串
    public String(char[] value,int index,int count)
    public String(StringBuffer buffer) 把StingBuffer转成字符串,当然StingBuffer对象调用toString()方法也可以转换成字符串。
    
    
String类中的方法:
    public int length():                获取字符串的长度。
    public char charAt(int index):      获取指定索引位置的字符
    public int indexOf(int ch):         返回指定字符在此字符串中第一次出现处的索引。
    public int indexOf(String str):     返回指定字符串在此字符串中第一次出现处的索引。
    public int indexOf(int ch,int fromIndex):返回指定字符在此字符串中从指定位置后第一次出现处的索引。
    public int indexOf(String str,int fromIndex): 返回指定字符串在此字符串中从指定位置后第一次出现处的索引。
    lastIndexOf系列是从字符串后往前搜索。
    public String substring(int start):  从指定位置开始截取字符串,默认到末尾。
    public String substring(int start,int end): 从指定位置开始到指定位置结束截取字符串。
    public static String valueOf(xxxxx)  该系列方法很常用
    public static String valueOf(char[] chs):           把字符数组转成字符串。
    public static String valueOf(int i):    //重要       把int类型的数据转成字符串。
    注意:String类的valueOf方法可以把很多类型的数据转成字符串。
    public String replace(char old,char new)            将指定字符进行互换
    public String replace(String old,String new)        将指定字符串进行互换
    public String trim()                            去除两端空格
    public int compareTo(String str)    会对照ASCII 码表 从第一个字母进行减法运算 返回的就是这个减法的结果,如果前面几个字母一样会根据两个字符串的长度进行减法运算返回的就是这个减法的结果,如果连个字符串一摸一样 返回的就是0
    public int compareToIgnoreCase(String str) 跟上面一样 只是忽略大小写的比较 
    public String toLowerCase():                    把字符串转成小写。
    public String toUpperCase():                    把字符串转成大写。
    public String concat(String str):               拼接字符串。
    注意:concat和+的区别:
    1.+可以是字符串或者数字及其他基本类型数据,而concat只能接收字符串。
    2.+左右可以为null,concat为会空指针。
    3.如果拼接空字符串,concat会稍快,在速度上两者可以忽略不计,如果拼接更多字符串建议用StringBuilder。
    4.从字节码来看+号编译后就是使用了StringBuiler来拼接,所以一行+++的语句就会创建一个StringBuilder,多条+++语句就会创建多个,所以为什么建议用StringBuilder的原因。

字符串转换

把其他(特定类型)类型转为字符串
      通过String构造函数可以将byte数组、char数组StringBufer、以及字符串本身创建出字符串对象。
      还可以通过String类的静态方法valueOf()该方法支持将多种类型转换成字符串(可以查阅相关文档)。
把字符串转换成数组:
        public byte[] getBytes():                       把字符串转换为字节数组。
        public char[] toCharArray():                    把字符串转换为字符数组。
        public String[] split(String regex)             把字符串以某个正则方式分割成字符数组。

字符串中的一些问题需要注意

先引入问题。
    String s="hello";
    String s1="hello";
    本内容只是自己的一些想法:
        首先通过s=“hello”方式创建对象驻留到字符串常量池当中。那当后面的以同样方式创建字符串的对象的方式将会先在字符串常量池中通过常量池中的(对象.equals("hello")),如果为true就说明有将匹配到的引用到时候返回给S1。
    String s=new String("hello");
    注意此过程中设计两对象的创建一个是hello字符串对象是在字符串常量池中一个是在堆中是String对象。
    关于intern()方法官方的标准解释:
        返回字符串对象的规范表示。
        最初为空的字符串池由String类私有维护。调用intern方法时,如果池已经包含等于equals(Object)方法确定的此String对象的字符串,则返回池中的字符串。 否则,将此String对象添加到池中,并返回对此String对象的引用。因此,对于任何两个字符串s和t,当且仅当s.equals(t)为true时,s.intern()== t.intern()为true。所有文字字符串和字符串值常量表达式均已插入。 字符串文字在Java语言规范的第3.10.5节中定义
返回值:与该字符串具有相同内容的字符串,但保证来自唯一字符串池。
    用一个例子说明:
        String a=new String("hello");
        a.intern()
        该方法将去字符串常量池中通过使用本对象中的内容"hello",用池中的引  用.equals("hello")来匹配如果有直接返回常量池中的引用如果没有则会将该字符串的引用放到里面。

猜你喜欢

转载自www.cnblogs.com/project-zqc/p/11756376.html