Java SE 学习记录08

@学习记录

开始学习Java

遵从同学的指导,从Java se开始学习

黑马的JavaSE零基础入门

day08-01 字符串的使用与练习

package day08;

/*
字符串的特点:
1.字符串的内容永不可变【重点】
2.正是因为字符串不可改变,所以字符串是可以共享使用的,节省内存
3.字符串效果上相当于是char[]字符数组,但是底层原理是byte[]字节数组

创建字符串的常见3+1种方式
public String();创建一个空白字符串,不含有任何内容
public String(char[] array);根据字符数组的内容,创建对应的字符串
public String(byte[] array);根据字节数组的内容,创建对应的字符串
一种直接创建:
String str = "Hello"; // 右边直接双引号

注意:直接写上双引号就是字符串对象


字符串常量池:程序中直接写上的双引号字符串,就在字符串常量池中,new不在字符串常量池中  。

对于基本类型来说, ==是进行【数值】的比较
对于引用类型来说, ==是进行【地址值】的比较

如果确实需要字符串内容的比较,可以使用两个方法:
public boolean equals(Object obj);参数可以是任何对象,只有当参数是一个字符串并且内容相同的才会给true,否则返回false

注意事项:
1.任何对象都能用Object进行接收。
2.equals方法具有对称性,即a.equals(b)和b.equals(a)效果一样
3.如果比较双方一个常量一个变量,推荐把常量字符串写在前面
即 推荐:"abc".equals(str)      不推荐:str.equals("abc")
若变量为空,后者会报错,空指针异常NullPointException

public boolean equalsIgnoreCase(String str);忽略大小写,进行内容比较
注意:只有英文字母区分大小写,其他类似于中文数字都不区分


String中与获取相关的常用方法有:
public int length();获取字符串中含有的字符个数,拿到字符串长度
public String concat(String str);将当前字符串和参数字符串拼接成为返回值【新的】字符串
public cha charAt(int index);获取指定索引位置的单个字符(索引从0开始)
public int indexOf(String str);查找参数字字符串在本字符串当中首次出现的索引位置,如果没有返回-1


字符串的截取方法:
public String substring(int index);截取从参数位置一直到字符串末尾,返回新字符串
public String substring(int begin, int end);截取从begin开始,一直到end结束中间的字符串
备注:[begin,end),包含左边,不包含右边


String当中与转换相关的常用方法有:
public char[] toCharArray();将当前字符串拆分成为字符数组作为返回值
public byte[] getBytes();获得当前字符串拆分的字节数组
public String replace(CharSequence oldString, CharSequence newString);将所有出现的老字符串替换成为新的字符串,返回替换之后的结果新字符串
备注:CharSequence意思就是可以接受字符串类型


字符串的切割方法:
public String[] split(String regex);按照参数的规则,将字符串切分成若干部分

注意事项:
split方法的参数是一个“正则表达式”,今后学习
如果按照英文据点“.”进行切分,必须写“\\.”(两个反斜杠)

 */

import java.util.Scanner;

