当前位置: 首页 > news >正文

java学习笔记

Java 方法返回值

  • Java 是一种强类型语言,方法在定义时必须明确指定返回值的类型。 这确保了类型安全和代码的可预测性.

  • 方法返回值不能缺省。 必须显式声明返回类型.

  • 如果方法没有返回值,需要使用 void 关键字来表示。 void 意味着该方法执行某些操作但不返回任何值。

访问修饰符权限范围

  • private < (默认/无修饰符) < protected < public

  • private 权限:private 成员只能在声明它们的类中访问。 这提供了最高级别的封装.

  • 默认 (无修饰符) 权限 (也称为包访问权限): 默认权限允许在同一个包中的所有类访问该成员,但在不同包中的类不能访问.

  • protected 权限: protected 成员可以在同一个包中的所有类以及所有子类(无论子类是否在同一个包中)中访问.

  • public 权限: public 成员可以从任何地方访问,包括同一个类、同一个包中的其他类、不同包中的类以及子类。 这是最宽松的访问级别.

方法重载的特点:

  1. 同一个类中

  2. 方法名完全相同

  3. 参数类型或个数不同

  4. 返回值可以相同也可以不同

阐述重载Overload 和重写Override 的区别。

重写 (Override):

  • 发生在父类与子类之间.

  • 方法名、参数列表、返回类型必须相同 (除子类方法返回类型是父类方法返回类型的子类的情况)

  • 子类重写父类方法,可以定义特定于子类的行为

重载 (Overload):

  • 同一个类中

  • 方法名完全相同

  • 参数类型或个数不同

  • 返回值可以相同也可以不同

重载 (Overload) 和重写 (Override) 的共同点:

  • 方法名必须相同

  • 都是Java多态性的表现

Java 抽象类与接口

  1. 抽象类:

    • 使用 abstract 关键字修饰的类,其中可以包含抽象方法(仅有方法声明,没有方法体),也可以包含普通方法和成员变量。

    • 不能被实例化,即不能使用 new 关键字创建对象。

    • 抽象类必须先派生出子类,再创建子类的实例化对象。

    • 子类必须实现抽象类中所有的抽象方法(除非子类也是抽象类)。

  2. 接口:

    • 使用 interface 关键字声明,接口中定义的方法默认是 publicabstract 的,变量默认是 publicstaticfinal 的。

    • 接口不能被实例化,只能被 implements

    • 一个类可以实现多个接口

    • 实现接口的类必须实现接口的所有方法

  3. 抽象类与接口的区别

    • 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,程序从数据库中读取所有记录并且输出。请填上空缺的代码。

idnamesex
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

相关文章:

  • AI客服问答自动生成文章(基于deepseek实现)
  • ABB电机保护单元通过Profibus DP主站转Modbus TCP网关实现上位机通讯
  • Vulnhub Lazysysadmin靶机攻击实战(一)
  • 硬链接与软连接
  • 如何从极狐GitLab 容器镜像库中删除容器镜像?
  • Bitcoin跨链协议Clementine的技术解析:重构DeFi生态的信任边界
  • 自然语言处理-词性标注的基本概念
  • requests库
  • Edwards爱德华STP泵软件用于操作和监控涡轮分子泵
  • RabbitMQ-运维
  • 单调栈所有模版型题目(1)
  • 使用 NV‑Ingest、Unstructured 和 Elasticsearch 处理非结构化数据
  • vue3 ts 写一个滑动选择的日期选择器组件
  • 值拷贝、浅拷贝和深拷贝
  • 一、每日Github软件分享----QuickGo外链直达工具​
  • LeetCode面试题 17.21 直方图的水量
  • ABP vNext + EF Core 实战性能调优指南
  • 浏览器自动化与网络爬虫实战:工具对比与选型指南
  • Liunx ContOS7 安装部署 Docker
  • Vue——Axios
  • 碧桂园境外债务重组:相当于现有公众票据本金额逾50%的持有人已加入协议
  • 新华时评:直播间里“家人”成“韭菜”,得好好管!
  • 纽约大学朗格尼医学中心的转型带来哪些启示?
  • 九部门:对机动车特别是货车排放问题的监管将更加严格
  • 中国经济新动能|警惕数字时代下经济的“四大极化”效应
  • 个人住房公积金贷款利率下调,100万元30年期贷款总利息将减少近5万元