zoukankan      html  css  js  c++  java
  • Chapter08【String类、static、Arrays类、Math类】

    Chapter08【String类、static、Arrays类、Math类】

    第一章 String类

    1.概述

    java.lang.String 类代表字符串

    API(开发文档)当中说:Java程序中所有字符串字面值(如“abc”)都作为此例的实例实现。

    其实就是说:程序中所有的双引号字符串,都是String类的对象。(就算没有new也照样是)

    2.字符串的特点

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

    3.创建字符串 3 + 1种方式

    3种构造方法

    1. 空参构造

      public String():创建一个空白的字符串不含有任何内容

      //小括号留空,说明字符串什么内容都没有
      String str1 = new String();
      
    2. 根据字符数组创建字符串

      public String(char[] array);根据字符数组内容,来创建对应的字符串。

      char[] charArray = {'A','B','C'};
      String str2 = new String(charArray);
      
    3. 根据字节数组创建字符串

      public String(byte[] array);根据字节数组内容,来创建对应的字符串。

      byte[] byteArray = {'97','98','99'};
      String str3 = new String(byteArray);
      

    1种直接创建

    String str = "hello";//右边直接双引号

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

    4.字符串常量池

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

    对于基本类型来说,== 是进行数值的比较。

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

    public static void main(String[] args){
        String str1 = "abc";
        String str2 = "abc";
        
        char[] charArray = {'a','b','c'};
        String str3 = new String(charArray);
        
        System.out.println(str1 == str2);//truw
        System.out.println(str1 == str3);//false
        System.out.println(str2 == str3);//false
    }
    

    5.字符串比较的方法

    == 是进行对象地址值的比较,如果确实需要字符串的内容比较,可以使用两个方法:

    • public boolean equals(Object obj);将此字符串与指定对象进行比较,参数可以是任何对象,只有参数是一个字符串并且内容相同返回为true,否则返回false。

      • 注意事项
        • 任何对象都能用object进行接收。
        • equals方法具有对成型,也就是a.equals(b)和b.equals(a)效果一样。
        • 如果比较双方一个常量一个变量,推荐把常量字符串写在前面。
          • 推荐 :"abc".equals(str)
          • 不推荐:str.equsls("abc")

      代码如下:

      public static void mian(String[] args){
          String str1 = "hello";
          String str2 = "hello";
          char[] charArray = {'h','e','l','l','o'};
          String str3 = new String(charArray);
          
          System.out,println(str1.equals(str2));//true
          System.out,println(str2.equals(str3));//true
          System.out,println(str1.equals(str3));//true
          System.out,println("hello".equals(str1));//true
          
          String str4 = "Hello";
          System.out,println(str1.equals(str4));//false
          
          String str5 = null;
          System.out,println("ABC".equals(str5));//推荐 false
          System.out,println(str5.equals("abc"));//不推荐 报错 空指针异常NullPointerException
      }
      
    • 忽略大小写,进行内容比较

      public boolean equalsIgnoreCase(String str);

    public static void main(String[] args){
        String strA = "Java";
            String strB = "java";
            //区分大小写
            System.out.println(strA.equals(strB));//false
            //不区分大小写
            System.out.println(strA.equalsIgnoreCase(strB));//true
    
            //注意  只有英文字母区分大小写,其他的不区分大小写
            System.out.println("abc二123".equalsIgnoreCase("abc贰123"));
    
    }
    

    6.字符串获取的相关方法

    1.获取字符串的长度

    public int length();

    //方法一
    String str1 = "adgaxvdrghagsdfg";
    int length = str1.length();
    System.out.println("字符串的长度是:"+length);
    //方法二
    int length = "asdfgagsdfd".length();
    System.out.println("字符串的长度是"+length)
    

    2.将指定字符串连接到该字符串的末尾

    public String concat(String str);

    String str1 = "hello";
    String str2 = "world";
    String str3 = str1.concat(str2);
    System.out.println(str3)//helloworld
    

    3.获取指定索引位置的单个字符

    索引从0开始

    public char charAt(int index)

    char ch = "hello".charAt(2);
    System.out.println("在2号索引位置的字符是:"+ch);//l
    
    

    4.返回指定字符串第一次出现该字符串内的索引

    如果没有返回-1 值

    public int indexOf(String str);

    String original = "helloworld";
    int index = original.indexOf("llo");
    System.out.println("第一次的索引值是:"+index);
    

    5.返回一个子字符串

    从beginIndex开始截取字符串到字符串结尾

    public String substring(int beginIndex);

    String str1 = "helloworld";
    String str2 = str1.substring(5);
    System.out.println(str2);//world
    

    6.指定截取

    返回一个子字符串,从beginIndex到 endIndex截取字符串。含beginIndex,不含endIndex

    public String subString(int beginIndex,int endIndex);

    String str1 = "hellowrld";
    String str2 = str1.substring(4,7);
    System.out.println(str2);//owo
    
    

    PS:

    下面这种写法,字符串的内容仍然是没有改变的。

    下面有两个字符串:"hello"、"java"

    str1当中保存的是地址值

    本来地址值是hello的0x666

    后来地址值变成了java的0x999

    String str1 = "hello";
    System.out.println(str1);//hello
    str1 = "java";
    System.out.println(str1);//java
    
    

    7.转换功能的方法

    1.将字符串拆分称为字符数组作为返回值

    public char[] toCharArray().

    public static void main(String[] args){
        //转换成字符数组
        char[] chars = "hello".toCharArray();
        Sysetm,out.println(chars[0]);//h
    }
    
    

    2.获取当前字符串底层的字节数组。如 a -- 97

    public byte[] getBytes();

    byte[] bytes = "abc".getBytes();
    for(int i = 0;i< bytes.length;i++){
        System.out.println(bytes[i]);
    }
    
    

    3.字符串内容替换

    public String replace (CharSequence target,CharSequence replacement) :将与target匹配的字符串使 用replacement字符串替换。

    String lang1 = "会不会玩啊~你大爷的!你大爷的!!!";
    String lang2 = lang1.replace("你大爷的","****");
    System.out.println(str2);
    
    

    8.分割字符串

    public String[] split(String regex):将此字符串按照给定的regex(规则)拆分成为字符串数组

    注意事项:

    split方法的参数其实是一个“正则表达式”。

    如果按照英文句点切割必须写成"."(两个反斜杠)

    String[] str1 = "ccc,ddd,eee";
    String[] array1 = str1.split(",");
    for(int i = 0,i<array.length;i++){
        System.out.println(array1);
    }
    
    String[] str1 = "ccc.ddd.eee";
    String[] array1 = str1.split("\.");
    for(int i = 0,i<array.length;i++){
        System.out.println(array1);
    }
    

    9.String类的练习

    1.题目:定义一个方法,把数组{1,2,3}按照指定个格式拼接成一个字符串。格式参照如下:[word1#word2#word3]。

    知识点:指定格式拼接字符串
    定义一个方法,把数组{1,2,3}按照指定个格式拼接成一个字符串。格式参照如下:[word1#word2#word3]。
    思路:
    1.自定义一个int【】数组,内容1,2,3
    2.定义一个方法,将数组编程字符串
    三要素:
    返回值类型:String
    方法名称:fromArrayToString
    参数列表:int[]
    3.格式:[word1#word2#word3]
    用到:for循环、字符串拼接、每个数组元素之前都有一个word字样、分隔使用的是#、区分一下最后一个不是
    4.调用方法,得到返回值,并打印结果字符串

    public static void mian(String[] args){
        int[] array = {1,2,3};
        String result =arrayToString(array);
        System.out.println(result);
    }
    public static String arrayToString(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;
    }
    
    

    2.题目:键盘录入一个字符,统计字符串中大小写字母及数字字符个数

    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入字符串:");
        String input = sc.next();//获取键盘输入的一个字符串
        
        int countUpper =0;//大写字母
        int countLower =0;//小写字母
        int countNumber = 0;//数字
        int countOther = 0;//其让他字符
        
        char[] charArray = input.toCharArray();
        for(int i = 0;i< charArray.length;){
            char ch = charArray[i];
            if('A'<= ch && ch <= 'Z'){
            countUpper++;
            }
        }else if('a'<= ch && ch <='z'){
            countLower++;
        }else if('0' <= ch && ch <='z'){
            countNumber++;
        }else{
            countOther++;
        }
    } 
    
     System.out.println("大写字母有:"+countUpper);
            System.out.println("小写字母有:"+countLower);
            System.out.println("数字有:"+countNumber);
            System.out.println("其他字符有"+countOther);
    
    

    第二章 Static关键字

    2.1概述

    若一个成员变量使用了static关键字,那么这个变量属于所在类。多个对象共享一份数据。

    2.2 定义和使用格式

    当static修饰成员变量的时候,该变量称为类变量。该类的每一个对象都共享同一个变量值。任何对象都可以调用该类变量的值,但也可以在不创建该类对象的情况下对类变量进行操作。

    • 类变量:使用static关键字修饰的成员变。

    定义格式:

    static 数据类型 变量名;
    
    

    举例:

    static int numberID;
    
    

    代码如下:

    比如说,基础班新班开班,学员报到。现在想为每一位新来报到的同学编学号(sid),从第一名同学开始,sid为 1,以此类推。学号必须是唯一的,连续的,并且与班级的人数相符,这样以便知道,要分配给下一名新同学的学号是多少。这样我们就需要一个变量,与单独的每一个学生对象无关,而是与整个班级同学数量有关。

    所以,我们可以这样定义一个静态变量numberOfStudent,代码如下:

    public static void main(String[] args){
        private String name;
        private int age;
        //学生的id
        private int sid;
        //变量名,记录学生数量,分配学号
        public static int numberOfStudent = 0;
        
        public Student(String name,int age){
            this.name = naem;
            this.age = age;
            //通过numberOfStudent  给学生分配学号
            this.sid = ++numberOfStudent;
        }
        
        //打印属性值
        public void show(){
            System.out.println("学生:"+name+",年龄:"+age + "学号:"+sid);
        }
    }
    
    
    public static void mina(String[] args){
        Student s1 = new Student("黑猫警长",12);
        Student s2 = new Student("金刚葫芦娃",22);
        Student s3 = new Student("喜洋洋",11);
        Student s4 = new Student("懒洋洋",10);
        
        s1.show();//学生:黑猫警长,年龄:12,学号:1
        s2.show();//学生:金刚葫芦娃,22,学号:2
        s3.show();
        s4.show();
    }
    
    

    静态方法

    当static修饰成员方法时,该方法称为类方法。或静态方法

    静态方法在声明中有static,建议使用类名来调用,不需要创建类的对象。

    注意事项:

    1.静态不能直接访问非静态

    原因:因为内存中【先】有的静态内容,【后】有的非静态内容。

    “先人不知道后人,后人知道先人”

    2.静态方法中不能用this。

    原因:this代表当前对象,通过谁调用的方法,谁就是当前对象。

    代码如下

    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 methodStatid() {
            System.out.println("这是一个静态方法。");
            //静态方法可以访静态变量
            System.out.println(numStatic);
            //静态不能直接方法非静态【重点】
        //    System.out.println(num);//错误写法
    
            //静态方法中不能使用this关键字
         //   System.out.println(this);//错误写法
        }
    }
    
    
        public static void main(String[] args) {
            MyClass obj = new MyClass();//首先创建对象
            //然后才能使用没有static关键字的内容
            obj.method();
    
            //对于静态方法来说,可以通过对象名进行调用,也可以通过类名称来调用
            obj.methodStatid();//不推荐,这种写法在编译后也会被javac翻译成为”类名称.静态方法“
            MyClass.methodStatid();//正确  推荐
        }
    
    

    2.3 静态原理图解

    static修饰的内容:

    • 是随着类的加载而加载的,且只加载一次。
    • 存储于一块固定的内存区域(静态区),所以,可以直接被类名调用。
    • 它优先于对象存在,所以,可以被所有对象共享。

    2.4 静态代码块

    • 静态代码块:定义在成员变量位置,使用static修饰代码块{};
      • 位置:类中方法外。
      • 执行:随着类的加载而执行唯一的一次,优先于main方法和构造方法。

    格式:

    public static ClassNume{
        static{
            //静态代码块
        }
    }
    

    作用:给类变量进行初始化赋值。

    代码如下:

    public class Person{
        static {
            System.out.println("静态代码块执行了!");
        }
        public static Person(){
              System.out.println("构造方法执行了~");
        }
    }
    
    public static void main(String[] args){
        Person one = new Person();
        Person two = new Person();
    }
    
    /*
    运行结果:
    静态代码块执行了!
    构造方法执行了~
    构造方法执行了~
    */
    
    

    小贴士:

    static 关键字,可以修饰变量、方法和代码块。在使用的过程中,其主要目的还是想在不创建对象的情况 下,去调用方法。

    第三章 Arrays类

    3.1 概述

    java.util.Arrays 此类包含用来操作数组的各种方法,比如排序和搜索等。其所有方法均为静态方法。

    3.2 操作数组的方法

    1.将参数数组变成字符串

    public static String toString(数组);

    public static void mian(String[] args){
        //定义一个int数组
        int[] arr = {1,3,5,6};
        //打印数组,输出地址值
       System.out.println(arr);//[I@2ac1fdc4
      	//将数组内容转换称为字符串
        String s = Arrays.toString(arr);
        //打印字符串,输出内容
        System.out.println(s);//[1,3,5,6]
        
    }
    
    

    2.对指定的类型数组按升序进行排序

    public static void sort(数组);

    备注:

    1. 如果是数值,sort默认按照升序从小到大
    2. 如果是字符串,sort默认按照字母的升序
    3. 如果是自定义的类型,那么这个自定义的类需要有Comparable或者Comparator接口的支持
    int[] array1 = {1,5,3,2,6};
    Arrays.sort(array1);
    System.out.println(array1);//[I@1b6d3586
    System.out.println(Arrays.toString(array1));//[1,2,3,5,6]
    
    String[] array2 = {"cc","bb","ee"};
    Arrays.sort(array2);
    System.out.println(array2);//[I@1b6d3586
    System.out.println(Arrays.toString(array2));//[bb,cc,ee]
    

    3.3 练习

    请使用 Arrays 相关的API,将一个随机字符串中的所有字符升序排列,并倒序打印

    public static void main(String[] args){
        //定义随机字符串
        String str = "asf25612gprkvxc";
        //转换成为字符数组
        char[] chars = str.toCharArray();
        //升序排列
        Arrays.sort(chars);
        //反向遍历
        for(int i = chars.length-1;i>=0;i--){
            System.out.println(char[i]);
        }
    }
    

    第四章 Math类

    4.1 概述

    java.lang.Math 类包含用于执行基本的数学运算的方法,如初等指数、对数、平方根和三角函数。

    类似这样的工具类,其所有方法均为静态方法,并且不会创建对象,调用起来很简单。

    4.2 基本运算

    1.获取绝对值

    有多种重载。

    public static double abs(double num);

    System.out.println(Math.abs(3.16));//3.16
    System.out.println(Math.abs(-3.16));//3.16
    
    

    2.向上取整

    public static double ceil(double num);

    System.out.println(Math.ceil(3.1));//4.0
    System.out.println(Math.ceil(3.0));//3.0
    

    3.向下取整

    public static double floor(double num);

    System.out.println(Math.floor(3.99));//3.0
    System.out.println(Math.floor(-3.01));//-4.0
    

    4.四舍五入

    public static double round(double num);

    System.out.println(Math.round(3.36));//3.0
    System.out.println(Math.round(3.69));//4.0
    

    5.Math.PI代表近似的圆周率

    4.3 练习

    请使用 Math 相关的API,计算在 -10.8 到 5.9 之间,绝对值大于 6 或者小于 2.1 的整数有多少个?

    public static void main(String[] args){
        //最小值
        double min = -10.8;
    	//最大值
        double max = 5.9;
        //定义变量计数
        int count = 0;
        for(double i = Math.ceil(min);i<=max;i++ ){
            //获取绝对值并判断
            double abs = Math.abs(i);
            if(abs >6 || abs < 2.1){
                System.out.print(abs);
                count++;
            }
        }
        System.out.println("个数为:"+count);
    }
    
  • 相关阅读:
    7种jvm垃圾回收器,这次全部搞懂
    3分钟学会redis主从复制搭建,及原理
    一文搞懂什么是递归,程序员必会算法之一
    Redis持久化方式:RDB和AOF详解,对比
    jvm垃圾回收算法详解,看这一篇就够了(求点赞)
    Redis命令大全,满足你的日常工作,看这一篇就够了(求点赞)
    Java自定义异常为什么性能差(求点赞)阿里双十一的性能凶手之一
    jvm类加载器,类加载机制详解,看这一篇就够了(求点赞)
    show processlist 命令详解,MySQL优化看这一篇就够了
    asp.net中的post和get请求操作
  • 原文地址:https://www.cnblogs.com/anke-z/p/12379898.html
Copyright © 2011-2022 走看看