java学习笔记
Java 方法返回值
-
Java 是一种强类型语言,方法在定义时必须明确指定返回值的类型。 这确保了类型安全和代码的可预测性.
-
方法返回值不能缺省。 必须显式声明返回类型.
-
如果方法没有返回值,需要使用
void
关键字来表示。void
意味着该方法执行某些操作但不返回任何值。
访问修饰符权限范围
-
private
< (默认/无修饰符) <protected
<public
-
private
权限:private
成员只能在声明它们的类中访问。 这提供了最高级别的封装. -
默认 (无修饰符) 权限 (也称为包访问权限): 默认权限允许在同一个包中的所有类访问该成员,但在不同包中的类不能访问.
-
protected
权限:protected
成员可以在同一个包中的所有类以及所有子类(无论子类是否在同一个包中)中访问. -
public
权限:public
成员可以从任何地方访问,包括同一个类、同一个包中的其他类、不同包中的类以及子类。 这是最宽松的访问级别.
方法重载的特点:
-
同一个类中
-
方法名完全相同
-
参数类型或个数不同
-
返回值可以相同也可以不同
阐述重载Overload 和重写Override 的区别。
重写 (Override):
-
发生在父类与子类之间.
-
方法名、参数列表、返回类型必须相同 (除子类方法返回类型是父类方法返回类型的子类的情况)
-
子类重写父类方法,可以定义特定于子类的行为
重载 (Overload):
-
同一个类中
-
方法名完全相同
-
参数类型或个数不同
-
返回值可以相同也可以不同
重载 (Overload) 和重写 (Override) 的共同点:
-
方法名必须相同
-
都是Java多态性的表现
Java 抽象类与接口
-
抽象类:
-
使用
abstract
关键字修饰的类,其中可以包含抽象方法(仅有方法声明,没有方法体),也可以包含普通方法和成员变量。 -
不能被实例化,即不能使用
new
关键字创建对象。 -
抽象类必须先派生出子类,再创建子类的实例化对象。
-
子类必须实现抽象类中所有的抽象方法(除非子类也是抽象类)。
-
-
接口:
-
使用
interface
关键字声明,接口中定义的方法默认是public
和abstract
的,变量默认是public
、static
和final
的。 -
接口不能被实例化,只能被
implements
-
一个类可以实现多个接口
-
实现接口的类必须实现接口的所有方法
-
-
抽象类与接口的区别
-
a. 抽象程度: 接口的抽象程度更高,只包含方法声明,没有任何实现细节;抽象类可以有部分方法的实现。
-
b. 对应关系: 一个类只能继承一个抽象类,但可以实现多个接口。
-
c. 成员变量: 抽象类可以有各种类型的成员变量;接口中只能有静态常量(
public static final
修饰)。
-
什么是构造方法?构造方法的作用?定义构造方法时需要注意的事项?
构造方法的定义
- 构造方法(或称构造器)是一种特殊的方法,用于创建和初始化对象。
构造方法的作用:
- 在创建对象时执行初始化操作,例如为对象的实例变量赋初始值。
定义构造方法时需要注意的事项:
- 构造方法的名字必须与类名完全相同。
- 构造方法没有返回类型。
- 构造方法可以有参数,也可以没有参数(无参构造方法)。
- 一个类可以有多个构造方法(构造方法重载)。
- 构造器Constructor 不能被继承,因此不能重写Overriding,但可以被重载Overloading。
- 若重载了有参构造方法,一定要先重载无参构造方法,再调用无参构造方法,否则会报错。
解释异常Exception定义、分类。
定义
- 异常(Exception)是指在程序执行过程中发生的意外或不正常的情况,它会中断正常的指令流。Java使用异常处理机制来处理这些运行时错误。
分类
- 可检查异常 (Checked Exception):在源代码里必须显式地进行捕获处理,要么通过 throws 进行声明抛出,要么通过 try-catch 进行捕获处理,否则不能通过编译。
- 不可检查异常 (Unchecked Exception):指运行时异常 (Runtime Exception) 及其子类,并不会在编译期强制要求。
阐述用户线程和守护线程。
用户线程 (User Thread):
- 程序主体: 用户线程是程序中执行主要任务的线程,例如执行核心业务逻辑。
- 阻止JVM退出:只要有任何用户线程在运行,Java虚拟机(JVM)就不会退出。
- 默认线程: 在Java中创建的线程默认是用户线程。
- 生命周期独立: 用户线程的生命周期独立于其他线程,直到其任务完成或被显式停止。
- main线程:Java程序的main方法运行在一个用户线程中。
守护线程 (Daemon Thread):
- 后台服务: 守护线程主要用于为其他用户线程提供后台服务和支持。
- 不阻止JVM退出: 当所有用户线程都结束时,即使仍有守护线程在运行,JVM也会退出。 守护线程的退出不会影响JVM的退出。
- 生命周期依赖: 守护线程的生命周期依赖于用户线程。
- 设置方法: 通过调用线程对象的
setDaemon(true)
方法可以将线程设置为守护线程。 - 设置时机:
setDaemon(true)
方法必须在线程的start()
方法调用之前设置,否则会抛出IllegalThreadStateException
。 - 资源释放: 守护线程不应持有需要关闭的资源(如打开文件),因为它们可能在没有执行
finally
块的情况下被终止。 - 创建新线程: 在守护线程中创建的新线程默认也是守护线程。
- 优先级: 守护线程通常具有较低的优先级。然而,对于线程调度器来说,在优先级相同的情况下,守护线程和用户线程被执行的概率是相同的。
- join()方法: 即使是守护线程,如果调用了
join()
方法,程序依然会等待该守护线程执行完毕。
已知数据库mydatabase中的表student如下,其中id为整型,name、sex为字符串型,数据库用户名为zyt,密码为pd12345,程序从数据库中读取所有记录并且输出。请填上空缺的代码。
id | name | sex |
---|---|---|
2013239 | 陈雪 | 女 |
2013397 | 王峰 | 男 |
2013421 | 刘菲雨 | 女 |
public class test{public static void main(String args[]){try{// 加载 MySQL JDBC 驱动程序。在较新版本的 JDBC 中,这行可能不是必需的,//因为驱动程序可以通过服务提供者机制自动加载。但为了确保兼容性,通常会显式加载。Class.forName("com.mysql.jdbc.Driver"); //代码建立与数据库的连接。Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase","zyt", "pd12345");/*jdbc:mysql://localhost:3306/mydatabase 是数据库的 URL。jdbc:mysql: 表示使用 JDBC 连接 MySQL。localhost:3306 指定数据库服务器的地址和端口号(MySQL 默认端口是 3306)。mydatabase 是要连接的数据库名称。“zyt” 是数据库用户名。“pd12345” 是数据库密码。*/// 创建一个 Statement 对象,用于执行 SQL 语句。Statement s=con.createStatement(); //执行 SQL 查询语句 "SELECT * FROM student",该语句会从名为 student 的表中检索所有记录。//执行查询后返回一个 ResultSet 对象,它包含了查询结果。ResultSet result=s.executeQuery("SELECT * FROM student"); // 从student表中选择所有记录. while(result.next()){ System.out.println(result.getInt("id")); // 按列名获取整型id的值. System.out.println(result.getString("name")); // 按列名获取字符串型name的值.System.out.println(result.getString("sex")); // 按列名获取字符串型sex的值. }s.close(); //关闭 Statement 对象,释放相关资源。con.close(); // 关闭数据库连接,释放数据库连接资源。} catch(Exception e){ System.out.println(e);}// 捕获在 try 块中可能发生的任何异常(例如数据库连接错误、SQL 语法错误等),并打印错误信息。}//end of main
}
阅读程序,写出运行结果。
class Example{ p