Java基础学习第十五天(MyEclipse、Object类、String字符串类)

一、MyEclipse使用步骤

1、 选择工作目录。 以后在MyEclipse上面写的所有代码都是在工作目录上的。

2、 在Project Exploer 窗口上创建一个工程,以后我们写代码都是以工程作为单位的。
新建工程的步骤: Project Exploer 窗口右击 > New > java Project

3、在工程的src目录下右击,new一个Class就创建了一个类。

4、运行java文件
方式一:java的源代码右击 > run as > java application
方式二:绿色箭头 > run as > java application
方式三:快捷键的运行: ctrl+ f11

5、导入工程
在打开的myeclipse左侧空白处点击右键,找到Import选项 > Existing Projects into Workespace > next > 点击Browse,选择已经准备的项目 > Finish

6、工程的目录介绍
settings:elcipse自动生成的配置文件
bin:用于存放所有的class文件
src:用于存放所有的java源文件

7、使用eclipse 好处
① ctrl + / 内部补全
② 不需要你再使用javac工具编译,你在Eclipse上面一旦保存,Eclipse自动编译
③ 精准报错,自动修复(ctrl+ 1)

二、Object类

1、Object类是所有类的终极父类。 任何一个类都继承了Object类。

2、Object类常用的方法:
toString():返回该对象的字符串表示。 返回一个字符串用于描述该对象的。重写toString之后,我们直接输出一个对象的时候,就会输出符合我们所需求的格式数据。
equals(Object obj):用于比较两个对象的内存地址,判断两个对象是否为同一个对象。
hashCode():返回该对象的哈希码值(大家可以把哈希码就 理解成是对象的内存地址)

3、java中的规范:一般我们重写了一个类的equals方法,我们都会重写它的hashCode方法。

4、查看源代码的方式:
方式一:按住ctrl键,单击你需要看的源代码
方式二:把光标移动到你需要查看代码处按下F3

class Person{
    int id; 
    String name;
    public Person(int id, String name) {
        this.id = id;
        this.name = name;
    }
    public Person() {
    }   
    //目前我需要直接输出一个对象的输出的格式是:编号:110+姓名:狗娃这种格式。Object的toString方法无法满足子类的需求,那么我们就要对Object类的toString进行重写
    @Override
    public String toString() {
        return "编号:"+ this.id + " 姓名:"+this.name;
    }       
    //Object的equals方法默认比较的是两个对象的内存地址,我目前需要比较的是两个对象的身份证,所以Object类的equals方法不符合我现在的需求
    @Override
    public boolean equals(Object obj) { 
        Person p = (Person)obj;
        return this.id == p.id;
    }
    @Override
    public int hashCode() {
        return this.id;
    }       
}
public class Demo15.1 {
    public static void main(String[] args) {        
        Object o = new Object();
        System.out.println(o.toString());  // java.lang.Object@18b3364  返回的字符串表示: 包名+类名(=完整类名)+@+ 对象的哈希码
        System.out.println(o); //直接输出一个对象的时候,实际上在println方法内部会调用这个toString方法

        Person p1 = new Person(110,"狗娃");
        System.out.println("p1:"+p1);       
        Person p2 = new Person(112,"狗娃");
        System.out.println("p1与p2是同一个对象吗?"+ p1.equals(p2)); 
        System.out.println("p1哈希码:"+ p1.hashCode());
        System.out.println("p2哈希码:"+ p2.hashCode());        
    }   
}

三、String字符串类

1、笔试题目:new String(“abc”)创建了几个对象?
答:两个对象, 一个对象是位于字符串常量池中,一个对象是位于堆内存中。

public class Demo15.2 { 
    public static void main(String[] args) {    
        String str1 = "hello";
        String str2 = "hello";
        String str3 = new String("hello");
        String str4 = new String("hello");
        System.out.println("str1==str2?"+(str1==str2));  // true  
        System.out.println("str2==str3?"+(str2==str3));  // false
        System.out.println("str3==str4?"+(str3==str4));  // false
        System.out.println("str3.equals(str4)?"+(str3.equals(str4))); // true 
        //是String类重写了Object的equals方法,比较的是两个字符串对象的内容是否一致。
        // "=="用于比较引用数据类型数据的时候比较的是两个对象的内存地址,equals方法默认情况下比较也是两个对象的内存地址。     
        test(null);
    }   
    public static void test(String str){
        if("中国".equals(str)){
            System.out.println("回答正确");
        }else{
            System.out.println("回答错误");
        }
    }
}

2、String的构造方法