public class Demo01 {
    public static void main(String[] args) {
        // 使用空参构造
        String str1 = new String();
        System.out.println("第一个字符串是:" + str1);

        // 根据字符数组,创建字符串
        char[] charArray = {'A', 'B', 'C'};
        String str2 = new String(charArray);
        System.out.println("第二个字符串是:" + str2);

        // 根据字节数组创建字符串
        byte[] byteArray = {97, 98, 99};
        String str3 = new String(byteArray);
        System.out.println("第三个字符串是:" + str3);

        // 直接创建
        String str4 = "Hello";
        System.out.println("第四个字符串是:" + str4);
        System.out.println("==================================");

        // 字符串的比较
        String str5 = "Hello";
        String str6 = "Hello";
        char[] charArray1 = {'H', 'e', 'l', 'l', 'o'};
        String str7 = new String(charArray1);
        System.out.println(str5.equals(str6));
        System.out.println(str5.equals(str7));
        System.out.println(str6.equals(str7));
        System.out.println(str7.equals("Hello"));
        System.out.println("Hello".equals(str6));

        // 忽略大小写进行比较
        String strA = "Java";
        String strB = "java";
        System.out.println(strB.equals(strA));
        System.out.println(strA.equalsIgnoreCase(strB));
        System.out.println("==================================");

        // 获取字符串的长度
        System.out.println("字符串的长度为:" + "asdfhciosjfweifj".length());

        // 拼接字符串
        System.out.println("拼接后新的字符串为:" + str4.concat(str6));

        // 获取指定索引位置的单个字符
        System.out.println("第3号索引位置的字符是:" + str7.charAt(3));

        // 查找参数字符串在本字符串中出现的第一次索引位置
        // 如果没有,返回-1
        System.out.println("字符“a”在该字符串中第一次出现的索引位置是:" + strA.indexOf('a'));
        System.out.println("字符“e”在该字符串中第一次出现的索引位置是:" + strA.indexOf('e'));
        System.out.println("==================================");

        // 截取字符串
        System.out.println(str7.substring(1));
        System.out.println(str7.substring(1,4));
        System.out.println("==================================");

        // 转换为char[]
        char[] chars = "Hello".toCharArray();
        System.out.println(chars.length);

        // 转换为byte[]
        byte[] bytes = "abc".getBytes();
        System.out.println(bytes[2]);

        //  替换字符串
        System.out.println("How do you do?".replace("How", "What"));
        System.out.println("==================================");

        // 切割字符串
        System.out.println("aaa,bbb,ccc".split(",")[1]);
        System.out.println("aaa.bbb.ccc".split("\\.")[2]);
        System.out.println("==================================");

        // 按指定格式拼接字符串
        // 定义一个方法,把数组{1,2,3}按照指定格式拼接成一个字符串,格式参照如下:[word1#word#word]
        int[] array = {1,2,3};
        toSting(array);
        System.out.println(together(array));
        System.out.println("==================================");

        // 统计输入的字符串中各种字符的个数
        // 键盘输入一个字符串,并且统计其中各种字符出现的次数
        // 种类有:大写字母,小写字母,数字,其他
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串");
        String str = sc.next();
        int charCap = 0;
        int charSmall = 0;
        int charNum = 0;
        int charOther = 0;
        char[] char1 = str.toCharArray();
        for (int i = 0; i < char1.length; i++) {
            if (char1[i] >= 'A' && char1[i] <= 'Z') {
                charCap += 1;
            } else if (char1[i] >= 'a' && char1[i] <= 'z') {
                charSmall += 1;
            } else if (char1[i] >= '0' && char1[i] <= '9') {
                charNum += 1;
            } else {
                charOther += 1;
            }
        }
        System.out.println("大写字母出现次数为:" + charCap + ",小写字母出现的次数为:" + charSmall + ",数字出现的次数为:" + charNum + ",其他字符出现的次数为:" + charOther);

    }
    // 该方法没有拼接
    public static void toSting(int[] array){
        for (int i = 0; i < array.length; i++) {
            if (i == 0) {
                System.out.print("[" + "word" + array[i]);
            } else if (i < array.length - 1) {
                System.out.print("#" + "word" + array[i]);
            } else{
                System.out.println("#" + "word" + array[i] + "]");
            }
        }
    }

    // 拼接方法
    public static String together(int[] array) {
        String str = "[";
        for (int i = 0; i < array.length; i++) {
            if (i != array.length - 1) {
                str += "word" + array[i] + "#"; // 对字符串而言,加法是在原有的基础上拼接内容
            } else {
                str += "word" + array[i] + "]";
            }

        }
        return  str;
    }
}


day08-11 静态static关键字的使用

package day08;

/*
如果一个成员变量使用了static关键字,那么这个变量不再属于对象自己,而是属于所在的类。多个对象共享同一份数据。


一旦使用static修饰成员方法,那么这就成为了静态方法。静态方法不属于对象,而是属于类的。

如果没有static关键字,那么必须首先创建对象,然后通过对象才能使用它。
如果有了static关键字,那么不需要创建对象,直接就能通过类名称来使用它。

无论是成员变量,还是成员方法,如果有了static,都推荐使用类名称进行调用。
成员变量:类名称.静态变量
静态方法:类名称.静态方法()

注意事项:
1. 静态只能直接访问静态,不能直接访问非静态
原因:内存中先有的静态内容,后有的非静态内容
2. 静态方法中不能用this
原因:this代表当前对象,通过谁调用,设就是当前对象

 */
public class Demo02 {
    public static void main(String[] args) {
        Student one = new Student("胡歌", 30);
        one.room = "148教室";
        Student two = new Student("七哥", 20);

        System.out.println("姓名:" + one.getName() + ",年龄:" + one.getAge() + ",教室是:" + one.room + ",学号是:" + one.getId());
        System.out.println("姓名:" + two.getName() + ",年龄:" + two.getAge() + ",教室是:" + two.room + ",学号是:" + two.getId());
        System.out.println("==============================================");

        // 首先创建对象
        MyClass obj = new MyClass();
        // 然后才能使用没有static关键字的内容
        obj.method();

        // 对于静态方法来说,可以通过对象名进行调用,也可以直接通过类名称来调用
        obj.methodStatic(); // 正确,不推荐。这种方法在被javac编译成为类名称.静态方法名
        MyClass.methodStatic(); // 正确,推荐

        // 对于本类当中的静态方法,可以省略类名称

    }
}

package day08;

public class Student {
    private int id;
    private String name;
    private int age;
    static String room;
    private static int idCounter = 0; // 学号计数器,每当new了一个新对象的时候,计数器++

