java修饰符详解及一些常见问题解答

Java main方法详解:public static void main(String[] args) 全面解析 public static void main(String[] args) 是Java程序的入口方法,包含了多个关键设计概念。public 确保JVM能够访问该方法,static 使得方法在类加载时即可调用,无需实例化对象,void 表示方法无返回值,main 是JVM识别的固定方法名,String[] args 用于接收命令行参数。这些设计确保了Java程序的统一启动方式。此外,main方法可以重载,但只有main(String[])会被JVM调用。现代Java框架可能使用其他启动机制,但main方法仍 阅读详情

   关于java修饰符,以前总让我犯糊涂,今天来个大总结希望能给初学者提供点来帮助。

 

   四点基础介绍

 

  1.public:  这个好理解 他能修饰类,属性,方法,并且被修饰的对象什么地方都能被访问到 

 

  2.protected: 首先他只能修饰属性和方法(当然也可以修饰内部类,但这里不对内部类进行讲解,这里的类都是顶层类,下同)。被他修饰的对象在同一个包里都可以访问,如果在不同包,必须要通过其子类进行访问。

 

  3.default:(也就是什么都不填) 默认的,被他修饰的对象在同一个包里都可以访问,与protected相比,他是完全不能从包外进行访问,而protected还可以通过其子类在包外进行访问.

 

 4.private:访问权限最低,只能在自身类内.但这里要注意一点哦,来自同一个类的实例可以相互访问类中声明的属性,这个不好理解吧,那就接着看吧

 

 

解惑1:  来自同一个类的实例可以相互访问类中声明的属性

 

  这个说不清楚,先看一段代码吧,先别COPY and run,先自己想下结果会是什么:

 

 

  1. package com.sr178.test;
  2. public class TestExample {
  3.  public static void main(String[] args) {
  4.   // TODO Auto-generated method stub
  5.   AClass ref1 = new AClass(5);
  6.   AClass ref2 = new AClass(10);
  7.   //System.out.println(ref2.x);
  8.   System.out.println(ref1.add(ref2));
  9.  }
  10. }
  11. class AClass{
  12.  private int x;
  13.  public AClass(int x){
  14.   this.x = x;
  15.  }
  16.  int add(AClass ref){
  17.   return ref.x+x;
  18.  }
  19. }
  20. //class SubAClass extends AClass{
  21. // SubAClass(int x){
  22. //  super(x);
  23. // }
  24. // int add(AClass ref){
  25. //  return ref.x+x;
  26. // }
  27. //}

先别管注释的那几行,知道答案了吗?我想大部分人都会认为这个程序会报错.但不巧,运行后却出来一个结果15,好好体会吧.

 

解惑2: 关于protected的

问题描述:

第一个包中我建了个父类A,其中有一个protected修饰的属性b.  
然后在第二个包中建了一个类B继承了A.  
这个时候我用父类引用子类对象时,也就是A   x   =   new   B();时,对象属性x.b却访问不到.  
但是直接用子类的引用实现子类对象时,即B   x   =   new   B();x.b是可以访问的.  

注意哦!两个类不再同一个包中.

 

 

  1. package com.sr178.test;
  2. public class A{
  3.   protected String b="I am A";
  4. }
  5. package com.sr178.AnotherTest;
  6. public class B extends A{
  7.     protected String b ="I am B";
  8.     public static void main(String args[]){
  9.      A x= new B();
  10.      System.out.println(x.b);
  11.     }
  12. }

到这里程序是编译不过去的,在解释这个问题前,先来解释下  A x= new B();以下是一段摘文。

 

看到这里,应该明白A x= new B()了吧,因为x定义为A类型,那么编译时候就认为x是A类型的(x是一个存放类A的对象地址的引用型变量),他跟x的实际类型没有关系. 在解释这个问题上,你把A x= new B()看成A x = new A();别看那个后面的new B();这就好理解了,显然A x = new A();然后x.b会出错,因为在不同包中嘛.要改成B x = new B();才可以访问,因为如果在不同包,被protected修饰的属性或方法必须要通过其子类进行访问。

疑惑三:关于静态方法

 

  1. package com.sr178.test;
  2. public class StaticTest {
  3.  public void myExample(){
  4.   System.out.println("Father Class Method myExample");
  5.  }
  6.  public static void myStat(){
  7.   System.out.println("Father Class Method static Method myStat");
  8.  } 
  9.  /**
  10.   * @param args
  11.   */
  12. }
  13. class SubClass extends StaticTest{
  14.  public void myExample(){
  15.   System.out.println("Sub Class Method myExample");
  16.  }
  17.  public static void myStat(){
  18.   System.out.println("Sub Class Method static Method myStat");
  19.  } 
  20.  public static void main(String[] args) {
  21.   // TODO Auto-generated method stub
  22.   StaticTest s = new SubClass();
  23.   s.myExample();
  24.   s.myStat();
  25.  }
  26. }

