如何学习java的默认访问权限(java访问权限基础)

  • 时间:
  • 6222人关注

这是一篇关于java相关的编程问答内容,被964位程序员关注,内容涉及到java、访问权限、java访问权限基础等,由姚展鹏 编辑补充,一起来看下大家的回答。

    Java提供了public,private,protected三个访问权限修饰词,提供了一下四种访问权限控制机制:

    1.包访问权限;

    2.Public访问权限;

    3.Private访问权限;

    4.Protected访问权限;

    1.包访问权限

    包访问权限是Java为了便于程序开发而给定的一种权限选择。

    当方法或域为给定访问权限限制符时,其默认具有该权限。具有该权限的方法和域成员,在包内是完全可见的(主语要与其对象依附在一起),而包外则不可见。这有点类似于C++中友元类,友元类间彼此可见,以简化访问。

    由于Animal类和Test类都被打包在同一个Package下,Animal中的bark()方法为报访问权限,故对类Test可见。

    对Java文件中的类也是如此,若未指定限制符,其默认为包访问权限,只能在包内被使用。包外是无法利用其生成对象的(不可见)。

    注意:当决定一个类对包外可见的时候,除了要将类的访问限定符改为public以外,自定义的构造器限定符也必须修改为public,不然将导致外部不可见。

    2.Public访问权限

    当在方法或域前面显示的给定public限定符的时候,其具有该权限控制。

    public权限是最为宽松的一种权限控制,对包内、外部都是完全可见的。

    Java最多只允许一个Java文件中出现一个public类(该类向外提供接口,并与该Java文件中的名称完全一致)。

    当一个Java文件中无一个public类时,表明其仅供包内使用,对外界不可见。

    注意:类只有包访问权限和public访问权限两类。

    3.Private访问权限

    Private是访问限定最为严格的一种权限。

    当方法或域为private权限时,表明其只针对该类的内部可见,类的外部(包括同一个包内的其他类)是不可见的。

    4.Protected访问权限

    Protected权限是一种严格程度介于public和private之间的权限,具有protected权限的方法和域只能对其自身和导出类可见。

    在面向对象的设计当中,最常用的位public和private访问权限两种。

    一般情况下将域定义为private,将方法定义为public。外界使用该类时,通过public方法使用其接口,而具体的域成员则对外部屏蔽,只能通过类提供的接口间接访问。

    此处,age域对外部不可见,要想对其进行操作,必须使用Dog类提供的接口setAge(intnum)。

    注意到setAge的方法体age=num+1;对用户给出的年龄加1了以后再修改了age的属性,这种修改对使用者是不可见的,有时又是非常必要的。

以上就是码农之家java培训机构的小编针对“编程入门学习,java的默认访问权限”的内容进行的回答,希望对大家有所帮助,如有疑问,请在线咨询,有专业老师随时为你服务。

码农之家
精选回答2:记录Java内部类的访问权限问题

9小时6分钟前回答

非静态类

两者都是非静态类可以互相访问,内部类访问外部类没有疑问,就像是一个方法(这里只内部类)访问类中的变量一样;但是,外部类的成员也可以访问内部类的内容,但是亲测必须实例了这个内部类才可以使用(具体原因去查大佬们写的博客)。

方法外只能对定义的变量赋值,不可对游离变量赋值(功底弱):

错误示例:

注:突发奇想那一个类里面的方法定义的私有变量类可以访问到吗,然后发现方法里不能加权限作用域。

上代码:

package com.it.demo03;   public class MyTest1 {       private String  s = "yyy";        class Inner{         private String  u = "uuu";         public Inner(){         }         public void gets(){             System.out.println(s);         }     }       public void getu() {          Inner inner = new Inner();         System.out.println(inner.u);     } /*     //方法中内部不不能加权限作用域,方法里面定义的变量是只能方法使用局部变量     public void virtuainner(){         private String vin = "vin";     }     */ } class Test2{     public static void main(String[] args) {         MyTest1 myTest1 = new MyTest1();         MyTest1.Inner inner = myTest1.new Inner();         inner.gets();         myTest1.getu();     } }

静态类:

