字符串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会在堆里创建一个对象
内部类
把一个类放在另一个类的内部进行定义,被称为内部类
两个要点
- 内部类提供了更好的封装,只能外部类进行访问,同一包内的其他类不能直接访问
- 内部类可以直接访问外部类的私有属性,但外部类不能直接访问内部类的内部属性
数组
创建方式
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方法就不一样了,这就是面向对象的多态吗,方法的多态