常用数据类型
数组
数组是一个引用数据类型,普通的赋值操作只是引用传递的过程,它们都会指向同一个堆内存地址。 增强型for循环,不用通过下标,就可以直接获取数组中的值。 for(数据类型 变量: 数组 | 集合){}
public static void main(String[] args) {
int data[] = new int[] {1,2,3,4};
// 数组引用传递
int arr[] = data;
arr[1] = 6;
for (int val: arr) {
System.out.println(val);
}
System.out.println(data[1]);
}
二维数组,二维数组为一个特殊的一维数组,其每个元素都是一个一维数组。
对象数组
Cat c [] = new Cat[2];
c[0] = new Cat("cat1",3);
c[1] = new Cat("cat2", 3);
数组相关类库 数组排序java.util.Arrays.sort 数组拷贝System.arraycopy
// 可变类型参数
public static void printArray(int ...args){
for (int arg:args) {
System.out.print(arg+",");
}
System.out.println("");
}
int arr1[] = new int[] {1,2,3,4,5,6,7,8,9};
int arr2[] = new int[] {11,22,33,44,55,66,77,88,99};
//源数组,源数组开始点,目标数组,目标数组开始点,长度
System.arraycopy(arr1,3, arr2,3,3);
printArray(arr1);
printArray(arr2);
类关联
类通过引用传递来实现类之间的关联,同时也可以实现与自身的关联。
public static void main(String[] args) {
Person p = new Person("nangong", 24);
Person child1 = new Person("child1", 10);
Person child2 = new Person("child2", 11);
child1.setDog(new Dog("1号狗",100));
child2.setDog(new Dog("2号狗",180));
Dog dog = new Dog("xiaohuang", 1000);
// 类之间建立联系
p.setDog(dog);
dog.setPerson(p);
p.setChildren(new Person[]{child1, child2} );
System.out.println(p.getDog().getInfo());
for (int i = 0; i <p.getChildren().length ; i++) {
System.out.println("\t|- " + p.getChildren()[i].getInfo());
System.out.println("\t\t|- " + p.getChildren()[i].getDog().getInfo());
}
}
String类
string类型是不可变的,其底层采用数组来实现,也没有提供修改value数组的方法。 Java1.8以前采用char数组来实现,Java1.9以后采用byte数组来实现。
String常量是一个匿名对象,栈内存存放的是地址的引用,而不是实际值。
字符串常量与实例化对象比较,字符串常量调用equals方法能够防止空指针异常。
String类实例化的两种方式结果是不一样的。
直接赋值的方式,会将对象放入字符串常量池中,达到对象复用的效果。 而构造方式会产生两个实例化对象,并且会重新开辟一个堆内存空间,不会引用字符串常量池中的对象。
字符串常量池
为了达到相同字符串重用的效果,jvm中会单独开辟一块内存用来存放字符串常量,通常适用于字面量创建字符串的方式。 需要解析动态变量,当对应的类或接口被加载时,运行时常量池就会被创建出来。 像下面的代码中string3就因为使用了变量name,所以不能复用字符串常量池,只能放入运行时常量池中。
字符串不可变性
String本身是不可变的,通过+
操作符也只是将地址指向一个新的内存空间,会重新创建一个新的字符串,所以一般在for循环中也不建议用+
运算符重载语法糖,这样会产生很多垃圾对象。
主方法字符串数组参数
main方法接收String类型的数组参数,该数组中保存执行java命令时传递给所运行的类的参数
idea在Run -> Edit Configurations下、配置 可以设置运行参数配置: Program arguments 、Environment variables 和 VM options。
public static void main(String[] args) {
for (String arg: args){
System.out.println(arg);
}
}
String常用方法
JavaDoc9文档在线链接
字符相关 charAt、toCharArray() 字节相关 getBytes 字符串比较(相等,大小比较) equals、equalsIngoreCase、compareTo(String anotherString)、compareToIgnoreCase() 字符串查找 contains(CharSequence s)判断是否包含子串、indexOf系列方法、startsWith、endsWith 字符串替换 replaceAll(String regex, String replacement)、replaceFirst 字符串拆分 split(String regex, int limit)返回String[],limit拆分指定个数。 字符串截取 substring(int beginIndex, int endIndex),endIndex可选 字符串格式化 format(String format, Object... args) concat(不进入字符串常量池)、intern(字符串入池)、isEmpty()、trim、length、toUpperCase、toLowerCase
IDEA快捷键
删除当前行, 默认是 ctrl + Y 复制当前行, 自己配置 ctrl + d 补全代码 alt + / 添加注释和取消注释 ctrl + / 导入该行需要的类 先配置 auto import , 然后使用 alt+enter 即可 快速格式化代码 ctrl + alt + L类 快速运行程序 ctrl + shift + f10 生成构造器等 alt + insert 查看一个类的层级关系 ctrl + H 将光标放在一个方法上,输入 ctrl + B , 可以定位到方法