构造方法 解释
String() 创建一个空内容的字符串对象
String(byte[] bytes) 使用一个字节数组构建一个字符串对象
String(byte[] bytes, int offset, int length) 使用一个字节数组构建一个字符串,指定开始解码的索引值和解码的个数
String(char[] value) 使用一个字符数组构建一个字符串对象
String(char[] value, int offset, int count) 使用一个字符数组构建一个字符串,指定开始的索引值与使用字符个数
String(int[] codePoints,int offset,int count) 同上

记住: 使用字节数组或者字符数组都可以构建一个字符串对象。

public class Demo15.3{  
    public static void main(String[] args) {
        String str = new String();
        byte[] buf = {97,98,99};        
        str = new String(buf); //使用一个字节数组构建一个字符串对象
        System.out.println("字符串str的内容:"+str);// abc 

        str = new String(buf,1,2); 
        System.out.println("字符串str的内容:"+str);// bc  

        char[] arr = {'今','天','放','假'};
        str = new String(arr); //使用字符数组构建一个字符串
        System.out.println("字符串str的内容:"+str);// 今天放假

        str = new String(arr,3,2);      
        System.out.println("字符串str的内容:"+str);// 圣诞

        int[] buf2 = {65,66,67};
        str = new String(buf2,0,3);
        System.out.println("字符串str的内容:"+str);// ABC         

        str = new String("abc");        
        System.out.println("字符串str的内容:"+str);// abc 
    }
}

3、String的获取方法

获取方法 解释
int length() 获取字符串的长度
char charAt(int index) 获取特定位置的字符(角标越界)
int indexOf(String str) 查找子串第一次出现的索引值,如果子串没有出现在字符串中,那么则返回-1
int lastIndexOf(String str) 查找子串最后一次出现的索引值,如果子串没有出现在字符串中,那么则返回-1
public class Demo15.4{  
    public static void main(String[] args) {
        String str = "abc中国ab中国";
        System.out.println("字符串的字符个数: " + str.length() );// 9
        System.out.println("根据索引值获取对应的字符:"+ str.charAt(3));// 中
        System.out.println("查找子串第一次出现的索引值:" + str.indexOf("中国"));// 3
        System.out.println("查找子串最后一次出现的索引值:" + str.lastIndexOf("中国"));// 7      
    }
}

4、String的判断方法

判断方法 解释
boolean endsWith(String str) 判断是否以指定字符结束
boolean isEmpty() 判断是否长度为0 如:“”、null
boolean contains(CharSequences) 判断是否包含指定序列
boolean equals(Object anObject) 判断是否相等
boolean equalsIgnoreCase(String anotherString) 忽略大小写判断是否相等

5、String的转换方法

转换方法 解释
char[] toCharArray() 将字符串转换为字符数组
byte[] getBytes() 将字符串转换为字节数组

注意:字节数组与字符数组、字符串他们三者之间是可以互相转换。

public class Demo15.5 {
    public static void main(String[] args) {
        String str = "Demo.java";
        System.out.println("是否以指定的字符串结束:"+ str.endsWith("va"));
        System.out.println("判断字符串是否为空内容:"+str.isEmpty());
        System.out.println("判断字符串是否包含指定的内容:"+ str.contains("Demo"));
        System.out.println("判断两个字符串的内容是否一致:"+ "DEMO.JAVA".equals(str));
        System.out.println("判断两个字符串的内容是否一致(忽略大小写比较):"+ "DEMO.JAVA".equalsIgnoreCase(str));      

        //转换的方法
        char[] buf = str.toCharArray(); //把字符串转换字符数组
        System.out.println("字符数组:"+ Arrays.toString(buf));//[D, e, m, o, ., j, a, v, a]
        byte[] buf2 = str.getBytes(); //把字符串转字节数组
        System.out.println("字节数组:"+ Arrays.toString(buf2));//[68, 101, 109, 111, 46, 106, 97, 118, 97]
    }
}

6、其他方法

其他方法 解释
String replace(String oldChar, String newChar) 替换
String[] split(String regex) 切割
String substring(int beginIndex) 指定开始的索引值截取子串
String substring(int beginIndex, int endIndex) 指定开始与结束的索引值截取子串
String toUpperCase() 转大写
String toLowerCase() 转小写
String trim() 去除字符串首尾的空格
public class Demo15.6 { 
    public static void main(String[] args) {
        String str = "今天晚上不考试";
        System.out.println("指定新内容替换旧的内容:"+ str.replace("不", "要"));
        str = "大家-下-午-好";
        String[] arr = str.split("-"); //根据指定的字符进行切割
        System.out.println("字符串数组的内容:"+ Arrays.toString(arr));
        str = "江苏省镇江市";
        System.out.println("指定开始的索引值截取子串:"+ str.substring(3));
        System.out.println("指定开始的索引值截取子串:"+ str.substring(3,5)); //包头不包尾;  注意:截取的内容是包括开始的索引值,不包括结束的索引值,截取的位置是结束的索引值-1   
        str = "abC中国";
        System.out.println("转大写:" + str.toUpperCase());
        str = "AbdfSDD"; 
        System.out.println("转小写:"+ str.toLowerCase());      
        str = "         大家最近    在     准备英语四六级      ";
        System.out.println("去除字符串首尾的空格:"+ str.trim());  
    }
}

