Java创建教程!(*  ̄3)(ε ̄ *)

Java 构造函数

Java面向对象设计 - Java构造函数

构造函数是用于在对象创建后立即初始化对象的代码块。

构造函数的结构看起来类似于一个方法。

声明构造函数

构造函数声明的一般语法是

<Modifiers> <Constructor Name>(<parameters list>) throws <Exceptions list> {}

构造函数的声明以修饰符开头。

构造函数可以将其访问修饰符作为public,private,protected或package-level(无修饰符)。

构造函数名称与类的简单名称相同。

构造函数名称后面是一对括号,可能包括参数。

可选地,右括号后面可以是关键字throws,其后面是逗号分隔的异常列表。

以下代码显示了声明类Test的构造函数的示例。类的名称和构造函数的名称必须匹配。

public class Test {public Test() {// Code goes here}
}

与方法不同,构造函数没有返回类型。

使用构造函数

我们使用一个带有new操作符的构造函数来在创建新实例之后初始化类的实例。

new运算符创建一个对象,构造函数初始化该对象。

以下语句使用Test类的构造函数来初始化Test类的对象:

Test t = new Test();

以下代码显示了如何使用构造函数

class Cat {public Cat() {System.out.println("in constructor...");}
}public class Main {public static void main(String[] args) {// Create a Cat object and ignore its referencenew Cat();// Create another Cat object and store its reference in cCat c = new Cat();}
}

上面的代码生成以下结果。

重载构造函数

一个类可以有多个构造函数。它们称为重载构造函数。

如果一个类有多个构造函数,它们的数量,顺序或参数类型都必须与其他构造函数不同。

下面的代码声明两个构造函数。一个构造函数不接受参数,另一个接受String参数。

class Car {// Constructor #1public Car() {System.out.println("A car  is created.");}// Constructor #2public Car(String name) {System.out.println("A car  named " + name + "  is created.");}
}public class Main {public static void main(String[] args) {Car d1 = new Car(); // Uses Constructor #1Car d2 = new Car("My Car"); // Uses Constructor #2}
}

上面的代码生成以下结果。

每个对象创建表达式调用一次构造函数。

我们可以在对象创建的过程中只执行一个构造函数的代码一次。

从另一个构造函数调用构造函数

构造函数可以调用同一类的另一个构造函数。让我们考虑下面的Test类。它声明两个构造函数;一个不接受参数,一个接受一个int参数。

我们必须使用关键字this从另一个构造函数调用构造函数。

下面的代码使用语句“this(1);”从没有参数的构造函数中调用具有int参数的构造函数。

class Test {Test() {this(1); // OK. Note the use of the keyword this.}Test(int x) {}
}

如果构造函数调用另一个构造函数,它必须是构造函数体中的第一个可执行语句。

构造函数不能调用自身,因为它将导致递归调用。

从构造函数返回

构造函数在其声明中不能有返回类型。

我们可以在构造函数体中使用没有返回表达式的return语句。

当一个构造函数中的返回语句被执行时,控制返回给调用者,忽略构造函数的其余代码。

以下代码显示了在构造函数中使用return语句的示例。

class Test {public Test(int x) {if (x < 0) {return;}System.out.println("here");}
}

构造函数的访问级别修饰符

构造函数的访问级别决定了可以在对象创建表达式中使用该构造函数的程序。

我们可以为构造函数指定四个访问级别之一:public,private,protected和package-level。

下面的代码声明了Test类的四个构造函数。

// Class Test   has  public access level 
public class Test {// Constructor #1 - Package-level accessTest() {}// Constructor #2 - public access levelpublic Test(int x) {}// Constructor #3 - private access levelprivate Test(int x, int y) {}// Constructor #4 - protected access levelprotected Test(int x, int y, int z) {}
}

具有公共访问级别的构造函数可以在程序的任何部分中使用。

具有私有访问级别的构造函数只能在声明它的同一类中使用。

具有受保护访问级别的构造函数可以在具有在其中声明类的相同包的程序中以及在任何包中的任何后代类内使用。

具有包级访问权限的构造函数可以在声明其类的同一个包中使用。

默认构造函数

具有包级访问权限的构造函数可以在声明其类的同一个包中使用。

编译器添加的构造函数称为默认构造函数。

默认构造函数没有任何参数。

默认构造函数也称为无参数构造函数。

如果类已经有一个构造函数,编译器不会添加任何构造函数。

Java 初始化块

Java面向对象设计 - Java初始化块

实例初始化块

实例初始化块用于初始化类的对象。

一个实例初始化程序只是一个类的代码块,但在任何方法或构造函数之外。

实例初始值设定程序没有名称。它的代码只是放置在一个开放大括号和闭包。

例子

下面的代码展示了如何为Test类声明一个实例初始化器。

注意,实例初始化程序在实例上下文中执行,并且关键字this在实例初始化程序中可用。

class Test {private int num;// An instance initializer{this.num = 101;/* Other code for the instance initializer*/}/* Other code for Test class*/
}

多重实例初始化

我们可以有一个类的多个实例初始化器。对于我们创建的每个对象,它们都以文本顺序自动执行。

所有实例初始值的代码在任何构造函数之前执行。

下面的代码演示了构造函数和实例初始化函数的执行顺序。

public class Main {{System.out.println("Inside instance initializer 1.");}{System.out.println("Inside instance initializer 2.");}public Main() {System.out.println("Inside  no-args constructor.");}public static void main(String[] args) {Main m = new Main();}
}

上面的代码生成以下结果。

实例初始化程序不能有return语句。

静态初始化块

静态初始化块也称为静态初始化器。它类似于实例初始化块。

它用于初始化一个类。每个对象执行一个实例初始化器,而当类定义被加载到JVM中时,只对一个类执行一次静态初始化器。

我们需要在其声明的开头使用static关键字。

我们可以在类中有多个静态初始化器。所有静态初始化器都按文本出现的顺序执行,并在任何实例初始化器之前执行。

以下代码演示了何时执行静态初始化程序。

public class Main {private static int num;{// An instance initializerSystem.out.println("Inside instance initializer.");}// A static initializer. Note the use of the keyword static below.static {num = 2014;System.out.println("Inside static initializer.");}// Constructorpublic Main() {System.out.println("Inside constructor.");}public static void main(String[] args) {System.out.println("Inside  main() #1.   num: " + num);// Declare a reference variable of the classMain si;System.out.println("Inside  main() #2.   num: " + num);new Main();    // Create an objectSystem.out.println("Inside  main() #3.   num: " + num);new Main();// Create another object}
}

上面的代码生成以下结果。

静态初始化器不能抛出检查的异常,它不能有一个return语句。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/144021.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【Binlog实战】:基于Spring监听Binlog日志

【Binlog实战】&#xff1a;基于Spring监听Binlog日志 binlog的三种模式 MySQL 的二进制日志&#xff08;binlog&#xff09;有三种不同的格式&#xff0c;通常被称为 binlog 模式。这三种模式分别是 Statement 模式、Row 模式和Mixed 模式。 Statement 模式&#xff1a; 在 …

JavaWEB概述

JavaWEB概述 一、什么是JavaWEB 用Java技术解决web互联网领域的技术栈。要学习JavaWEB首先得知道什么是客户端和服务端 客户端&#xff1a;简而言之&#xff0c;这就是使用方&#xff0c;比如我们下载一个软件去使用&#xff0c;里面有很多我们可以使用的功能&#xff0c;那…

Flutter问题记录 - 适配Xcode 16和iOS 18

文章目录 前言开发环境问题及解决方案1. Upload Symbols Failed2. type UIApplication does not conform to protocol Launcher3. method does not override any method from its superclass 最后 前言 为了新的镜像功能升级了macOS 15和iOS 18&#xff0c;Xcode也不可避免的需…

传输层协议——udp/tcp

目录 再谈端口号 udp 协议 理解报头 udp特点 缓冲区 udp使用的注意事项 tcp协议 TCP的可靠性与提高效率的策略 序号/确认序号 窗口大小 ACK&#xff1a; PSH URG RST 保活机制 重传 三次握手(SYN) 四次挥手(FIN) 流量控制 滑动窗口 拥塞控制 延迟应答 捎带应答 面…

面向切面:单元测试、事务、资源操作

目录 一、单元测试二、事务2.1、概述2.1.1、编程式事务2.1.2、声明式事务 2.2、JdbcTemplate2.3、基于注解的声明式事务2.3.1、基本用例-实现注解式的声明事务2.3.2、事务属性&#xff1a;只读2.3.3、事务属性&#xff1a;超时2.3.4、事务属性&#xff1a;回滚策略2.3.5、事务属…

八戒农场小程序V2最新源码

一.介绍 八戒农场V2小程序源码&#xff0c;前端工具上传&#xff0c;包更新、这个是源码&#xff0c;覆盖即可升级版&#xff08;修复很多问题&#xff09;&#xff1b;

基于UKF(无迹卡尔曼滤波)的SINS/GPS集成导航仿真程序【需要PSINS工具箱支持】

文章目录 主要特点内容包括运行截图 基于UKF&#xff08;无迹卡尔曼滤波&#xff09;的SINS/GPS集成导航仿真程序&#xff08;需要基于PSINS工具箱&#xff0c;工具箱是开源的&#xff0c;如果需要&#xff0c;可以确认收货后找我要链接&#xff09;。该程序能够高效地模拟导航…

Python VS Golng 谁更胜一筹?

今天我们聊聊Python和Golang这俩到底谁更胜一筹。 这个话题我已经在各种技术论坛上看到无数次了&#xff0c;每次都能引起一波热烈的讨论。作为一个多年写代码的老程序员&#xff0c;今天就站在我的角度&#xff0c;和大家掰扯掰扯这两个语言各自的优缺点。 1. 性能与并发模型…

软件测试技术之 GPU 单元测试是什么!

1 背景 测试是开发的一个非常重要的方面&#xff0c;可以在很大程度上决定一个应用程序的命运。良好的测试可以在早期捕获导致应用程序崩溃的问题&#xff0c;但较差的测试往往总是导致故障和停机。 单元测试用于测试各个代码组件&#xff0c;并确保代码按照预期的方式工作。单…

力扣(LeetCode)每日一题 1184. 公交站间的距离

题目链接https://leetcode.cn/problems/distance-between-bus-stops/description/?envTypedaily-question&envId2024-09-16 环形公交路线上有 n 个站&#xff0c;按次序从 0 到 n - 1 进行编号。我们已知每一对相邻公交站之间的距离&#xff0c;distance[i] 表示编号为 i …

C语言--结构体(学习笔记)

内容借鉴于b站杜远超官方频道&#xff08;C语言结构体详解【干货】&#xff09; 首先C语言中定义变量格式为“数据类型 变量名”&#xff0c;如int a; float b;等等。 那么结构体则是将多个变量&#xff08;数据类型 变量名&#xff09;结合在一起的一种新的数据类型&…

Elasticsearch 下载安装及使用总结

官网文档地址&#xff1a;Elasticsearch Guide [8.13] 官网下载地址&#xff1a;Download Elasticsearch 1. 下载安装 1、下载对应系统的版本 这里下载的 Elasticsearch 版本为 8.13.2&#xff0c;Elasticsearch 依赖 Java&#xff0c;因此要先在服务器上安装 JDK&#xff…

ARM 工业边缘计算机与 C# 编程的完美融合

在工业领域&#xff0c;随着智能化和数字化的不断推进&#xff0c;ARM 工业边缘计算机凭借其出色的性能和低功耗等优势&#xff0c;逐渐成为众多应用场景的重要支撑。而 C# 编程语言的强大功能和广泛适用性&#xff0c;使其在与 ARM 工业边缘计算机的结合中展现出了巨大的潜力。…

Spring考点总结

01.Spring框架的基本理解 关键字:核心思想IOC\AOP\作用(解耦、简化)&#xff0c;简单描述框架组成 Spring框架是一款轻量级的开发框架&#xff0c;核心思想是IOC&#xff08;控制反转&#xff09;和AOP&#xff08;面向切面编程&#xff09;&#xff0c; 为Java应用程序开发…

武器检测系统源码分享

武器检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision …

Python基础(八)——MySql数据库

一.数据库 【库——>表——>数据】 借助数据库对数据进行组织存储&#xff0c;借助SQL语言对数据库、数据进行操作管理 Mysql数据库 下载&#xff1a;https://www.mysql.com/ 查看是否安装配置成功&#xff1a; 安装DBeaver用于Mysql数据库图形化 安装&#xff1a;…

分布式光伏充换电站相关建议

了推动光伏发电和电动汽车的发展&#xff0c;在土地资源日益紧缺的城市区域&#xff0c;需合理共享现有土地资源&#xff0c;实现资源大化利用。城市变电站由于其合理的分布密度以及便利的接入条件&#xff0c;对于建设分布式光伏发电、充换电站具有很好的优势。可利用变电站旧…

统信服务器操作系统【1050e版】安装手册

统信服务器操作系统1050e版本的安装 文章目录 功能概述一、准备环境二、安装方式介绍安装步骤步骤一:制作启动盘步骤二:系统的安装步骤三:安装引导界面步骤四:图形化界面安装步骤五:选择安装引导程序语言步骤六:进入安装界面步骤七:设置键盘步骤八:设置系统语言步骤九:…

关于wordPress中的用户登录注册等问题

前言 大家在做类似的功能的时候&#xff0c;有没有相关的疑问。那就是我都已经选择好了相应的主题和模版&#xff0c;但是为什么都没有用户注册和用户登录的页面存在呢&#xff1f; WordPress默认情况下不提供用户注册和登录功能的原因是它最初是作为一个博客平台开发的&…

net await 、 Task、 Async 不用async异步方法

详细资料 lamda 变成异步方法 &#xff0c;只要在前面 加 async 修饰 即可 》》await 修饰的 &#xff0c;await 所在的方法&#xff0c;必须修饰 async ThreadPool.QueueUserWorkItem( async (obj)>{while(true){await File.WriteAllTextAsync("路径","…