2022.1.5Java基础

字符串String

  • String类又称作不可变字符序列
  • String位于java.lang包中,java默认导入java.lang包下的所有类
  • String类型是由Unicode字符序列组成,如字符串“java”就是由四个Unicode字符‘j’,‘a’,‘v’,‘a’组成的
public class TestString {

    public static void main(String[] args) {
        String s0=null;
        String s1="";       //空字符串
        String s2="java";
        String s3=new String("java");
        System.out.println(s1.length());
        System.out.println(s2.length());
        System.out.println(s0.length());
    }
}

s0和s1不是一回事,空字符串也是有东西的,他的字符个数是0,但null没有字符个数,这里会报一个空指针异常错误。

String重写了equals方法

常量池

实际上分为三种:全局字符常量池、class文件常量池、运行时常量池

String g1="中单无敌";
String g2="中单无敌";
String g3=new String("中单无敌");

System.out.println("g1==g2:"+(g1==g2));
System.out.println("g1==g3:"+(g1==g3));
System.out.println("g1.equals(g3):"+g1.equals(g3));
    

g1和g3是由区别的,g3会在堆里创建一个对象

 内部类

把一个类放在另一个类的内部进行定义,被称为内部类

 两个要点

  1. 内部类提供了更好的封装,只能外部类进行访问,同一包内的其他类不能直接访问
  2. 内部类可以直接访问外部类的私有属性,但外部类不能直接访问内部类的内部属性

 

 数组

创建方式

int[] s0;
s0=new int[10];

int[] s1 = new int[4];

int s2[]=new int[4];

三种初始化

package com.itbaizhan;

public class Test02 {
    public static void main(String[] args) {
        //静态初始化
        int[] a={1,2,3};
        Man mans[] = {
                new Man(001,20),
                new Man(002,21),
                new Man(003,23)
        };

        //动态初始化
        int[] s = new int[2];
        s[0]=5;
        s[1]=6;

        //数组默认初始化,会和对象一样创建就有个默认值
    }
}

两种遍历

int[] s = new int[5];
for (int i =0;i<s.length;i++){
    s[i]=i+1;
}
//foreche,这种方法只能读取,不能对数组元素进行操作
for (int x:s) {
    System.out.println(x);
}

数组的拷贝

public class Test04 {
    public static void main(String[] args) {
        String[] s={"阿里","尚学堂","京东","腾讯"};
        String[] sBak = new String[6];
        System.arraycopy(s,0,sBak,1,s.length);
        for (int i=0;i<sBak.length;i++) {
            System.out.print(sBak[i]+"\t");
        }
    }
}

Arrays工具类常用的方法

package com.itbaizhan;

import java.util.Arrays;

/**
 * 测试Arrays类
 */

public class Test05 {
    public static void main(String[] args) {
        int[] a={1,2,6,4,3};
        System.out.println(a);
        //显示a数组的元素
        System.out.println(Arrays.toString(a));

        //排序
        Arrays.sort(a);
        System.out.println(Arrays.toString(a));

        //二分法查找(需要先排序,排以后才能使用)
        System.out.println("元素4的索引:"+Arrays.binarySearch(a,4));

        //填充数组
        Arrays.fill(a,1,a.length,30);
        System.out.println(Arrays.toString(a));
    }
}

使用javabean和数组保存数据

原来写法

public class Test07 {
    public static void main(String[] args) {
        Object[] a1={001,"老高",18,"讲师","2-14"};
        Object[] a2={002,"小博",18,"学生","10-10"};
        Object[] a3={003,"小八",18,"助教","5-5"};

        Object[][] es = new Object[3][];
        es[0]=a1;
        es[1]=a2;
        es[2]=a3;
        for (Object[] x:es
             ) {
            System.out.println(Arrays.toString(x));
        }
    }
}

javabean后

package com.itbaizhan;

public class Test08 {
    public static void main(String[] args) {
        Emp[] emps = {
                new Emp(001,"老高",18,"讲师","2-14"),
                new Emp(002,"小博",18,"学生","10-10"),
                new Emp(003,"小八",18,"助教","5-5")
        };
        for(Emp e:emps){
            System.out.println(e.toString());
        }
    }
}

class Emp{
    private int id;
    private String name;
    private int age;
    private  String job;
    private String hiredate;

    @Override
    public String toString() {
        return "Emp{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", job='" + job + '\'' +
                ", hiredate='" + hiredate + '\'' +
                '}';
    }

    public Emp(int id, String name, int age, String job, String hiredate) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.job = job;
        this.hiredate = hiredate;
    }

    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;
    }

    public String getJob() {
        return job;
    }

    public void setJob(String job) {
        this.job = job;
    }

    public String getHiredate() {
        return hiredate;
    }

    public void setHiredate(String hiredate) {
        this.hiredate = hiredate;
    }
}

Comparable接口

package com.itbaizhan;

import java.util.Arrays;

public class Test09 {

    public static void main(String[] args) {
        Man2[] msMans={
                new Man2(3,"a"),
                new Man2(60,"b"),
                new Man2(3,"c")
        };
        System.out.println(Arrays.toString(msMans));
        Arrays.sort(msMans);
        System.out.println(Arrays.toString(msMans));
    }

}

class Man2 implements Comparable{
    int age;
    int id;
    String name;

    public Man2(int age,  String name) {
        this.age = age;
        this.name = name;
    }

    @Override
    public String toString() {
        return this.name;
    }

    @Override
    public int compareTo(Object o) {
        Man2 man2= (Man2)o;
        if(this.age<man2.age){
            return -1;
        }
        if(this.age>man2.age){
            return 1;
        }
        return 0;
    }
}

我觉得非常牛批的地方就是这个重写,重写了Object类里的toString,Comparable接口里的compareTo方法,然后调用Arrays工具类的ToString方法、sort方法就不一样了,这就是面向对象的多态吗,方法的多态

猜你喜欢

转载自blog.csdn.net/qq_41302243/article/details/122321219