答案:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
答案:Java虚拟机(Java Virtual Machine)是执行字节码文件的虚拟机进程。它的主要作用是:
答案:“static”关键字在Java中有多种用途:
class Student {
private static int studentCount = 0;
private String name;
public Student(String name) {
this.name = name;
studentCount++;
}
public static int getStudentCount() {
return studentCount;
}
}
在上述代码中,studentCount
是一个静态成员变量,记录学生的数量。每创建一个Student
对象,studentCount
就会自增1。可以通过Student.getStudentCount()
来获取学生总数。
class MathUtils {
public static int add(int a, int b) {
return a + b;
}
}
调用时可使用MathUtils.add(3, 5)
。
static
关键字定义的代码块,在类加载时执行,且只执行一次。常用于初始化静态成员变量或执行一些一次性的操作。例如:class Database {
private static Connection connection;
static {
try {
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "username", "password");
} catch (SQLException e) {
e.printStackTrace();
}
}
public static Connection getConnection() {
return connection;
}
}
上述代码中,静态代码块在Database
类加载时尝试建立数据库连接,后续可通过Database.getConnection()
获取连接。
答案:Java支持两种数据类型:
byte
(1字节)、short
(2字节)、int
(4字节)、long
(8字节)、float
(4字节)、double
(8字节)、boolean
(1位,具体实现可能不同)、char
(2字节,用于表示Unicode字符)。例如:
byte b = 10;
short s = 100;
int i = 1000;
long l = 10000000000L;
float f = 3.14f;
double d = 3.1415926;
boolean flag = true;
char c = 'A';
String str = "Hello";
int[] array = {1, 2, 3};
在上述代码中,str
是String
类的引用,array
是int
类型数组的引用。
答案:
public
,子类覆盖方法不能是protected
或private
)。例如:
class Animal {
public void makeSound() {
System.out.println("Animal makes a sound");
}
}
class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("Dog barks");
}
}
在上述代码中,Dog
类覆盖了Animal
类的makeSound
方法。
class Calculator {
public int add(int a, int b) {
return a + b;
}
public double add(double a, double b) {
return a + b;
}
public int add(int a, int b, int c) {
return a + b + c;
}
}
在上述Calculator
类中,定义了三个add
方法,通过不同的参数列表实现了方法重载。
答案:构造方法是一种特殊的方法,用于创建对象并初始化对象的成员变量。其特点如下:
Person
,其构造方法为Person
。class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
void
也不能有。new
关键字创建对象时,会调用相应的构造方法。例如:Person person = new Person("John", 25);
在上述代码中,创建Person
对象时,会调用参数为String
和int
的构造方法,将name
初始化为"John"
,age
初始化为25
。
class Person {
private String name;
private int age;
public Person() {
// 无参构造方法,可进行默认初始化
name = "Unknown";
age = 0;
}
public Person(String name) {
this.name = name;
age = 0;
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
在上述Person
类中,定义了三个构造方法,分别用于不同的初始化场景。
答案:Java类不支持多继承,即一个类不能同时继承多个父类。这是为了避免多继承带来的菱形继承问题(当一个类从多个父类继承相同的属性或方法时,可能会导致冲突和不确定性)。例如:
// 以下代码会报错,因为Java类不支持多继承
class A {}
class B {}
class C extends A, B {}
然而,Java通过接口(interface)实现了类似多继承的功能。一个类可以实现多个接口,从而获取多个接口的行为和规范。例如:
interface Flyable {
void fly();
}
interface Swimmable {
void swim();
}
class Duck implements Flyable, Swimmable {
@Override
public void fly() {
System.out.println("Duck is flying");
}
@Override
public void swim() {
System.out.println("Duck is swimming");
}
}
在上述代码中,Duck
类实现了Flyable
和Swimmable
两个接口,具备了飞行和游泳的行为。
答案:
public class ValueTransfer {
public static void main(String[] args) {
int num = 10;
System.out.println("Before method call: num = " + num);
changeValue(num);
System.out.println("After method call: num = " + num);
}
public static void changeValue(int n) {
n = 20;
}
}
在上述代码中,main
方法中的num
值为10,调用changeValue
方法时,将num
的值10传递给n
,在changeValue
方法中修改n
的值为20,但这并不会影响main
方法中num
的值,最终输出Before method call: num = 10
和After method call: num = 10
。
class Person {
String name;
public Person(String name) {
this.name = name;
}
}
public class ReferenceTransfer {
public static void main(String[] args) {
Person person = new Person("John");
System.out.println("Before method call: person.name = " + person.name);
changeName(person);
System.out.println("After method call: person.name = " + person.name);
}
public static void changeName(Person p) {
p.name = "Jane";
}
}
在上述代码中,main
方法创建了一个Person
对象,name
为"John"
,调用changeName
方法时,将person
的引用传递给p
,在changeName
方法中修改p
所指向对象的name
为"Jane"
,由于p
和person
指向同一个对象,所以main
方法中person
的name
也被修改为"Jane"
,最终输出Before method call: person.name = John
和After method call: person.name = Jane
。需要注意的是,在Java中,对象的传递本质上是引用传递,但基本数据类型的传递是值传递。
答案:
答案:有4种方式可以用来创建线程:
Thread
类。run
方法,在run
方法中编写线程执行的代码。start
方法启动线程。例如:
class MyThread extends Thread {
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName() + " : " + i);
}
}
}
public class ThreadCreationExample {
public static void main(String[] args) {
MyThread myThread = new MyThread();
myThread.start();
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName() + " : " + i);
}
}
}
在上述代码中,MyThread
类继承自Thread
类,重写了run
方法。在main
方法中创建MyThread
实例并调用start
方法启动线程,同时main
方法本身也是一个线程,两个线程并发执行。
Runnable
接口。run
方法,编写线程执行的代码。Thread
类的构造函数,然后调用Thread
实例的start
方法启动线程。例如:
class MyRunnable implements Runnable {
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println
```...
---