其它综合

JAVA访问修饰符构造函数的问题(转)

我爱IT资讯库   2021/02/25

java访问修饰符 构造函数的问题

java访问修饰符-限定符总结(类比c#)

java访问修饰符
----------
[public | default | protected | private ]

public: 完全开发
protected: 同包及子类访问
default(无): 同包访问
private: 只能本类访问

java用于类的修饰符(2个)和限定符(2个):
---------------
public: 完全开发
default(无) : 同包访问

abstract: 指定为抽象类
final: 指定为最终类(太监类,密封类),没有子类

java用于成员变量的修饰符:
---------------------
[public | protected | private ][static] [final] [transient] [volatile] int i;

限定词含义:
static: 类属性(c#静态字段),可通过类名直接调用
  final: 该成员不能被重写,即定义常量(相当于c#的const的用法)
  transient: 不序列化
  volatile :可被多个线程访问 (同步变量)


java用于成员方法的修饰符:
----------------------
[public | protected | private ] [static] [final| abstract] [native] [synchronized] method(int i){ }
  
限定词含义:
static: 类(静态)方法,可通过类名直接调用
  final: 方法不能被重写(类似c#中的sealed 密封方法)
  native: 集成其它语言的代码 本地方法
  abstract: 抽象方法,没有方法体
  synchronized: 控制多个并发线程的访问 (同步方法)

在 java 中,无论是 explicit 还是 implicit 方式,都要求在子类的构造方法中调用其父类的构造方法。

如果父类无构造方法(其实是一个默认无参的构造方法),那么子类的构造方法中会自动进行调用;如果 父类有自己的构造方法(这时父类不会有默认无参的构造方法),那么在子类的构造方法中,必须要调用父类的某个构造方法,而且必须是在构造方法的第一个语句 中进行调用。 究其原因,想必是 java 语言设计者,要求子类有责任保证它所继承的父类尽快进入到一个稳定、完整的状态中。试想,如果没有这个约束,那么子类的某个继承自父类的方法可能会使用到父类中的一些变量,而这些变量并没有进行初始化,从而产生一些难以预料的后果。

1构造函数必须满足的语法规则:方法名必须与类名相同;不要声明返回类型;不能被static、final、synchronized、abstract、native等修饰。

2构造方法可以被重载,来表达对象的多种初始化行为。在重载构造方法中可以使用this语句来调用其他构造方法,使用时应该注意:如果在构造方法中使用了this语句,则必须作为构造方法的第一条语句;只能在一个构造方法中用this语句来调用类的其他构造方法,而不能在成员方法中调用类的构造方法;只能通过this语句来调用其他构造方法,不能通过方法名来直接调用构造方法。

3在java中,如果用户定义的类中没有提供任何构造方法,java语言会自动提供一个默认的构造方法,该默认构造方法没有参数,用public修饰,且方法体为空。当然,程序中也可以显示的定义默认构造方法。

4如果类中显示定义了一个或多个构造方法,并且所有的构造方法都带有参数,那么这个类就失去了java语言为其准备的默认构造方法,此时若使用该类的默认构造方法(即不含参数的构造方法)时就是编译出错。

5父类的构造方法不能被子类继承,但是,在子类的构造方法中可以通过super语句调用父类的构造方法。使用super语句应该注意:在子类的构造方法中使用super语句,它必须作为第一条语句。

6在创建子类的对象时,java虚拟机首先执行父类的构造方法,然后再执行子类的构造方法,在多级继承的情况下,将从继承树的最上层得父类开始,依次执行各个类的构造方法,这可以保证子类对象从所有直接或间接父类中继承的实例变量都被正确的初始化。

7如果子类的构造方法中没有用super语句显示调用父类的构造方法,那么通过这个构造方法创建子类对象时,java虚拟机会自动先调用父类的默认构造方法,而此时若父类没有默认构造方法时,就是编译出错。例如

publicclass bextends a{

b(int i) {//该构造方法没有super显示调用父类的构造方法,将自动调用父类的默认构造方法,而父类a没有默认构造方法,这里将编译错误

system.out.println(i);

}

publicstaticvoid main(string[] args) {

b b=new b(2);

}

}

class a{//该类定义了含参数的构造方法,就失去了默认的无参的构造方法

inti;

a(int i){

this.i=i*2;

}

}

8构造方法被调用的几种方式:当前类的其他构造方法通过this语句调用它;

当前类的子类的构造方法通过super语句调用它;在程序中通过new语句调用它。

9构造方法可以处于public、protected、private和默认四种访问级别之一。当构造方法为private级别时,意味着只能在当前类访问它,不能被继承,不能被其他程序用new创建实例对象。可以对比其他几种修饰符的作用:abstract修饰的类,不允许被实例化,这点和private修饰构造方法相同,但abstract修饰的类可以被继承,拥有子类,可以创建子类的实例;final类禁止被继承,这点和private修饰构造方法相同,但是final类可以用new创建实例对象。

转自:http://blog.csdn.net/luyuncsd123/article/details/8198910

java访问修饰符 构造函数的问题(转)

原文地址:http://www.cnblogs.com/kaikailele/p/3941914.html




热门内容

PAT甲1004CountingLeaves【dfs】

1004counting leaves(30 分) a family hierarchy is usually p ...

171.[LeetCode]Excel Sheet Column Number

题目: Related to question Excel Sheet Column Title ... ...

在.NET中获取一台电脑名,IP地址及当前用户名

在.NET中获取一台电脑名,IP地址及当前用户名是非常简单,以下是我常用的几种方法,如果大家还有其他好的方法,可以回复一... ...
sun directory server

sun directory server

Sun One Directory Server(LDAP)安装和调整指南   ... ...
黑客讲故事:攻下隔壁女生路由器后,我都做了些什么

黑客讲故事:攻下隔壁女生路由器后,我都做了些什么

路由器被蹭网后,我有被黑的风险吗? Evi1m0,来自知道创宇,邪红色信息安全组织创始人 其实这个问题可以... ...

oracle 10g for redhat5

解压文件 解压文件命令: unzip 10201_database_linux32.zip ... ...

什么是I2C协议?

I2C协议是单片机与其它芯片常用的通讯协议,由于只需要两根线,所以很好使用。 一. I2C协议技术性能:&nb... ...

[USACO15DEC]最大流MaxFlow

题目:洛谷p3128。 题目大意:一棵n个点的树,每次将两个节点最短路径所覆盖的所有节点的流量加1。问你最后流量最大的节 ...

kde4.1 alpha1

KDE Project Ships First Alpha of KDE 4.1 KDE Commun... ...

oracle 函数 和 优化

sql语句中,如果where条件里面含有not, !=, <> ,null ,则即使该字段建有索引,也... ...
09年中国互联网企业市值排名

09年中国互联网企业市值排名

这是一个最坏的时代,也是一个最好的时代。自07年底美国次贷危机以来,全球经济发生了巨大的变化。股票市场也随之跌荡起... ...

用于发送UDP消息的SQL Server 扩展存储过程

下载源文件 13.1 kb介绍我希望能够发布 sql server 表更新,因此修改了微软的示例扩展存储过程 xp_he ...

Cache与Fetch(二)

这两天一直百思不得其解的问题终于解决了,这个问题如下: 通过HQL:“select distinct forumGr... ...

[转]小规模低性能低流量网站设计原则

作者: Fenng 网址: http://www.dbanotes.net/arch/small_site... ...

divcss圆角

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transit... ...

Kindle Paperwhite 越狱/加字体/支持PDF、EPUB、DjVu、FB2、CHM和DOC文档

0. 升级 官网固件升级:http://www.amazon.com/gp/help/customer/displ... ...
购物网第二阶段总结笔记3:用户注册模块

购物网第二阶段总结笔记3:用户注册模块

事先工作: 【1】建立用户表:  分析静态页面的用户信息,可以得出用户表所需的字段,建立用户表S... ...

pythonbottleweb框架简介

bottle 是一个快速,简单,轻量级的 python wsgi web 框架。单一文件,只依赖 python 标准库 ...

Android Log介绍

android.util.Log常用的方法有以下5个:Log.v() ,Log.d() ,Log.i() ,Log.w(... ...

target action版简化命令设计模式原理分析

我们知道在Cocoa程序中, 如果你想处理一个窗口的事件或者应用程序的事件, 你可以使用Delegate的方法来实现响应... ...

AHP层次分析法计算权重

一. AHP层次分析法介绍     层次分析法(Analytic Hierarchy... ...

AddingGravitytoyourUIComponents

problem you want your ui components to have gravity, so that ...

我的tmux配置

# General Setting set-option -g prefix C-a ... ...

Android适配器之---SimpleCursorAdapter

结构 继承关系 public class SimpleCusrorAdapter extends Reso... ...

008.不要在该奋斗的年纪选择去偷懒

转载地址:不要在该奋斗的年纪选择去偷懒 不要在该奋斗的年纪选择去偷懒,只有度过了一段连自己都被感动了的... ...

不能读取记录;在MSysObjects上没有读取数据权限-80040E09

当我读取ACCESS里的系统表MSysObjects时,出现:不能读取记录;在 MSysObjects 上没有读取... ...

[Django]bulk_create探究

使用django orm大批量插入的时候我们可以不使用for循环对一个一个的save而是使用 bulk_create ...

不均衡分区和绑定变量窥视导致的查询计划错误

不均衡分区和绑定变量窥视导致的查询计划错误 周一收到生成支持人员的报告,系统上一个作业启动后很长时间没有完成,其执... ...

SQLCookbook学习笔记

许多人以一种马马虎虎的态度在使用sql,根本没有意识到自己掌握着多么强大的武器。本书的目的是打开读者的视野,看看sql究 ...

Android ImageView长按保存图片及截屏相关知识

在日常开发中,可能会需要做长按保存图片这个功能,又或者需要做个截屏分享功能。最近正好在研究这些东... ...