Java 构造函数与修饰符详解:初始化对象与控制权限
Java 构造函数
Java 构造函数 是一种特殊的类方法,用于在创建对象时初始化对象的属性。它与类名相同,并且没有返回值类型。
构造函数的作用:
- 为对象的属性设置初始值
- 执行必要的初始化操作
- 提供创建对象的多种方式
构造函数的类型:
- 默认构造函数: 无参数的构造函数,如果用户没有明确定义构造函数,则 Java 编译器会自动创建一个默认构造函数。
- 带参数的构造函数: 可以为构造函数添加参数,以便在创建对象时传入初始值。
示例:
public class Main {
int x;
// 默认构造函数
public Main() {
x = 5;
}
// 带参数的构造函数
public Main(int y) {
x = y;
}
public static void main(String[] args) {
Main myObj1 = new Main(); // 调用默认构造函数
System.out.println(myObj1.x); // 输出 5
Main myObj2 = new Main(10); // 调用带参数的构造函数
System.out.println(myObj2.x); // 输出 10
}
}
构造函数的注意事项:
- 构造函数不能被重写。
- 构造函数不能被声明为 abstract 或 final。
- 构造函数可以抛出异常。
一些额外的说明:
可以使用构造函数来执行对象的初始化操作,例如:
- 打开数据库连接
- 加载配置文件
- 注册事件监听器
可以使用多个构造函数来提供创建对象的多种方式,例如:
- 使用默认值创建对象
- 使用参数创建对象
- 使用克隆创建对象
Java 修饰符
Java 修饰符 用于控制类、属性、方法和构造函数的访问权限和行为。它们可以分为两组:
- 访问修饰符:
- public: 意味着代码对所有类可访问。
- private: 意味着代码只能在声明的类内部访问。
- default: 意味着代码只能在同一包中访问。
- protected: 意味着代码在同一包和子类中可访问。
- 非访问修饰符:
- final: 意味着类不能被继承,属性和方法不能被重写。
- static: 意味着属性和方法属于类,而不属于对象。
- abstract: 意味着类不能用于创建对象,方法没有主体,必须由子类提供。
- transient: 意味着在序列化包含它们的对象时,属性和方法将被跳过。
- synchronized: 意味着方法一次只能由一个线程访问。
- volatile: 意味着属性的值不会在本地线程缓存,总是从“主内存”读取。
示例:
访问修饰符:
// public类可以被任何类访问
public class Main {
// private属性只能在 Main 类内部访问
private int x = 10;
// default方法只能在同一个包中访问
void myMethod() {
System.out.println("This is a default method.");
}
// protected方法可以在同一个包和子类中访问
protected void myProtectedMethod() {
System.out.println("This is a protected method.");
}
public static void main(String[] args) {
Main myObj = new Main();
System.out.println(myObj.x); // 错误,无法访问私有属性
myObj.myMethod(); // 可以访问 default 方法
myObj.myProtectedMethod(); // 可以访问 protected 方法
}
}
非访问修饰符:
public class Main {
// final属性不能被修改
final int y = 20;
// static方法可以在不创建对象的情况下访问
static void myStaticMethod() {
System.out.println("This is a static method.");
}
// abstract方法没有主体,必须由子类提供
abstract void myAbstractMethod();
public static void main(String[] args) {
// y = 30; // 错误,无法修改 final 属性
myStaticMethod(); // 可以访问 static 方法
// myAbstractMethod(); // 错误,无法直接调用抽象方法
}
}
// 子类继承 Main 类并提供抽象方法的主体
class Child extends Main {
@Override
void myAbstractMethod() {
System.out.println("This is the implementation of myAbstractMethod.");
}
}
一些额外的说明:
- 可以使用多个修饰符来修饰类、属性、方法和构造函数。例如,
public final
表示类是公开的并且不能被继承。 - 修饰符是 Java 语言的重要组成部分,它们可以帮助您控制代码的访问权限和行为。
最后
为了方便其他设备和平台的小伙伴观看往期文章:
微信公众号搜索:Let us Coding
,关注后即可获取最新文章推送
看完如果觉得有帮助,欢迎 点赞、收藏、关注
Java 构造函数与修饰符详解:初始化对象与控制权限的更多相关文章
- Java之Static静态修饰符详解
Java之Static静态修饰符详解 Java之Static静态修饰符详解 一.特点 1.随着类的加载而加载,随着类的消失而消失,生命周期最长 2.优先于对象存在 3.被所有类的对象共享 4.可以直接 ...
- abstract关键字、final关键字、static关键字、访问修饰符详解
abstract关键字.final关键字.static关键字.访问修饰符详解 abstract关键字: final关键字: static关键字: 访问修饰符:
- java中的访问修饰符详解
主要讲述一下java中protected的修饰控制范围. 在叙述protected修饰符使用之前,先来说一下java,可以发现,开发java程序是一个时时刻刻都在编写类.开发类.定义类的过程.类里面可 ...
- Koltin——最详细的可见性修饰符详解
在Kotlin中,不管是类,对象,接口,构造函数,函数,属性及其设置器都具有可见性修饰符.Kotlin中的可见性修饰符共四种.即public.protected.private.internal.在不 ...
- Kotlin——中级篇(三):可见性修饰符详解
在Kotlin中,不管是类,对象,接口,构造函数,函数,属性及其设置器都具有可见性修饰符.Kotlin中的可见性修饰符共四种.即public.protected.private.internal.在不 ...
- AJPFX分享JAVA修饰符详解
1.类的修饰符分为:可访问控制符和非访问控制符两种. 可访问控制符是:公共类修饰符 public 非访问控制符有:抽象类修饰符 abstract :最终类修饰符 final 1 )公共类修饰符 pub ...
- Java 访问修饰符详解
访问修饰符定义了类.属性和方法的访问权限,Java 中包含四种,访问权限从小到大为 private.default.protected 和 public. public,公共修饰符,被其修饰的类.属性 ...
- 【java】学习路线10-权限修饰符详解
/*关于修饰符:类:public default public protected default privatesame class √ ...
- C# 中4个访问符和8个修饰符详解
4个访问修饰符(是添加到类.结构或成员声明的关键字) Public:公有的,是类型和类型成员的访问修饰符.对其访问没有限制. Internal:内部的,是类型和类型成员的访问修饰符.同一个程序集中的所 ...
- C# 之 4个访问修饰符和8个声明修饰符详解
一.4个访问修饰符(是添加到类.结构或成员声明的关键字) [1] Public:公有的,是类型和类型成员的访问修饰符.对其访问没有限制. [2] Internal:内部的,是类型和类型成员的访问修饰符 ...
随机推荐
- 【Azure 媒体服务】记录一个简单的媒体视频上传到Media Service无法播放问题
问题描述 从本地上传到Azure Media Service Portal的视频,并且新增定位符后,无法播放.但是上传的其他视频是可以的.疑惑中!! 问题自查 自查发现,是视频的文件名中有个特殊符号. ...
- DataX 离线跨网场景的实施配置
配置仅限于跨不同网情况,网络互通情况方案和配置会更简单一点 内网A:MySql数据转换成Csv { "job": { "setting": { "sp ...
- C++ //常用算法 adjacent_find //查找相邻的重复元素
1 //常用算法 adjacent_find 2 //查找相邻的重复元素 3 #include<iostream> 4 #include<string> 5 #include& ...
- C++ //类模板与友元 //全局函数类内实现 -直接在类内声名由于即可 //全局函数类外实现 -需要提前让编译器知道全局函数的存在
1 //类模板与友元 2 //全局函数类内实现 -直接在类内声名由于即可 3 //全局函数类外实现 -需要提前让编译器知道全局函数的存在 4 5 #include <iostream> 6 ...
- Java基础全程复习笔记(值得参考)
Java基础复习笔记 第01章:Java语言概述 1. Java基础学习的章节划分 第1阶段:Java基本语法 Java语言概述.Java的变量与进制.运算符.流程控制语句(条件判断.循环结构).br ...
- linux 三剑客命令
Linux 命令集合 目录 Linux 命令集合 基础概念 1 软连接和硬链接 1.1 基础概念 1.2 如何创建软链接 零.正则 01 区别 02 通配符 03 基础正则 04 扩展正则 一 awk ...
- Rabbit算法:轻量高效的加密利器
Rabbit算法起源: Rabbit算法是由Martin Boesgaard和Mette Vesterager提出的一种流密码算法,其设计初衷是为了提供高性能和高度安全性的加密方案.Rabbit算法结 ...
- Android Studio 下载jcenter依赖失败问题及解决
优先国内的镜像下载即可 我用的华为和阿里云的国内镜像 google() maven { url 'https://jitpack.io' } maven { url 'http://maven.ali ...
- python学习笔记(3):模块
模块 一个.py文件就是一个模块,模块可以包含在包(package)内.包内必须有一个__init**__**.py,包也可以多层嵌套.__init__.py也是一个模块,模块名就是包名. 当用命令行 ...
- Elasticsearch - Docker安装Elasticsearch8.12.2
前言 最近在学习 ES,所以需要在服务器上装一个单节点的 ES 服务器环境:centos 7.9 安装 下载镜像 目前最新版本是 8.12.2 docker pull docker.elastic.c ...