运行结果:

Sub Class Method myExample
Father Class Method static Method myStat

 

   此处因为调用的静态方法myStat()是在编译期间就根据其声明类型决定了引用的方式,s是一个StaticTest类型,当然当调用s.myStat()时,就会调用父类的myStat(),而s.myExample()会调用子类的myExample()方法(这个不理解请参照上个疑惑).

 

CCSP考后复盘:那些刷题时感觉良好,考场却发懵的题目到底长什么样? 本文深入分析了CCSP考试中常见的题目陷阱和解题策略,揭示了刷题与实战的差距。通过解析换装题、双胞胎选项和场景题等典型题型,帮助考生掌握拆题技巧和思维模式转变,提升应对CCSP考试的能力。 阅读详情

相关推荐

使用WSL2安装ubuntu系统并配置深度学习环境

wsl2安装ubuntu部署深度学习环境的方法

u013358093的博客 2703

Java的修饰符详解

Java访问控制修饰符 Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java 支持 4 种不同的访问权限。 default (即缺省,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。 private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类) public : 对所有类可见。使用对象:类、接口、变量、方...

qq_7813180 249

Matlab2018a崩溃解决的办法No sandbox or build area path

Matlab 2018a (No sandbox or build area path)出现崩溃后需要使用terminal进行如下操作: cd /home/david/MySoft/MATLAB/R2018a/bin/glnxa64 (你的matlab路径) mkdir exclude mv libfreetype* exclude/ 执行后图片如下: 如果你用的Windows系统,请手动按照上面步骤剔除了dll。 Matlab 2018a (No sandbox or build are

David Xiao 1万+

JAVA主程序修饰符详解

public static void main(String[] args) 该段程序为JAVA程序的入口,即主程序。 JVM执行的时候首先就是要找到main函数。 修饰符的详解: pubic:表示该程序的访问权限,表示任何时候都可以被引用的时候使用public,JVM即可找到main函数来执行程序。 static:表示该函数时静态的,不依赖类的对象的,在类进行加载的时候主程序也会随着加载到内存当...

chen404897439的博客 762

Unity与IOS交互,调用IOS系统相机和相册

与IOS的交互,在步骤上要比android简单许多,不会产生因为系统版本,或者包名导致的许多问题。过程中最头疼的一个问题是IOS回调Unity,很简单的一个问题,搞了半天。

Hello Mingo 1万+

Cadence创建异形焊盘教程(详细操作)

背景:一些常见的矩形/圆形焊盘,设置参数就可。碰到非规则的一些焊盘,那只能用Cadence Allegro PCB来画咯。 一、新建图形 【File】——>【New…】 弹出如下窗口,选择绘制的类型Shape symbol、路径,输入名字 二、设置参数 【Setup】——>【Design Parameters…】 Enhanced display modes:增强型显示模型。全部勾选上。 在【Design】设置单位为mm 设置偏移量(-50,-50) 三、绘制图形 1、找到原点,即参考

qq_42057393的博客 2万+

Java学习笔记:修饰符讲解

synchronized关键字, 代表这个方法加锁,相当于不管哪一个线程(例如线程A),运行到这个方法时,都要检查有没有其它线程B(或者C、 D等)正在用这个方法(或者该类的其他同步方法),有的话要等正在使用synchronized方法的线程B(或者C 、D)运行完这个方法后再运行此线程A,没有的话,锁定调用者,然后直接运行。它包括两种用法:synchronized 方法和 synchroni...

一片雾霾的博客 184

14、5G物理层的灵活解决方案:广义频分复用(GFDM)

广义频分复用(GFDM)作为一种高度灵活的5G物理层多载波调制方案,能够满足多样化应用场景的需求,包括高吞吐量的比特管道通信、低功耗高连接数的物联网、超低延迟的触觉互联网以及广覆盖的无线区域网。通过参数化配置,GFDM可适配LTE资源网格,实现与现有系统的兼容与共存。其支持多种解调方式、干扰消除技术、OQAM映射及预编码机制,兼具低带外发射、高频谱效率和强鲁棒性。GFDM还能统一描述OFDM、FBMC、FTN等多种经典与先进波形,成为5G及未来通信系统中极具潜力的通用波形框架。

gold8的专栏 108

Java中修饰符易犯错误

关于局部变量修饰符 不能对局部变量赋予权限修饰符 因为局部变量的生命周期为一个方法的调用期间,既然你能访问到这个方法,所以没必要为其设置权限访问字段。因为该变量在方法调用期间已经被加载到了虚拟机栈,换句话说就是肯定能被当前线程访问到,所i设置没意义。 接口 接口修饰符 接口修饰符只能用public,default和abstract 不能用final,static修饰 接口默认修饰符为ab...

w_Antetokounmpo的博客 429

【YOLO11改进 - 特征融合】利用Hyper-YOLO 的混合聚合网络(MANet)改进yolo11,提升基础网络的特征提取能力

【YOLO11改进 - 特征融合】利用Hyper-YOLO 的混合聚合网络(MANet)改进yolo11,提升基础网络的特征提取能力

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 905

odom反算成经纬度

这个转换系统能够将局部坐标(相对于原点的X, Y, Z坐标)转换回全球坐标系统。将局部里程计数据反算成经纬度坐标的过程涉及几个关键步骤,主要是将相对于某个局部参考点的坐标(例如在机器人、无人车或无人机的导航系统中使用的坐标)转换回全球GPS坐标系统(WGS-84经纬度)。为了能够将局部里程计数据转换为经纬度,首先需要知道局部坐标系统的原点(即参考点)在全球坐标系统中的位置。对于从里程计获得的每个局部坐标点,使用步骤2中设置的坐标转换系统将其转换为经纬度。使用转换模型将局部坐标转换为全球坐标。

如果想成为中心,那么就到中心去吧。 650

Java 权限修饰符详解

Java 的权限修饰符为类、方法、变量和构造函数的访问控制提供了强大的机制。通过理解和合理使用这些修饰符,可以有效地保护类的实现细节,增强代码的封装性和可维护性。合理选择访问修饰符不仅可以提高代码的安全性,还能提高代码的可读性和可理解性,是编写高质量 Java 应用程序的重要组成部分。

Rockivy的博客 1808

FFmpeg入门详解之110:RTSP协议讲解

TCP/IP 协议体系中的一个应用层协议,该协议定义了一对多应用程序如何有效地通过 IP 网络传送多媒体数据。RTSP在体系结构上位于RTP和RTCP之上,它使用TCP或UDP完成数据传输。HTTP与RTSP相比,HTTP传送HTML,而RTSP传送的是多媒体数据。正在上传…重新上传取消RTSP是基于文本的协议,采用ISO10646字符集,使用UTF-8编码方案。行以CRLF中断(\r\n:10,13:0x0A,0x0D),包括消息类型、消息头、消息体和消息长。

福优学苑@音视频+流媒体 2529

【Java 访问修饰符详解】

修饰符 核心场景 典型示例public 全局访问的类、方法、常量 public static void main()protected 允许子类扩展父类功能 父类的工具方法默认 包内协作的辅助类或方法 同一模块的工具类private 隐藏实现细节,保护敏感数据 类的属性、内部方法最小化公开:优先用 private,逐步放宽权限。面向接口:通过 public 方法暴露功能,隐藏实现细节。

weixin_42900944的博客 939

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【Java第14集】java访问修饰符详解

Java 提供了四种访问修饰符,用于控制类、方法、变量和构造器的访问权限。通过合理设置访问权限,可以实现代码的封装性,降低类之间的耦合度,并提高代码的安全性和可维护性。修饰符类内部同一包子类其他包public✔️✔️✔️✔️protected✔️✔️✔️❌default(默认,无修饰符)✔️✔️❌❌private✔️❌❌❌publicprotecteddefaultprivate修饰符作用范围典型用途public所有类公共接口、工具类protected同包 + 子类。

学不可以已,活到老,学到老。 920

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【Java面试必备】基础部分常见问题及解答详析

Java的垃圾回收机制主要基于可达性分析算法,即从一系列GC Roots对象出发,向下搜索,凡是从GC Roots开始无法到达的对象都被认为是不可达对象,可被垃圾回收器回收。常见的GC Roots包括:虚拟机栈中引用的对象、方法区中静态属性引用的对象、方法区中常量引用的对象、本地方法栈中JNI引用的对象等。:并非JVM规范规定的内存区域,但在NIO中会用到,它是在Java堆外分配的,可通过Unsafe类或Native函数直接分配和释放。:私有访问权限,只对自己所在的类可见,外部类不能直接访问。

qq_58366795的博客 1754

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

java修饰符有哪些_java修饰符有哪些知识点

java修饰符有哪些知识点发布时间:2020-08-05 09:18:40来源:亿速云阅读:77作者:Leahjava修饰符有哪些知识点?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。java中的修饰符分为类修饰符,字段修饰符,方法修饰符。根据功能的不同,主要分为以下几种:权限访问修饰符(可以用来修饰类、方法和字段)public:对...

weixin_28973031的博客 251

JAVA常见问题解答

通常情况下,一个程序员只要了解了必要的Java类库、Java语法,学习适当的第三方开发框架,就已经基本满足日常开发的需要了,JVM会在用户不知不觉中完成对硬件平台的兼容及对内存等资源的管理工作。从 JDK1.8 开始,Java 采用 CAS 和 Synchronized 结合的方式对 ConcurrentHashMap 进行了一些优化,可以实现高并发的读写操作,且在容器操作较为频繁的情况下,相对于 Hashtable 和 Collections.synchronizedMap 等集合实现类,性能更好。

zdsxc_的博客 1055

java jsonarray拆分为多个_Java面试常见问题解答系列(1)

上次说到我刚经历了阿里一面的炮轰,数据结构上还是有问题的,从这个周开始,我们不定期的分享java相关的面试题的尝试性解答,每周5到7题不等,如果喜欢,欢迎点赞关注哦。也欢迎大家在下面批评指正。1、什么是JAVA虚拟机(JVM):虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。JVM屏...

weixin_42354933的博客 673

java的三种修饰符_java三种修饰符的总结(静态,抽象,final)

今天主要介绍下三种修饰符:static、abstract、final的区别。先来一张图:修饰符总结接下来对每种修饰符分别进行总结:static:静态属性:如果属性使用static修饰的话就是静态属性,静态属性不绑定到某个对象,而是属于整个类,可以直接用类名调用。静态方法:静态方法和静态属性类似,不绑定到对象,可以直接用类型调用。静态块:在类加载的时候被调用,而且只调用一次。abstract抽象类:...

weixin_39706441的博客 124

java常见问题_Java面向对象常见问题

一、类的访问权限修饰符有哪些,各作用范围是啥?解:类的访问权限修饰符有:public,protected,private这三个。public是同一个工程下有效,protected是同一个包下或同一个工程下的具有继承关系的类中,而private仅仅是在当前类中有效。此外,还有如果什么都不写,则属于默认情况,默认情况是同一个包下有效。二、static的作用是啥?解:stattic的作用是用来表示当前成...

weixin_39865204的博客 137

java实现关键词云_Java 中有哪些修饰符关键词

Java 中有哪些修饰符关键词发布时间:2020-11-10 16:09:54来源:亿速云阅读:91作者:LeahJava 中有哪些修饰符关键词?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Java 基础之修饰符关键词整理我成为一个Java程序员距今已有一段时日。最近,有人问我关于Java修饰符关键字的一个问题,但我根本不知道那是...

weixin_39932947的博客 109

JAVA访问修饰符限制性最高的_问:JAVA中,访问修饰符限制性最高的是protected ( )...

问:JAVA中,访问修饰符限制性最高的是protected ( )A:对,B:错正确答案:绛旓細鐭ユ儏鍚屾剰鏉?绛旓細闈炲尰鐤楄繃澶卞啿绐?绛旓細鍏朵粬涓夐」閮藉解析:问:JAVA中,访问修饰符限制性最高的是protected ( )A:对,B:错相关问题:为了解决大西洋舰队和太平洋舰队难以汇合的难题,美国谋划开凿了:A:巴拿马运河B:苏伊士运河C:伊利运河D:基尔运河可用于抗焦虑的药物是( ...

weixin_32192681的博客 606

java重写------返回值、修饰符必须一样吗?

问:java疯狂讲义中说重写返回值类型要比父类小,在eclipse中验证,重写返回值类型必须一致,那么Java重写返回值类型必须一样吗? 答:java 5或者以前,必须一样,java 7 java 8可以不同,但是必须是父类返回值的派生类。 问:Java重写要求子类跟父类的修饰符一样吗? 答:子类重写父类的方法的访问修饰符,不能低于父类的方法访问权限;

jim_007的博客 9032

初学Java第三章课后题_java第三章课后习题解答.doc

java第三章课后习题解答.doc 1第3章面向对象程序设计基础【1】什么是Java程序使用的类?什么是类库?[解答]:Java程序的基本单位是类。对象是对事物的抽象,而类是对对象的抽象和归纳,找出事物的共性,把具有共同性质的事物归结为一类,得出一个抽象的概念——类。类是具有相同属性和方法的一组对象的集合,类是在对象之上的抽象,对象则是类的具体化,一旦建立类之后,就可用它来建立许多你需要的对象。J...

weixin_28876083的博客 1062
上一篇: Spring事务属性
下一篇: 安装sql server 2005出现乱码的问题
java05
博客等级 码龄18年 21粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值