Java复习笔记

Java复习笔记

  1. 各种数据类型的存储范围

下面摘自清华的java慕课课件

  1. 标识符 ▫ 标识符是一个名称,与内存中的某个位置(地址) 相对应 ▫ 标识符的第一个字符必须是下列字符之一:  大写字母 (A-Z)  小写字母 (a-z)  下划线(_)  美元符号 ($) ▫ 标识符的第二个字符及后继字符必须是:  上述列表中的任意字符  数字字符 (0-9)

  2. 数值型文字量 数据类型 文字量 byte,short,int 十进制数,开头不为0;0X跟十六进制数,如0XF1C4; 0跟八进制数,如0726 long 同上,但后面跟l或L,如:84l,0X1F39L float 数字后跟f或F,如1.23456F,1.893E2F double 后面可选d或D做后缀,如:1.23D boolean true或false

  3. 扩展转换 ▫ byte, char, short, int, long, float, double ▫ 从一种整数类型到另一种整数类型,或者从 float到double的转换不损失任何信息 ▫ 从整数类形向float或double转换,会损失精度 • 窄化转换 ▫ double, float, long, int, short, byte,char ▫ 窄化转换可能会丢失信息

  4. 隐含转换 ▫ 赋值转换  将表达式类型转换为制定变量的类型 ▫ 方法调用转换  适用于方法或构造方法调用中的每一个参数 ▫ 字符串转换  任何类型(包括null类型)都可以转换为字符串类型  只当一个操作数是String类型时, 适用于+运算符的操作数

  5. 数组是对象 ▫ 动态初始化 ▫ 可以赋值给Object类型的变量 ▫ 在数组中可以调用类Object 的所有方法 ▫ 每个数组都有一个由 public final 修饰的成员变量: length ,即数组含有元素的个数(length可以是正 数或零)

注:声明新数组时的new也一样说明了数组是一个Object arrayName=new Type[componets number]; 这里数组也像其他类一样做了自己的初始化(给自己分配空间)。

  1. 两种数组 基本类型数组的每个元素都是一个基本类型的变 量;引用类型数组的每个元素都是对象的的引用

创建数组的时,如果没有指定初始值,数组 便被赋予默认值初始值。 ▫ 基本类型数值数据,默认的初始值为0; ▫ boolean类型数据,默认值为false; ▫ 引用类型元素的默认值为null。

  1. 复制数组 public static void arraycopy(Object source , int srcIndex ,Object dest , int destIndex , int length )

  2. 数组的数组 int[ ][ ] myArray = new int[3][5] ; 我之前错误的理解方式是int[3]作为一个类型,int[3][5]就是5个长3的数组。 但是还是python的理解方式对 myArray = [int[5],int[5],int[5]] 所以无论是new后面的int[3][5],还是取值时的myArray[2][4],都表示取出。int[3]表示第一次可以取三个,从0到2,myArray[2][4]表示先取第三个再取第五个。 现在回首发现好像所有的语言数组都是这样的,行优先

  3. switch switch-expression、常量值value1到valueN必须是整形或字符型 但是最近好像增加了对string的支持

  4. 逗号 java里不用逗号符,但是可以用于for语句里面的分隔

  5. 可变长参数 • 可变长参数使用省略号表示,其实质是数组。 • 例如,“String … s”表示“String[] s” 。 • 对于具有可变长参数的方法,传递给可变长参数的实际参数可以是 零个到多个对象。

    1
    2
    3
    4
    5
    6
    static double maxArea(Circle c, Rectangle... varRec) {
    Rectangle[] rec = varRec;
    for (Rectangle r : rec) {
    //…
    }
    }

  6. 包 一个包可以包含若干个类文件,还可包含若干个包

  7. 编译单元 • 一个Java源代码文件称为一个编译单元,由三部分组成: ▫ 所属包的声明(省略,则属于默认包); ▫ Import (引入)包的声明,用于导入外部的类; ▫ 类和接口的声明。 • 一个编译单元中只能有一个public类,该类名与文件名相同,编译 单元中的其他类往往是public类的辅助类,经过编译,每个类都会 产一个class文件。

