Home java basic
Post
Cancel

java basic

对象和数组的内存

  • Java中所有对象都是new出来的;所有对象的内存都在堆空间;所有保存对象的变量都是引用类型
  • Java运行时环境有个垃圾回收器(Garbage Collector),会自动回收不再使用的内存
  • 当一个对象没有任何引用指向时,会被GC回收掉内存
  • 对象数组每个单元存储的是一个堆空间对象的地址

内存区域划分

  • PC寄存器 (Program Counter Register)

    存储Java虚拟机正在执行的字节码指令的地址

  • Java虚拟机栈(Java Virtual Machine Stack)

    存储栈帧

  • 堆 (Heap)

    存储GC所管理的各种对象

  • 方法区 (Method Area)

    存储每一个类的结构信息(比如字段和方法信息、构造方法和普通方法的字节码等)

  • 本地方法栈(Native Method Stack)

    用来支持native方法的调用(比如用C语言编写的方法)

  • Java的堆内存申请会自动进行初始化

数组

  • 引用类型

    数组元素存储在堆空间

创建

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int[] arr1;
int[] arr2 = {}; // 空数组
int arr3[] = {}; // 空数组

// 定义时指定内容
int[] arr4 = {1, 3, 4, 5};
int[] arr5 = new int[] {1, 2, 3, 5};

// 定义时指定容量
int[] arr6 = new int[4];
arr6[0] = 1;
arr6[1] = 2;

// 多维数组
int[][][] arr7;
int[] arr8[][];

this

  • 本质是一个隐藏的、位置最靠前的方法参数

  • 访问当前类中定义的成员变量
  • 调用当前类中定义的方法(包括构造方法)

方法

方法签名

由方法名、参数类型两部分组成

1
2
3
4
// 方法签名为:sum(int, long, double)
double sum(int i, long l, double d) {
	return i + l + d;
}

可变参数

  • 必须是参数列表的最后一个参数
1
int sum(String name int... numbers) {}

构造方法

  • 在构造方法中调用其他构造方法

    构造方法调用语句必须是构造方法中的第一条语句

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
      public Cat(String name, int age) {
      	this.name = name;
          this.age = age;
      }
      
      public Cat(String name) {
          // 如果出现,必须是第一句
          this(name, 0);
      }
    

重写 (Override)

  • 方法签名一样才构成重写

  • 子类重写父类的方法权限 >= 父类的方法的权限

  • 子类重写父类的方法的返回值类型 <= 父类方法的返回值类型

    1
    2
    3
    4
    5
    6
    7
    8
    
    Object test() {
    	return 10;
    }
      
    @override
    String test() {// 返回值类型变为Object的子类
        return "";
    }
    

super

  • 访问父类中定义的成员变量

  • 调用父类中定义的方法 (包括构造方法)

    子类的构造方法必须先调用父类的构造方法

    编译器会自动调用父类无参的构造方法

    ```java class Animal { private int age; Animal(int age) { this.age = age; } }

    class Cat extends Animal { private String name; Cat(String name, int age) { super(age); this.name = name; } }

    GUI编程

    AWT (Abstract Window Toolkit)

    Java官方最早推出的GUI编程开发包,界面风格跟随操作系统

    SWT (Standard Widget Toolkit)

    IBM推出、著名的开发工具Eclipse就是用SWT开发的

    Swing

    AWT的基础上扩充了功能,灵活且强大,在不同操作系统中可以保持统一风格

    JavaFX

    Java官方推出的最新一代GUI编程开发包,参考资料比Swing少一些

    数组遍历

  • 索引

    1
    2
    3
    
    for(int i = 0; i < list.length; i ++) {
    	list.remove(i);
    }
    
  • forEach

    1
    2
    3
    4
    
    for (Integer e : list) {
        // 有问题
        list.remove(e);
    }
    
    1
    2
    3
    4
    
    list.forEach((e) -> {
        // 有问题
    	list.remove(e);
    });
    
  • iterator

    1
    2
    3
    4
    5
    
    Iterator<Integer> it = list.iterator();
    while(it.hasNext()) {
        // 有问题
        list.remove(it.next());
    }
    

    遍历时使用迭代器的方法区删除

    1
    2
    3
    4
    5
    6
    
    Iterator<Integer> it = list.iterator();
    while(it.hasNext()) {
        // 没问题
        it.next();
        it.remove();
    }
    

IO

File

  • 文件分隔符

    1
    2
    3
    4
    5
    
    /*
    windows下为backSlash(\)
    mac、linux下为slash(/)
    */
    File.seperator;
    
  • 路径分隔符

    1
    2
    3
    4
    5
    
    /*
    windows下为semicolon(;)
    Mac, Linux下为colon(:)
    */
    File.pathSeperator;
    
  • 文件名

    在Windows、Mac下,不区分大小写

    在UNIX、Linux下,区分大小写

This post is licensed under CC BY 4.0 by the author.