java学习之路--java对象(1)--重点String类的常用方法

来源:互联网 发布:centos selinux关闭 编辑:程序博客网 时间:2024/05/22 11:21
第五章:
1.面向对象的特征
        (1):封装性
        (2):多态
        (3):继承


Java多态分为:方法重载和对象多态两种
  这里说下对象多态:子类对象可以和父类对象互转


2.对象的创建
  例如: Person p=new Person()


类是一种引用的数据类型,所以在穿件也需要分配内存空间,类名称存在栈内存中,是对象存在堆内存中


3.封装


记住对象中的所有属性都必须封装,就是(private),通过getter,setter来访问
4.构造方法


在创建对象的时候,你会看见new Person(),这个Person()是一个方法,这个方法就是构造方法,构造方法的作用就是用来初始化数据。在创建对象的时候,如果类中没有构造方法,系统会自动分配一个默认的不带参数构造方法。


5.匿名对象


匿名对象就是没有明确的给出名字的对象,new Person()就是一个匿名对象。匿名对象只在堆内存中分配内存来存储对象,而不在栈内存中开辟空间来装对象的引用。一般匿名类值使用一次。


6.String(这个非常重要,非常频繁的用到,要百分百的掌握)
(1).String类用equals来比较两个对象是否值相等(如果用==就必须保证地址也一致才OK)
(2).String类两种实例化
   a. String s="abc";
   b.  String s=new String("abc");
这两种实例化有什么不同?
在弄清楚这个之前一定要弄清楚一点,就是一个字符串就是一个String类的匿名对象。 
@Test
        public void test(){
                //验证一个字符串就是一个匿名对象
                System.out.println("hello".equals("hello"));
        }
结果:
true


实际上String s="abc",就是把一个已经在堆内存中开辟好的辅助给一个名称而已,这样做的目的:看代码


public void test1(){
                //验证一个字符串就是一个匿名对象
                String s="abc";
                String f="abc";
                System.out.println("是否相等"+(s.equals(f)));
                System.out.println("是否相等"+(s==f));
        }


结果:


是否相等true
是否相等true
这说明,一个堆内存存在的对象,即使被赋值给多个名称,但是地址,值不变。。。


补充一下:


        对于以上String类的操作,在java中成为共享设计,这种设计思路就是,在java中形成一个对象池,在这个对象池中保存多个对象,新实例化一个对象,如果在对象池中已经开辟了空间,则不再新开辟,而是直接取出使用,String类就是采用这样的设计




看看下面的代码:


public void test2(){
                String s=new String("abc");
                String f=new String("abc");
                System.out.println("是否相等"+(s.equals(f)));
                System.out.println("是否相等"+(s==f));
        }


结果:
是否相等true
是否相等false


(3)字符串类容的不可改变性


        其实理解这个看下代码就很容易理解了


public void test3(){
                String a="abc";
                String b="abc";
                 a=a+b;
                 System.out.println(a);
                
        }
结果:
abcabc


看到结果你是不是想说,这不是改变了吗,但是你想想一个字符串就是一个匿名对象,输出的a是abcabc,那说明在堆中就有一个abcabc的索引(或者就是有这个的空间,而刚开始创建的a="abc",并没有改变)
(4)String 类常用的方法




下面就是对这些常用方法使用的代码:


public void test4(){
                //字符串和数组的互转
                
                String s="hello";
                
                char c[]=s.toCharArray();//将字符串变为字符数组
                
                for(char i :c){
                        System.out.print(i+"\t");
                }
                
                System.out.println("");
                
                String a=new String(c);//将全部的字符数组变为String 
                
                String st=new String(c,0,4);//将部分的字符数组变为字符串
                
                System.out.println(a);
                
                System.out.println(st);
        }
结果:
h        e        l        l        o        
hello
hell


public void test5(){
                //取出指定位置的字符串
                
                String s="abcde";
                
                System.out.println(s.charAt(2));//取出第3个字符,这里是根据索引来取得,索引是从0开始
                
        }


结果:
c


public void test6(){
                //字符串与byte数组间的互相转换
                
                String s="abcde";
                
                byte a[]=s.getBytes();//将字符串变为byte数组
                
                System.out.println(new String(a));//将byte数组转为字符串
                
                System.out.println(new String(a,0,3));//将byte数组转为字符串
        }
结果:
abcde
abc
补充:写个数组与byte的转换,是因为后期再IO流中经常会使用到


public void test7(){
              
                
                String s="abcde";
                
                System.out.println(s.length());//取一个字符串的长度
                
                char a[]=s.toCharArray();
                
                System.out.println(a.length);//取一个数组的长度
         }
        
结果:
5
5
补充:看看取得数组的长度的方法和字符串长度的方法用说明不同?
    字符串取长度的length()是有括号的




public void test8(){
              
                String s="abcde";
                
        System.out.println(s.indexOf("a"));//查找一个指定的字符串是否存在
        
        System.out.println(s.indexOf("ac"));
         }
结果:
0
-1
补充:如果存在就返回索引值,不存在就返回-1


public void test9(){
                
                
                String s="      abcde     ";
                
                System.out.println(s.trim());//去掉左右空格
                String a="abc   dd dd  dd";
                System.out.println(a.trim());
                


         }


结果:
abcde
abc   dd dd  dd


补充:是去掉左右空格,不会去掉中间的空格


public void test10(){
                
                
                String s="abcde";
        System.out.println(s.substring(1));//字符串的截取,冲索引值为1的地方开始到末尾
        
        System.out.println(s.substring(1, 3));//索引1开始,3结束
                


         }


结果:
bcde
bc
public void test11(){
                String s="ab cde";
                String a[]=s.split(" ");//按指定的方式拆分,这里是按空格的方式(拆分必须是字符串正有的)
                for(int i=0;i<a.length;i++){
                        System.out.println(a[i]);
                }
                
                for(String b:a){
                        System.out.println(b);
                }
         }


结果:
ab
cde
ab
cde




public void test12(){
                String s="abcde";
                String a="ABCDE";
                System.out.println(s.toUpperCase());//转大写
                System.out.println(a.toLowerCase());//转小写
         }
结果:
ABCDE
abcde


public void test13(){
                String s="abcde";
                System.out.println(s.startsWith("abc"));//判断是否已什么开头
                System.out.println(s.endsWith("de"));//判断是否以什么结尾
                
                
         }


结果:
true
true


public void test14(){
                String s="abcde";
                String a="ABCDE";
        System.out.println(s.equalsIgnoreCase(a));//不区分大小写比较
         }


结果:
true


public void test15(){
                String s="aaade";
                System.out.println(s.replaceAll("a", "m"));//替换
                System.out.println(s.replace("a", "d"));
         }







原创粉丝点击