Java基础知识二次复习

Java基础知识二次复习

构造器Constructor是否可以被override?

构造器Constructor不能被集成,因此不能重写(Override),但可以被重载(Overload)

接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(conctrete class)?抽象类中是否可以有静态的main方法?

接口可以继承接口。抽象类可以实现(implements)接口,抽象类也可以继承具体类。抽象类中可以有静态的main方法。

归纳:抽象类的特征是有得有失,得到的功能是抽象类可以拥有抽象方法(当然也可以没有);失去的功能的是抽象类不能创建实例了。至于其他的,抽象类于普通类在语法上大致是一样的。

写clone()方法时,通常都有一行代码,是什么?

clone()有默认行为:super.clone();因为首先要把父类中的成员复制到位,然后才是复制自己的成员。

abstract class和interface有什么区别?

含有abstract修饰符的class即为抽象类,abstract类不能创建的实例对象。含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必是抽象的。abstract class类中定义抽象方法必须在具体(Concrete)子类中实现,所以,不能有抽象构造方法或者抽象静态方法。如果的子类没有实现抽象父类中的所有抽象方法,那么子类也必须定义为abstract类型。

接口(interface)可以说成是抽象类的一种特例,接口中的方法都必须要是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final

需要说明的是,Java 8增强后的接口可以定义默认方法(使用default修饰的方法)和类方法(使用static修饰的方法),接口中的默认方法和类方法都不再是抽象方法,都需要提供方法体。Java 9则允许接口中定义private方法,private方法可以拥有方法体。

下面比较一下两者的语法区别

  1. 抽象类可以有构造器,接口中不能有构造器。
  2. 抽象类中可以有普通成员变量,接口中灭有普通成员变量
  3. 抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能都非抽象的普通方法。Java 8增强的接口可拥有默认方法和类方法,接口中的默认方法和类方法都不在是抽象方法,都需要提供方法体。Java 9则允许接口中定义private方法,private方法可以拥有方法体。
  4. 抽象类中的抽象方法的访问类型可以是public,protected和默认访问权限。但接口中的方法只能是public的。如果普通实例方法则必须是抽象方法,如果是默认方法则必须使用default修饰;如果是类方法则必须使用static修饰。
  5. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
  6. 一个类可以实现多个接口,但只能继承一个抽象类。

下面接着再说说两者在应用上的区别:

接口更多的是在系统架构设计方法发挥作用,接口体现的是一种规范。而抽象类在代码实现方面发挥作用,可以实现代码的重用,例如,模板模式是抽象类的一个典型应用,假设项目中需要需要使用大量的DAO组件,这些DAO组件通常都具有增、删、改、查等基本方法,因此我们就可以定义一个抽象的DAO基类,然后让其他DAO组件来继承这个DAO基类,把这个DAO基类当成模板使用。

abract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?

abstract的method不可以是static的,因为抽象的方法是要被子类实现的,而static与子类扯不上关系!

native方法表示该方法要用另外一种依赖平台的编程语言实现的,不存在着被子类实现的问题,所以,它不能抽象的,不能与abstrat混用。

JDK中那些类是不能继承的?

使用final修饰的类都不可以被继承

实际上即使自己开发的类,也可以通过使用final修饰来阻止被继承。通过final修饰的类被为最终类,最终类不能派生子类,这样该类就被完全地封闭起来了,不会有子类来重写它的方法,因此更加安全。

去掉一个Vector集合中重复的元素
Vector newVector=new Vector();
for(int i=0;i<vector.size();i++){
    Object obj=vector.get(i);
    if(!newVector.coutains(obj))
    {
        newVector.add(obj);
    }
}

另外,还有一种更见简单的方式:将Vector添加到HashSet,例如如下代码:

HashSet set=new HashSet(vector);

但上面代码将会导致Vector中元素丢失顺序。

Java基础语法思维导图
1

