关于Java中修饰符的总结(fina除外)
作者:jingxian 发布时间:2023-11-22 23:15:57
public/protected/private
public表示公开,private表示私有,protected表示保护,什么都不写表示默认default。
方法:
public protected default private
√ √ √ √ 同一类中
√ √ √ × 同一包中
√ √ × × 子类中
√ × × × 不同包中
成员变量:
考虑的安全性和健壮性的问题,成员变量一般为私有,并对外提供一些public的方法修改成员变量,在修改的方法中对输入进行判断和控制。
Private成员变量只能在类的内部使用。Public的成员变量可以在类的外部使用。
类:
类的权限修饰符只有不加和public两种。不加表示只有同一个包的类可以访问,public类所有的其他类都可以访问。
Static
意为静态,用于修饰成员变量、方法、代码块。
静态成员变量
静态成员变量随着类的加载而加载,多个对象共享该静态成员变量。看如下代码:
静态方法
当修饰方法的时候,这个方法随着类的加载而加载,直接通过类名来调用。很多工具类中的方法都是静态的,直接通过“类名.方法名”调用。不过静态方法中不能使用非静态成员变量和非静态方法。
静态代码块
静态代码块(java的类在产生对象的时候,在调用构造方法的时候,还会调用构造代码块)。
请看下列代码(证明构造方法、构造语句、静态构造语句运行的先后顺序):
需要注意的是:
(1)静态方法不能调用非静态方法, 静态的方法是在构造该类时加载的,类加载时会加载静态的方法;此时非静态方法还没有加载,类初始化后才加载非静态方法;所以静态方法不能调用非静态方法。通过在静态方法的内部创建对象(或形式参数来传递的对象)来间接访问是完全可以的。
(2)java中的main方法必须写成static的,因为,在类加载时无法创建对象,静态方法可以不通过对象调用。所以在类加载时就可以通过main方法入口来运行程序。
注意:父类中是静态方法,子类中不能覆盖为非静态方法。在符合覆盖规则的前提下,在父子类中,父类中的静态方法可以被子类中的静态方法覆盖,但是没有多态。
一个类在什么时候被加载?时机 (延迟加载,能不加载就不加载
(1)new 一个对象的时候,加载
这个很好理解,不解释了。(2)没有创建对象,访问类中静态成员(方法和属性)
(3)声明一个类的引用,不加载(4)创建子类,先加载父类,再加载子类
(5)父类中的公开静态方法,子类继承,使用子类的类名调用此方法,加载父类
Abstract
这个修饰符表示抽象,可以用在方法和类前面。
抽象方法表示,类应该具备此功能,但不同的子类应该有不同的实现方式,所以没有定义具体如何做。具体如何做由子类自己实现。子类在实现所有抽象方法后才能new对象。
如有类的内部有抽象方法,则类也必须是抽象的。抽象类不能直接new对象。抽象类中可以有非抽象方法。


猜你喜欢
- 在X86的环境下,var wParam = (int)msg.WParam;工作得很好。在X64的环境下,快速滚动滚轮会出现msg.WPar
- 这篇文章向大家分享了几段代码,主要是关于Thread+IO文件的加密解密,下面看看具体代码:加密启动线程package com.hz.sub
- 场景:按职能,鉴权系统需要划分 网关(spring gateway) + 鉴权(auth-server)。本文通过实践搭建鉴权系统。spri
- SpringBoot 集成 activiti 基础环境搭建添加依赖<dependency> <groupId&g
- 一、解决的痛点 1、免搭建后端开发环境。 &n
- 场景:使用MyBatis批量查询(select)、批量插入(insert)、批量更新(update)、批量删除(delete)操作MySQL
- 方法重写(Override)和方法重载(Overload)都是面向对象编程中,多态特性的不同体现,但二者本身并无关联,它们的区别犹如马德华之
- 简介设计模式是软件设计中的一种常见方法,通过定义一系列通用的解决方案,来解决常见的软件设计问题。其中,抽象工厂模式是一种非常常见的设计模式,
- 利用C#编写一个计算器。如下图,能够完成基本的四则运算。当然这个程序甚至还不上Windows附件那个自带的多功能计算器。 不过这个
- 本文实例讲述了Java编程实现统计一个字符串中各个字符出现次数的方法。分享给大家供大家参考,具体如下:import java.util.It
- 最近修改线上bug的时候排查了一个十分隐藏的bug,直接上代码:Integer a = null;boolean flag = true;I
- 本文实例为大家分享了java实现PDF转图片的具体代码,供大家参考,具体内容如下1.首先利用maven引入所需jar包<depende
- namespace ConsoleTest{ class Program  
- Idea运行单个main方法,不编译整个工程直接上图1、选择main方法类右键->create ‘类名.main&
- 在项目开发中,我们经常会遇到表中的字段名和表对应实体类的属性名称不一定都是完全相同的情况,下面小编给大家演示一下这种情况下的如何解决字段名与
- 0.先导的问题代码 下面的代码演示了一个计数器,两个线程同时对i进行累加的操作,各执行100
- ManualResetEvent表示线程同步事件,可以对所有进行等待的线程进行统一管理(收到信号时必须手动重置该事件)其构造函数为:publ
- Spring Cloud Zuul 集成Swagger1.准备服务注册中心eureka-server2.创建微服务swagger-servi
- 在android6.0之后谷歌对指纹识别进行了官方支持,今天还在放假,所以就随意尝试了一下这个api,但是遇到了各种各样的问题 ①
- 一、多线程的sleep方法1.Thread.sleep(毫秒)2.sleep方法是一个静态方法3.该方法的作用:阻塞当前线程,腾出CPU,让