    public Student() {
        this.id = ++idCounter;
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
        this.id = ++idCounter;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

package day08;

public class MyClass {
    int num;
    static int numStatic;

    // 成员方法
    public void method() {
        System.out.println("这是一个普通的成员方法");
        // 成员方法可以访问成员变量
        System.out.println(num);
        // 成员方法可以访问静态变量
        System.out.println(numStatic);
    }

    // 静态方法
    public static void methodStatic(){
        System.out.println("这是一个静态方法");
        // 静态方法可以访问静态变量
        System.out.println(numStatic);
        // 静态方法不能直接访问非静态【重点】
//        System.out.println(num);
    }

}

静态代码块

package day08;

/*
静态代码块的格式:

public class 类名称 {
    static {
        // 静态代码块的内容
    }
}

特点:当第一次用到本类时,静态代码块执行唯一的一次。
静态内容总是优先于非静态,所以静态代码块比构造方法先执行.

静态代码块的典型用途:
用来一次性的对静态成员变量进行赋值

 */
public class Person {
    static {
        System.out.println("静态代码块执行");
    }

    public Person() {
        System.out.println("构造方法执行!");
    }
}

package day08;

public class Demo03 {
    public static void main(String[] args) {
        Person one = new Person();
        Person two = new Person();

    }
}


day08-17 数组工具类Arrays的使用与练习

package day08;

import java.util.Arrays;

/*
java.util.Arrays是一个与数组相关的工具类,里面提供了大量的静态方法,用来实现数组的常见操作。

public static String toString(数组);将参数数组变成字符串(按照默认格式:【元素1,元素2...】)
public static void sort(数组);按照默认升序(从小到大)对数组的元素进行排序。

备注:
1.如果是数值,sort默认按照升序从小到大
2.如果是字符串,sort默认按照字母升序
3.如果是自定义的类型,那么这个自定义的类需要有Comparable或者Comparator接口的支持(今后学习)
 */
public class Demo04 {
    public static void main(String[] args) {
        int[] intArray = {20, 30, 10};
        String intStr = Arrays.toString(intArray);
        System.out.println(intStr);
        System.out.println("==============================");

        int[] array1 = {1, 2, 2, 3, 4, 5, 7};
        Arrays.sort(array1);
        System.out.println(Arrays.toString(array1));
        System.out.println("==============================");

        // 练习:字符串倒序
        // 请使用Arrays相关的API,将一个随机字符串中的所有字符升序排列,并倒叙打印
        String str = "dasjopikwsjnflocihsaklrfmniov";
        // 首先变成一个数组
        char[] charArray = str.toCharArray();
        // 再运用数组升序排序
        Arrays.sort(charArray);
        for (int i = charArray.length - 1; i >= 0; i--) {
            System.out.println(charArray[i]);
        }




    }
}


day08-17 数学工具类Math的使用与练习

package day08;

/*
java.util.Math类是数学相关的工具,里面提供了大量的静态方法,完成于数学运算相关的操作

public static double abs(double num);获取绝对值
public static double ceil(double num);向上取整
public static double floor(double num);向下取整
public static long round(double num);四舍五入

Math.PI代表圆周率(double)
 */

public class Demo05 {
    public static void main(String[] args) {
        // 获取绝对值
        System.out.println(Math.abs(3.14));
        System.out.println(Math.abs(-5));
        System.out.println(Math.abs(234.234));
        System.out.println("=======================");

        // 向上取整
        System.out.println(Math.ceil(8.25));
        System.out.println(Math.ceil(3.0));
        System.out.println("=======================");

        // 向下取整
        System.out.println(Math.floor(8.25));
        System.out.println(Math.floor(3.0));
        System.out.println("=======================");

        // 四舍五入
        System.out.println(Math.round(1324.34563462));
        System.out.println(Math.round(743.5343));
        System.out.println(Math.round(1324.34563462));
        System.out.println("=======================");

        System.out.println(Math.PI);

        // 练习:小学数学真题
        // 计算再-10.8到5.9之间,绝对值大于6或者小于2.1的整数有多少个
        int count = 0;
        double min = -10.8;
        double max = 5.9;
        // 这样处理,就是区间内的所有整数
        // 如果使用Math.ceil方法,-10.8 --> -10.0, double也是可以进行++的
        for (int i = (int) min; i < max; i++) {
            int abs = Math.abs(i);
            if (abs > 6 || abs < 2.1) {
                count++;
            }
        }
        System.out.println("共有" + count + "个整数符合要求");

        System.out.println((int)5.9);;
        System.out.println((int)-10.8);;
        int numCount = 0;
        for (int i = (int)-10.8; i <= (int)5.9; i++) {
            if (Math.abs(i) > 6 || Math.abs(i) < 2.1) {
                numCount++;
            }
        }
        System.out.println(numCount);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值