> 文章列表 > 【JavaSE】复习(进阶)

【JavaSE】复习(进阶)

【JavaSE】复习(进阶)

文章目录

  • 1.final关键字
  • 2.常量
  • 3.抽象类
    • 3.1概括
    • 3.2 抽象方法
  • 4. 接口
    • 4.1 接口在开发中的作用
    • 4.2类型和类型之间的关系
    • 4.3抽象类和接口的区别
  • 5.包机制和import
    • 5.1 包机制
    • 5.2 import
  • 6.访问控制权限
  • 7.Object
    • 7.1 toString()
    • 7.2 equals()
    • 7.3 String类重写了toString和equals
  • 8.内部类
    • 8.1 概述
    • 8.2内部类示例
    • 8.3 匿名内部类
  • 9.数组
    • 9.1声明
    • 9.2 初始化
    • 9.3 main方法的String数组
    • 9.4数组扩容
    • 9.5 二维数组
    • 9.6Array

1.final关键字

final修饰的类无法继承

final修饰的方法无法被覆盖,被重写。

final修饰的局部变量,一旦赋值,就不能再赋值。

final修饰的引用,只能指向同一个对象,不能再指向其它对象。在该方法中,该引用指向该对象后,该对象不会被垃圾回收器回收。直到该方法结束。

fianl修饰的实例变量,系统不管,程序员必须手动赋值。在变量后面赋值可以,在构造方法中赋值也可以。

2.常量

final修饰的实例变量一般添加static修饰。

3.抽象类

3.1概括

类和类之间有共同特征,将共同特征提取出来,构成抽象类。

抽象类也属于引用数据类型。

语法:

[修饰符列表] abstract class 类名 {类体;
}

抽象类无法被实例化,但抽象类有构造方法,供子类使用。

3.2 抽象方法

【JavaSE】复习(进阶)

抽象类不一定有抽象方法,抽象方法一定在抽象类中。

非抽象类继承抽象类的时候,非抽象类要将父类继承过来的抽象方法进行重写。

4. 接口

接口也是一种引用数据类型,编译后也生成.class字节码
语法:

[修饰符列表] interface 接口名{}

接口支持多继承

接口中只有常量和抽象方法。

接口中的方法定义时 public abstract 可以省略。
接口中的常量定义时 public static final 可以省略。

类和接口之间叫做实现。使用implements关键字。
类和类之间叫做继承。使用extends关键字。

当一个非抽象类实现一个接口时,必须重写接口中的所有抽象方法。

4.1 接口在开发中的作用

【JavaSE】复习(进阶)

4.2类型和类型之间的关系

【JavaSE】复习(进阶)

4.3抽象类和接口的区别

【JavaSE】复习(进阶)

5.包机制和import

5.1 包机制

package 包名

注:该语句只能出现在java源代码的第一行。
包名一般为:公司域名倒序 + 项目名 + 模块名 + 功能名

使用包机制后,编译

javac -d . HelloWorld.java

运行使用

java 包名.原来的类名

(类名改变)

5.2 import

【JavaSE】复习(进阶)

6.访问控制权限

【JavaSE】复习(进阶)
【JavaSE】复习(进阶)

7.Object

7.1 toString()

package com.sdnu.test01;public class MyTime {public static void main(String[] args) {TestTime testTime = new TestTime();System.out.println(testTime.toString());TestTime testTime1 = new TestTime(2000, 2, 6);System.out.println(testTime1.toString());}
}
class TestTime {int year;int month;int day;public TestTime(){}public TestTime(int year, int month, int day){this.year = year;this.month = month;this.day = day;}/* 重写* @return String*/public String toString(){return "testTime" + "@" + this.year + "\\\\" + this.month + "\\\\" + this.day;}
}

testTime@0\\0\\0
testTime@2000\\2\\6

7.2 equals()

该方法返回是否是同一个对象。

package com.sdnu.test01;import java.util.Objects;public class TestEquals {int year;int month;int day;public TestEquals() {}public TestEquals(int year, int month, int day) {this.year = year;this.month = month;this.day = day;}public int getYear() {return year;}public int getMonth() {return month;}public int getDay() {return day;}@Overridepublic String toString() {return "TestEquals{" +"year=" + year +", month=" + month +", day=" + day +'}';}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;TestEquals that = (TestEquals) o;return year == that.year &&month == that.month &&day == that.day;}public static void main(String[] args) {TestEquals testEquals = new TestEquals();TestEquals testEquals1 = new TestEquals(2000, 2, 8);System.out.println(testEquals.equals(testEquals1));}
}

7.3 String类重写了toString和equals

8.内部类

8.1 概述

在类的内部又定义了一个新的类。
分类:静态内部类,实例内部类,局部内部类。

8.2内部类示例

package com.sdnu.test01;public class Inner {static class Inner1{}class Inner2{}public void method(){class Inner3{}}
}

8.3 匿名内部类

9.数组

9.1声明

类型[] 数组名

9.2 初始化

静态初始化:

类型[] 数组名 = {122345};

动态初始化:

类型[] 数组名 = new 类型[数组长度];

9.3 main方法的String数组

【JavaSE】复习(进阶)

9.4数组扩容

创建一个大的数组,然后将小数组的数据拷贝到大数组中。

package com.sdnu.javase.array;public class ArrayTest01 {public static void main(String[] args) {int[] src = {12, 23, 45};int[] dest = new int[20];System.arraycopy(src, 0, dest, 0, src.length);for(int i = 0; i < src.length; i++){System.out.println(dest[i]);}}
}

9.5 二维数组

声明和初始化

int 数组名[][] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};

9.6Array

java.util.Arrays