### Java基础知识复习:期末考试重点 Java 是一门面向对象的编程语言,广泛用于企业级应用开发、Web 应用、Android 移动端等场景。为了应对期末考试,以下内容将系统性地梳理 Java 编程语言基础知识与考试重点。 --- #### 一、面向对象编程(OOP) 1. **类与对象** 类是对象的模板,对象是类的具体实例。在 Java 中,通过 `class` 关键字定义类,并使用 `new` 创建对象。 ```java class Person { String name; int age; void sayHello() { System.out.println("Hello, my name is " + name); } } public class Main { public static void main(String[] args) { Person p = new Person(); p.name = "Alice"; p.sayHello(); // 输出: Hello, my name is Alice } } ``` 2. **访问修饰符** Java 提供了三种主要的访问控制修饰符: - `private`:仅在本类中可访问。 - `protected`:在本包子类中可访问。 - `public`:所有地方均可访问[^1]。 3. **继承与多态** 继承通过 `extends` 实现,子类可以继承父类的非私有成员。多态允许子类重写父类方法,实现运行时绑定。 ```java class Animal { void sound() { System.out.println("Animal makes a sound"); } } class Dog extends Animal { void sound() { System.out.println("Dog barks"); } } public class Main { public static void main(String[] args) { Animal a = new Dog(); a.sound(); // 输出: Dog barks } } ``` --- #### 二、输入输出流(I/O) Java 提供了丰富的 I/O 操作类,如 `FileInputStream`、`FileOutputStream`、`BufferedReader` `PrintWriter` 等,用于处理文件读写操作。 ```java import java.io.*; public class FileIOExample { public static void main(String[] args) { try (BufferedReader br = new BufferedReader(new FileReader("input.txt"))) { String line; while ((line = br.readLine()) != null) { System.out.println(line); } } catch (IOException e) { e.printStackTrace(); } } } ``` --- #### 三、异常处理 Java 使用 `try-catch-finally` 结构来捕获处理异常,也可以使用 `throw` 抛出异常。 ```java public class ExceptionHandling { public static void main(String[] args) { try { int result = divide(10, 0); System.out.println(result); } catch (ArithmeticException e) { System.out.println("Cannot divide by zero!"); } } public static int divide(int a, int b) { if (b == 0) { throw new ArithmeticException("Division by zero"); } return a / b; } } ``` --- #### 四、图形用户界面(GUI) Java 提供了 AWT Swing 两个 GUI 开发库。Swing 更加灵活且功能丰富,适合现代桌面应用开发。 ```java import javax.swing.*; public class SimpleGUI { public static void main(String[] args) { JFrame frame = new JFrame("Simple GUI"); JButton button = new JButton("Click Me!"); button.addActionListener(e -> JOptionPane.showMessageDialog(frame, "Button clicked!")); frame.add(button); frame.setSize(300, 200); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } } ``` --- #### 五、多线程 Java 支持多线程编程,可以通过继承 `Thread` 类或实现 `Runnable` 接口创建线程。 ```java class MyThread implements Runnable { public void run() { for (int i = 0; i < 5; i++) { System.out.println(Thread.currentThread().getName() + " - " + i); try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } } } } public class MultiThreadingExample { public static void main(String[] args) { Thread t1 = new Thread(new MyThread(), "Thread-1"); Thread t2 = new Thread(new MyThread(), "Thread-2"); t1.start(); t2.start(); } } ``` --- #### 六、泛型与集合框架 Java 泛型提供编译时类型安全检查,避免运行时 ClassCastException。常见的集合类包括 `ArrayList`、`HashMap`、`HashSet` 等。 ```java import java.util.ArrayList; public class GenericExample { public static void main(String[] args) { ArrayList<String> list = new ArrayList<>(); list.add("Apple"); list.add("Banana"); for (String fruit : list) { System.out.println(fruit); } } } ``` --- #### 七、Java 文件结构与跨平台原理 Java 的“一次编写,到处运行”特性依赖于 JVM(Java 虚拟机)。Java 源代码(`.java`)被编译为字节码(`.class`),然后由 JVM 解释执行,从而实现跨平台兼容性[^1]。 --- #### 八、临界资源与同步机制 多个线程访问共享资源时,需要使用同步机制保证数据一致性。Java 提供了 `synchronized` 关键字 `ReentrantLock` 类来实现线程同步。 ```java class Counter { private int count = 0; public synchronized void increment() { count++; } public int getCount() { return count; } } public class SyncExample { public static void main(String[] args) throws InterruptedException { Counter counter = new Counter(); Thread t1 = new Thread(() -> { for (int i = 0; i < 1000; i++) { counter.increment(); } }); Thread t2 = new Thread(() -> { for (int i = 0; i < 1000; i++) { counter.increment(); } }); t1.start(); t2.start(); t1.join(); t2.join(); System.out.println("Final count: " + counter.getCount()); // 应为 2000 } } ``` --- #### 九、泛型方法示例 泛型方法允许在调用时指定类型参数,增强灵活性。 ```java public class GenericMethods { public static <T extends Comparable<T>> int compare(T a, T b) { return a.compareTo(b); } public static void main(String[] args) { System.out.println(compare(1.1, 2.5)); // 输出负数 System.out.println(compare(9.9, 9.9)); // 输出 0 System.out.println(compare(7.8, 3.9)); // 输出正数 } } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值