`

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

阅读更多

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

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

public: 完全开发       

protected: 同包及子类访问
default(无): 同包访问
private: 只能本类访问

1、JAVA用于类的修饰符(2个)和限定符(2个):
---------------
public: 完全开发     如:A.java里面的     class A{  }没有写public ,默认为public
default ():  同包访问

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

2、构造方法修饰符

public

protected

default

private

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

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


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

 

 

 

一、java修饰符分为访问控制符和非访问控制符
(一)访问控制符  :public、protected、default、private;不加其他三个控制符则默认为default
            包外   子类     包内    类内  使用对象
public      可     可       可      可    类、接口、构造器、成员(全局变量、方法)
protected   否     可       可      可    构造器、成员(全局变量、方法)
default     否     否       可      可    类、接口、构造器、成员(全局变量、方法)
private     否     否       否      可    构造器、成员(全局变量、方法)
(二)非访问控制符:final、abstract、static、transient、volatile、native、synchronized、strictfp
1、final         :最终修饰符;使用对象为类、成员(全局变量、方法)、局部变量
2、abstract      :抽象修饰符;使用对象为类、接口、方法
3、static        :静态修饰符;使用对象为类、成员(全局变量、方法)
4、native        :本地修饰符;使用对象为方法
5、synchronized  :同步修饰符;使用对象为方法
6、transient     :暂时性修饰符;使用对象为方法
7、strictfp      :精确浮点修饰符;使用对象为类、接口、方法
8、volatile      :易失(共享)修饰符;使用对象为全局变量
二、换个角度看修饰符
(一)类修饰符      :public、default、abstract、final、strictfp
(二)接口修饰符    :public、default、abstract、strictfp
(三)构造器修饰符  :public、protected、default、private
(四)全局变量修饰符:public、protected、default、private、static、transient、volatile、final
(五)方法修饰符    : public、protected、default、private、abstract、static、final、native、synchronized、strictfp
(六)内部类        :public、protected、default、private、static、abstract、final
(七)局部变量修饰符:final

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

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

 http://shukuiyan.iteye.com/blog/1007808

 

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虚拟机会自动先调用父类的默认构造方法,而此时若父类没有默认构造方法时,就是编译出错。例如

 

public class B extends A{

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

       System.out.println(i);

    }

    public static void main(String[] args) {

       B b=new B(2);

    }

}

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

    int i;

    A(int i){

       this.i=i*2;

    }

}

 

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

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

 

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

相关推荐

    显示访问修饰符用法的 Java 程序.docx

    Java 访问修饰符是 Java 语言中的一种机制,用于确保类、构造函数、变量、方法或数据成员的安全性和可访问性。在 Java 中,访问修饰符共有四种类型:默认、私有、受保护和公共。 默认访问修饰符 默认访问修饰符是...

    14_构造函数 视频

    8. **构造函数与访问修饰符**:构造函数的访问修饰符可以是`public`、`private`、`protected`或默认(包访问)。选择合适的访问权限可以控制对象的创建范围。 通过这个“14_构造函数”视频教程,观众应该能够理解并...

    Java构造函数与普通函数用法详解

    3. 不能有任何非访问性质的修饰符修饰,例如static、final、synchronized、abstract都不能修饰构造函数。 4. 构造函数不能被直接调用,必须通过new关键字来调用。 四、构造函数的作用 构造函数的作用主要有两个: ...

    深入理解java构造器机理

    构造器可以有任何访问修饰符,例如 public、protected、private 或者没有修饰符,但不能有 abstract、final、native、static 或者 synchronized 修饰符。构造器没有返回值,也不需要 void。最后,构造器的命名与类名...

    Java语言基础入门教程 Java实训教程 4.类构造函数-this-静态属性方法-instanceof运算符共55页.pptx

    - 构造函数可添加的修饰符较少,主要包括无修饰符、`public`、`protected`、`private`。 - **缺省构造函数**: - 如果程序员未显式定义构造函数,编译器将自动生成一个无参数的缺省构造函数。 - 缺省构造函数...

    详解Java修饰符

    访问修饰符控制类、变量、方法和构造函数的可访问性。Java提供了四种不同的访问级别: 1. 默认访问级别(default):当不使用任何修饰符时,这是默认的访问级别。它允许同一包内的类访问,但对外部包不可见。接口的...

    【独家高薪面试题库】与【实战配套练习演练】6.静态变量访问修饰符1

    Java提供了四种主要的访问修饰符来控制类、变量、方法和构造函数的访问级别: - **public**:公共访问,可以在任何地方被访问。 - **private**:私有访问,只能在声明它的类内部访问。 - **protected**:受保护...

    JAVA进阶-Java继承,多态,重写,修饰符以及super与this使用,Oject对象

    Java中有两种类型的修饰符:访问修饰符(public、private、protected和默认)和非访问修饰符(final、abstract、static等)。访问修饰符控制类、方法和变量的可见性,非访问修饰符定义类或方法的特性。例如,`final...

    浅谈Java中各种修饰符与访问修饰符的说明

    注意,构造器方法(构造函数)不能有访问修饰符,且在创建新对象时,先调用父类构造器,然后执行实例变量和静态变量初始化器,最后执行自身构造器。如果构造器没有显式调用父类构造器,编译器会自动添加`super()`。 ...

    java经典小程序-函数小程序

    7. **访问修饰符**: 除了`public`,还有`private`, `protected`和默认(无修饰符)访问级别,它们控制了函数在类内部、同一包内、子类或其他包中的可见性。 8. **静态与非静态函数**: 静态函数属于类,而非静态...

    JAVA函数使用手册

    3. **访问修饰符**:`public`、`private`、`protected`和默认(包访问)是Java的访问修饰符。`public`函数可以在任何地方访问,`private`仅限本类内部,`protected`允许子类和同包访问,而默认修饰的只在同包内可...

    java函数速查手册常用函数

    2. **访问修饰符**:如`public`、`private`、`protected`和默认(无修饰符)。它们决定了方法的可见性,比如`public`方法可以在任何地方被访问。 3. **参数**:方法可以接受零个或多个参数,参数允许传递数据到方法...

    Java语言程序设计(郑莉)第七章课后习题答案

    Java有四种访问修饰符:public、private、protected和默认(包访问)。这些修饰符决定了类、方法和变量的可见性。习题可能涉及不同访问权限的使用场景,答案会给出具体例子和最佳实践。 五、接口 接口是Java中实现...

    Java零基础-访问控制权限修饰符.md

    ### Java零基础-访问控制权限修饰符 #### 内容概要 本文旨在全面解析Java中的访问控制权限修饰符,具体涉及`public`、`private`、`protected`及默认访问级别(即不使用任何显式修饰符时的情况)。通过本篇文章的...

    lesson03-04 Java类基础知识--自定义函数.ppt

    每个函数都有一个访问修饰符,如 `public` 或 `static`。访问修饰符决定了函数的可见性和可访问范围。在大多数情况下,我们建议将函数声明为 `public`,这样可以在类的任何实例或同一包的其他类中调用该函数。若声明...

    CS1807-U201814745-朱槐志java41

    在给定的文件中,涉及了多个与Java语言基础相关的知识点,包括成员访问修饰符、构造函数、类的初始化、静态成员以及包访问权限等。 1. **私有成员(private)**:在Java中,`private`修饰符用于限制成员(变量、方法...

    java练习册(011)--类(3).pdf

    6. **访问权限**:构造函数的访问修饰符可以是`public`、`private`、`protected`或默认,这决定了构造函数可以在哪些范围内被调用。 7. **实例化对象**:总是通过`new`关键字和构造函数来创建对象。对象的实例化...

    JAVA实验-类和对象

    在 Java 中,类的成员可以使用访问修饰符来控制其访问权限。常见的访问修饰符有 public、private、protected 和 default。public 修饰符表示成员可以被外部访问,而 private 修饰符表示成员只能在类内部访问。...

Global site tag (gtag.js) - Google Analytics