效果相似:

package com.it.demo03; public class MyTest2 { private static String  s = "yyy"; static class Inner{ private static String  u = "uuu"; public Inner(){ } public static void gets(){ System.out.println(s); s = "us"; } } public static void getu() { //        Inner inner = new Inner(); //        System.out.println(inner.u); System.out.println(Inner.u); } } class Test3{ public static void main(String[] args) { MyTest2.getu(); MyTest2.Inner.gets(); } }

静态内部类实现单例模式:

pacpackage com.it.demo02;   public class SingletonDemo05 {     private volatile static SingletonDemo05 singletonDemo05 = null;     public static void getsd(){         System.out.println("getsd:"+singletonDemo05);     }     private SingletonDemo05(){}     private static class Inner{         public static SingletonDemo05 getSD(){             if(singletonDemo05 == null){                 synchronized (SingletonDemo05.class){                     if (singletonDemo05 == null)                         singletonDemo05 = new SingletonDemo05();                 }             }             return singletonDemo05;         }     }     public static SingletonDemo05 getSingletonDemo05(){         return Inner.getSD();     } }   class Test4{     public static void main(String[] args) {         SingletonDemo05.getsd();         SingletonDemo05 singletonDemo05 = SingletonDemo05.getSingletonDemo05();         SingletonDemo05 singletonDemo051 = SingletonDemo05.getSingletonDemo05();         System.out.println(singletonDemo05 == singletonDemo051);           SingletonDemo05.getsd();         System.out.println(singletonDemo05.hashCode());         System.out.println(singletonDemo051.hashCode());     } }

以上就是码农之家java培训机构的小编针对“记录Java内部类的访问权限问题”的内容进行的回答,希望对大家有所帮助,如有疑问,请在线咨询,有专业老师随时为你服务。

展开问题
码农之家
精选回答3:基础入门,java中访问权限控制表

19小时23分钟前回答

    注释:表中的笑脸表示可以访问:

    第二列:给出了是否类本身可以访问它的成员(从表中可以知道,类总是可以访问它自己的成员)

    第三列:给出了是否类的子类可以访问它的成员;

    第四列:给出了是否在相同包中的类可以访问该类的成员;

    第五列:给出了是否所有的类可以访问该类的成员

    二、

    1.在一个Java文件中,有且仅有一public类;类名必须与java文件名相同;在一个java文件中可以有多个不是public的类,但是不建议这种做法,通常一个类完成某一功能。

    2.对于一个类而言,仅有包访问权限或者public,类不可以是private(这样会使得除该类之外,其他类都不可以访问它),也不可以是protected。包访问权限是指类去掉Public即为包访问权限。

    3.如果把一类的构造方法指定为private,那么就无法为该类创建对象,也就无法使用它。那么如果现在要使用该类怎么办?

    (1)为该类创建一个static方法,在该方法里面创建该类的对象,并返回这个对象的引用;

    (2)利用单例模式,创建一个静态对象,然后为其创建一个publicstatic方法,返回该静态对象。通过这两个public方法来使用该对象。

以上就是码农之家java培训机构的小编针对“基础入门,java中访问权限控制表”的内容进行的回答,希望对大家有所帮助,如有疑问,请在线咨询,有专业老师随时为你服务。

展开问题
码农之家
精选回答4:Java 包和访问权限操作

17小时3分钟前回答

1、包的命名规则

包命名规则:

- 包名全部由小写字母(多个单词也全部小写);

- 如果包名包含多个层次,每个层次应该用“.”分割;

- 包名一般由倒置的域名开头,比如com.baidu;——不要有www

- 自定义包不能java开头;

2、包的作用

有利于类的查找与管理。一个软件由很多类构成,这些类按其功能可分为vo类、dao类、工具类、service类、controller类等,将这些类按其功能分门别类地放在不同包中有利于类的查找与管理;

解决了同名类命名冲突;

有利于保护类中的成员变量及其方法。类中成员变量及其方法前面的访问控制符决定了该变量和方法的使用范围;

3、jdk中的包

JDK类库中的包,最高一级的包名是java和javax。

java.lang:提供利用 Java 编程语言进行程序设计的基础类,例如:String、Math、Integer、System和Thread等。

java.util:java工具类,包含对集合的操作、事件模型、日期和时间设施、国际化和各种实用工具类。

java.io:通过数据流、序列化和文件系统提供系统输入和输出。

java.net:为实现网络应用程序提供类。

java.awt:包含用于创建用户界面和绘制图形图像的所有类。

4、访问修饰符

软件中的某些属性和方法出于程序安全考虑不允许被其它类操作和调用,这就需要使用Java中的访问权限修饰符,Java中的访问权限修饰符有4中:

Java中的访问权限修饰符可以修饰成员变量、构造方法、普通方法。

访问控制符使用范围:

public是最大的访问权限修饰符,其修饰的成员变量、构造方法和普通方法可在任何一个类中被操作或使用;

protected修饰的成员变量、构造方法和普通方法可以在其定义类中、与定义类同包的其它类(可以使子类)中和与定义类不同包但是其子类的类中使用;

默认(友好的)修饰的成员变量、构造方法和普通方法可以在其定义类中和与定义类同包的其它类(可以使子类)中使用;

private是最小的访问权限控制符,其修饰的成员变量、构造方法和普通方法只能在定义它们的类中被操作或使用;

下面主要说一下protected 修饰的方法和属性

首先定义一个Person类

一、不继承则无法调用

二、继承

1、不能使用创建父类对象调用非静态的属性和方法,只能通过子类的对象调用继承过来的属性和方法

2、如果父类中属性和方法是静态的,子类中可通过父类类名直接调用属性和方法

补充知识:Java包内类的访问权限

如下所示:

以上这篇Java 包和访问权限操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持码农之家。

展开问题

参考资料

  • 阿里巴巴Java开发手册(第2版)

    阿里巴巴Java开发手册(第2版)

    本手册的愿景是码出高效,码出质量。它结合作者的开发经验和架构历程,提炼阿里巴巴集团技术团队的集体编程经验和软件设计智慧,浓缩成为立体的编程规范和*实践。众所周知,现代软件行业的高速发展对开发工程师的综合素质要求越来越高,因为不仅是编程相关的知识点,其他维度的知识点也会影响软件的*终交付质量,比如,数据库的表结构和索引设计缺陷可能带来软件的架构缺陷或性能风险;单元测试的失位导致系统集成测试困难;没有鉴权

    大小:98 MBJava

    立即下载
  • Java程序设计实用教程(第3版)

    Java程序设计实用教程(第3版)

    本书全面、系统地介绍Java语言程序设计的基本知识、运行机制和各种常用编程方法和技术,将面向对象的程序设计思想贯穿其中,建立起牢固扎实的理论基础。主要内容包括Java开发运行环境JDK、Java语言基础、面向对象的核心特性、接口、内部类和包、异常处理、图形用户界面、多线程、Applet、输入/输出流和文件操作、网络通信、Web应用、数据库应用和综合应用设计。这些内容是构成Java应用程序的基本要素和知识。 本书注重理论与实践相结合,注重基

    大小:10.9 MBJava

    立即下载
  • Java 基础核心总结

    大小:11 MBJava基础

    立即下载
  • 全端Web开发:使用JavaScript与Java

    全端Web开发:使用JavaScript与Java

    全端Web开发 使用JavaScript与Java 出版时间: 2015 JavaScript和Java这两大生态系统之间如何协同,成为所有Web开发人员共同面临的问题。本书应运而生,全面又简练地为读者展示了最新的C/S应用开发范式。本书以Java和JavaScript这两种最流行的服务器与客户端开发环境为例,全面讲解了最新的C/S应用开发范式。作者不仅讲解了很多实用的C/S开发架构,还通过各种实例进一步强化了读者的认知。 目录 前言 xiii 第1 章因变而变 1 1.1Web 用户 2 1.2技术 2

    大小:17.74MBWeb开发

    立即下载
  • Java并发实现原理:JDK源码剖析

    Java并发实现原理:JDK源码剖析

    编辑推荐 本书全面系统地讲解了Java并发实现原理,从基础的多线程知识讲起,全面介绍了Concurrent包的每个部分,详细分析多线程背后的原理,同时从源码角度进行了剖析,为不可多得的一本好书。 内容简介 本书全面而系统地剖析了Java Concurrent包中的每一个部分,对并发的实现原理进行了深刻的探讨。全书分为8章,第1章从*基础的多线程知识讲起,理清多线程中容易误解的知识点,探究背后的原理,包括内存重排序、happen-before、内存屏障等;第2~8章,

    大小:96 MBJava并发

    立即下载
  • 黑马程序员面试题汇总(java/数据库/前端)

    黑马程序员面试题汇总(java/数据库/前端)

    此套教程整理了网上总结的面试题,有java面试题,jq面试题,jsp、servlet、ajax面试题,mysql面试题,oracle面试题,redis教案,也有最近时间总结的公司面试题,涉及的层面虽然不是很多,但是应对面试 应该还是可以的。 文件夹大概有20兆的大小,所以面试题数量也是不少的,里面也包含了一些总结和见解,比如说在集合方面的知识点有实现的各自特点,他们之间的区别,以及等等原理和实现的细节,还包含了java和前端的面试宝典,一个宝典大概有500页左

    大小:20.4 MB程序员面试

    立即下载
  • Java从小白到大牛(含源码)

    Java从小白到大牛(含源码)

    Java从小白到大牛是一本Java语言学习教程,读者群是零基础小白,通过本书的学习能够成为Java大牛。主要内容包括:Java语法基础、数据类型、运算符、控制语句、数组、字符串、面向对象基础、继承与多态、抽象类与接口、集合框架、异常处理、输入输出和网络编程等技术。

    大小:15.6 MBJava

    立即下载
  • Java核心技术:卷I 基础知识

    Java核心技术:卷I 基础知识

    大小:44.4 MBJava

    立即下载
  • JavaScript前端开发案例教程

    JavaScript前端开发案例教程

    JavaScript是这种运用于Web前端开发的开发语言,具备简易、易懂、实用的特性,用JavaScript开发设计网页页面能够提高网页页面的参与性,为客户出示即时的、动态性的互动感受。 《 JavaScript前端

    大小:75.1 MBJS前端

    立即下载
  • Java面向对象编程(第2版)

    Java面向对象编程(第2版)

    本书以行云流水般的语言诠释Java编程艺术,基于全新Java技术、理论紧密结合实际,详细讲解Java面向对象的编程思想、编程语法和设计模式等,可作为开发指南、高校教材和认证辅导教材,

    大小:136 MBJava

    立即下载

更多回答

10小时57分钟前回答

Java中4种访问权限修饰符

在Java编程语言中有四种权限访问控制符,这四种访问权限的控制符能够控制类中成员的可见性。 一、public (1)定义:public是公共的,被public所修饰的成员可以在任何类中都能被访问到。 (2)修饰的成分: public能用来修饰类,在一个java源文件中只能有一个类被声明为public,而且一旦有一个类为public,那这个java源文件的文件名就必须要和这个被public所修饰的类的类名相同,否则编译不能通过。说到这里,穿插多一点知识。一个类作为外部类的时候只能被public或者默认访问修饰符所修饰,但是一个类如果作为内部类的时候,则可以被四种访问修饰符所修饰,因为一个类作为内部类的时候,就作为外部类……

15小时54分钟前回答

Java编程中的四种修饰符访问权限

在Java编程语言中有四种权限访问控制符,这四种访问权限的控制符能够控制类中成员的可见性。 一、public (1)定义:public是公共的,被public所修饰的成员可以在任何类中都能被访问到。 (2)修饰的成分: public能用来修饰类,在一个java源文件中只能有一个类被声明为public,而且一旦有一个类为public,那这个java源文件的文件名就必须要和这个被public所修饰的类的类名相同,否则编译不能通过。说到这里,穿插多一点知识。一个类作为外部类的时候只能被public或者默认访问修饰符所修饰,但是一个类如果作为内部类的时候,则可以被四种访问修饰符所修饰,因为一个类作为内部类的时候,就作为外部类……