注:所以并不是一个文件只存一个类,而是只让存一个public类

  1. 类的成员访问权限控制 公有(public) ▫ 可以被其他任何方法访问(前提是对类成员所属的类有访问权限) • 保护(protected) ▫ 只可被同一类及其子类的方法访问 • 私有(private) ▫ 只可被同一类的方法访问 • 默认(default)(无修饰) ▫ 仅允许同一个包内的访问;又被称为“包(package)访问权限” 注:主要不记得最后的默认

  2. 构造方法内的this关键字 • 可以使用this关键字在一个构造方法中调用另外的构造方法; • 代码更简洁,维护起来也更容易; • 通常用参数个数比较少的构造方法调用参数个数最多的构造方法。

  3. 对象的自动回收 • 无用对象 ▫ 离开了作用域的对象; ▫ 无引用指向对象。 • Java运行时系统通过垃圾收集器周期性地释放无用对象所使用的内存。 • Java运行时系统会在对对象进行自动垃圾回收前,自动调用对象的finalize()方法。

  4. finalize()方法 • 在类java.lang.Object中声明,因此 Java中的每一 个类都有该方法: protected void finalize() throws throwable • 用于释放资源。 • 类可以覆盖(重写)finalize()方法。 • finalize()方法有可能在任何时机以任何次序执行。

  5. 枚举类 特点: 一、 只有有限个实例化的对象 -->可以用==判断 所有枚举类型都隐含继承(扩展)自java.lang.Enum,因此枚举类型不能再继承其他任何类 枚举类型的构造方法必须是包内私有或者私有的。定义在枚举开头的常量会被自动创建,不能显式地调用枚举类的构造方法。 例子:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    public enum Planet {
    MERCURY (3.303e+23, 2.4397e6),
    VENUS (4.869e+24, 6.0518e6),
    EARTH (5.976e+24, 6.37814e6),
    MARS (6.421e+23, 3.3972e6),
    JUPITER (1.9e+27, 7.1492e7),
    SATURN (5.688e+26, 6.0268e7),
    URANUS (8.686e+25, 2.5559e7),
    NEPTUNE (1.024e+26, 2.4746e7);
    private final double mass; // in kilograms
    private final double radius; // in meters
    Planet(double mass, double radius) {
    this.mass = mass;
    this.radius = radius;
    }
    private double mass() { return mass; }
    private double radius() { return radius; }
    // universal gravitational constant (m3 kg-1 s-2)
    public static final double G = 6.67300E-11;
    double surfaceGravity() {
    return G * mass / (radius * radius);
    }
    double surfaceWeight(double otherMass) {
    return otherMass * surfaceGravity();
    }
    枚举型变量可以带自己的操作方法,甚至构造方法,但是只能在声明时调用构造方法,从而只有有限个实例对象。

  6. 通配符泛型 •使用通配符 可以使程序更为通用

    1
    2
    3
    4
    5
    class ShowType {
    public void show (GeneralType<?> o){
    System.out.println(o.getObj().getClass().getName());
    }
    }

  7. 有限制的泛型 •在参数“ Type” 后面使用“ extends” 关键字并加上类名或接口名,表明参数所代表的类型必须是该类的子类或者实现了该接口 ▫注意,对于实现了某接口的有限制泛型,也是使用 extends 关键字,而不是 implements 关键字

  8. 构造方法中调用多态方法 •在构造方法内调用准备构造的那个对象的动态绑定方法 ▫被调用方法要操纵的成员可能尚未得到正确的初始化 ▫可能造成一些难于发现的程序错误 所以要注意 •用尽可能少的动作把对象的状态设置好; •如果可以避免,不要调用任何方法; •在构造方法内唯一能够安全调用的是在超类中具有 final 属性的那些方法(也适用于 private 方法,它们自动具有 final 属性)。这些方法不能被覆盖,所以不会出现前述的潜在问题。