7、字符串的练习

public class Demo15.7{
    public static void main(String[] args) {
        String str  ="        江苏省        镇江市             "; 
        System.out.println(myTrim(str));        

        str = "D:\\MyEclipse2015\\MyTest\\src\\Demo15.java";
        getFileName(str);       

        str = "大家好";
        System.out.println("翻转后的字符串:"+ reverse(str));       

        str = "abcjavaabcjavaphpjava";  //java
        getCount(str, "java");      
    }

    //需求4:统计子串在整串中出现的次数
    public static void getCount(String str,String target){
        int count = 0 ; //用于记录出现的次数
        int fromIndex = 0; // 记录从那个索引值开始寻找目标子串
        while((fromIndex = str.indexOf(target, fromIndex))!=-1){
            //如果indexof方法返回的不是-1,那么就是已经找到了目标元素
            count++;
            fromIndex = fromIndex + target.length();
        }
        System.out.println("出现的次数:"+ count);
    }

    //需求3:将字符串对象中存储的字符翻转    
    public static String reverse(String str){
        char[] arr = str.toCharArray();
        for(int startIndex = 0 , endIndex=arr.length-1 ; startIndex<endIndex; startIndex++,endIndex--){
                char temp = arr[startIndex];
                arr[startIndex] = arr[endIndex];
                arr[endIndex] = temp;
        }
        //使用字符数组构建一个字符串。
        return new String(arr);
    }

    //需求2:获取上传文件名"D:\\MyEclipse2015\\MyTest\\src\\Demo15.java"
    public static void getFileName(String path){
        int index = path.lastIndexOf("\\");//转义字符
        String fileName = path.substring(index+1);
        System.out.println("文件名:"+ fileName);
    }

    //需求1:自己实现trim()
    public static String myTrim(String str){
        //先转换成字符数组
        char[] arr = str.toCharArray();
        //定义两个变量记录开始与结束的索引值
        int startIndex = 0 ;
        int endIndex = arr.length -1;
        //确定开始的索引值
        while(true){
            if(arr[startIndex]==' '){
                startIndex++;
            }else{
                break;
            }
        }
        //确定结束的索引值:
        while(true){
            if(arr[endIndex]==' '){
                endIndex--;
            }else{
                break;
            }
        }
        //截取子串返回
        return str.substring(startIndex,endIndex+1);        
    }
}

8、StringBuffer
字符串特点:字符串是常量;它们的值在创建之后不能更改.
字符串的内容一旦发生了变化,那么马上会创建一个新 的对象。
注意: 字符串的内容不适宜频繁修改,因为一旦修改马上就会创建一个新的对象。
如果需要频繁修改字符串 的内容,建议使用字符串缓冲类(StringBuffer)。
StringBuffer 其实就是一个存储字符 的容器。

public class Demo15.8 { 
    public static void main(String[] args) {
        String str1 = "hello";
        String str2 = str1+" world";
        System.out.println("str1与str2是同一个对象吗?"+(str1==str2));   
    }
}

如果需要频繁修改字符串 的内容,建议使用字符串缓冲类(StringBuffer)。
StringBuffer 其实就是一个存储字符 的容器。
笔试题目:使用Stringbuffer无 参的构造函数创建 一个对象时,默认的初始容量是多少? 如果长度不够使用了,自动增长多少倍?
StringBuffer 底层是依赖了一个字符数组才能存储字符数据 的,该字符串数组默认 的初始容量是16, 如果字符数组的长度不够使用 死,自动增长1倍。
容器的具备 的行为:增加、 删除、 修改、 查看、 判断

public class Demo15.9{
    public static void main(String[] args) {
        //先使用StringBuffer无参的构造函数创建一个字符串缓冲类
        StringBuffer sb = new StringBuffer(); 
        sb.append("java");
        sb.append("java");
        sb.append("java");
        sb.append("java");
        sb.append("java");  
        System.out.println(sb);         
    }   
}

猜你喜欢

转载自blog.csdn.net/Mr_GaoYang/article/details/80723146