精华内容
下载资源
问答
  • private(私有的)无法访问:使用private关键字,就意味着被声明的成员或方法,除了本,其他任何都无法访问。 public(公共的)接口访问权限:使用public关键字,就意味着被声明的成员或方法对所有都是可以...

    定义

    private(私有的)无法访问:使用private关键字,就意味着被声明的成员或方法,除了本类,其他任何类都无法访问。

    public(公共的)接口访问权限:使用public关键字,就意味着被声明的成员或方法对所有类都是可以访问的。

    protected(受保护的)继承访问权限:使用protected关键字,就意味着被声明的成员或方法,在子类以及相同包内的其他类都可以访问的。

    default(默认的)包访问权限:即不写任何关键字,就意味着相同包内的其他类(包括子类)可以访问,包外都不可以访问。
    在这里插入图片描述

    一、为什么不能用private修饰Java外部类?

    因为如果使用private修饰Java外部类,那么这个类不能创建实例,这个类的属性和方法不能被访问,那么创建这个类毫无意义,所以不能使用private修饰Java外部类。

    二、为什么不能用protected修饰Java外部类?

    举个例子,如果类A用protected修饰,与类A不同包的类B想要访问类A的话,类B就必须是继承类A的(或者说类B必须为类A的子类),但是类B继承类A的前提又是类B可以访问到类A,有点绕对吧,仔细想想会发现这里是冲突的,其实这就说明了为什么不能用protected来修饰外部类。再说,protected是用来表示在继承关系中的访问权限的,在同一个包和子类中都可以访问,因为继承就是为了拥有父类的属性和方法,所以protected是用于修饰类的方法和属性的,也就是说,我想要这个类的属性和方法可以被任何子类继承,我就用protected。

    展开全文
  • c语言中定义变量的几个关键字

    千次阅读 2018-08-23 10:44:21
    1.auto (1)auto关键字在C语言中只有一个作用,那就是修饰局部...(3)平时定义局部变量时就是定义的auto的,只是省略了auto关键字而已。可见,auto的局部变量其实就是默认定义的普通的局部变量。 2.static (1)stati...

    1.auto
    (1)auto关键字在C语言中只有一个作用,那就是修饰局部变量。
    (2)auto修饰局部变量,表示这个局部变量是自动局部变量,自动局部变量分配在栈上。(既然在栈上,说明它如果不初始化那么值就是随机的······)
    (3)平时定义局部变量时就是定义的auto的,只是省略了auto关键字而已。可见,auto的局部变量其实就是默认定义的普通的局部变量。

    2.static
    (1)static关键字在C语言中有3种用法,而且这两种用法彼此没有任何关联、完全是独立的。其实当年本应该多发明一个关键字,但是C语言的作者觉得关键字太多不好,于是给static增加了一种用法,导致static一个关键字竟然有两种截然不同的含义。
    (2)static的第一种用法是:用来修饰局部变量,形成静态局部变量。要搞清楚静态局部变量和非静态局部变量的区别。本质区别是存储类不同(存储类不同就衍生出很多不同):非静态局部变量分配在栈上,而静态局部变量分配在数据段/bss段上。
    (3)static的第二种用法是:用来修饰全局变量,形成静态全局变量。要搞清楚静态全局变量和非静态全局变量的区别。区别是在链接属性上不同:静态全局变量的连接属性是文件内连接;非静态全局变量的连接属性是文件外连接。

    (3)static的第二种用法是:用来修饰函数,将函数的作用域限制在本文件中,其他文件不可见。
    分析:

       static的后两种作用本质是一样的,都是将全局变量或函数限制在本文件中。
        静态局部变量在存储类方面和全局变量一样,都是在数据段或bss段。
        静态局部变量在生命周期方面和全局变量一样,从程序开始到程序消亡。
        静态局部变量和全局变量的区别是:作用域、连接属性。静态局部变量作用域是代码块作用域(和普通局部变量是一样的)、      链接属性是无连接;全局变量作用域是文件作用域(和函数是一样的)、链接属性方面是外连接。

    3.register
    (1)register关键字不常用,也只有一个作用,那就是:register修饰的变量。编译器会尽量将它分配在寄存器中。(平时分配的一般的变量都是在内存中的)。分配在寄存器中一样的用,但是读写效率会高很多。所以register修饰的变量用在那种变量被反复高频率的使用,通过改善这个变量的访问效率可以极大的提升程序运行效率时。所以register是一种极致提升程序运行效率的手段。
    (2)uboot中用到了一个register类型的变量,gd这个变量是用来存uboot的全局变量(gd就是global data)。因为这个全局变量在整个uboot中到处都被访问,所以定义成register的。
    (3)平时写代码要被定义成register这种情况很少,一般慎用。
    (4)register编译器只能承诺尽量将register修饰的变量放在寄存器中,但是不保证一定放在寄存器中。主要原因是因为寄存器数量有限,不一定有空用。

    4.extern
    (1)extern主要用来声明全局变量,声明的目的主要是在a.c中定义全局变量而在b.c中使用该变量。
    (2)C语言中程序的编译时以单个.c源文件为单位的,因此编译a.c时只考虑a.c中的内容(不会考了b.c的内容),这就导致a.c中使用了b.c中定义的变量时在编译时报错。解决方案是声明
    (3)应该在a.c中使用g_b之前先声明g_b,声明就是告诉a.c我在别的文件中定义了g_b,并且它的原型和声明的一样,将来在链接的时候链接器会在别的.o文件中找到这个同名变量。声明一个全局变量就要用到extern关键字

    5.volatile
    (1)volatile的字面意思:可变的、易变的。C语言中volatile用来修饰一个变量,表示这个变量可以被编译器之外的东西改变。编译器之内的意思是变量的值的改变是代码的作用,编译器之外的改变就是这个改变不是代码造成的,或者不是当前代码造成的,编译器在编译当前代码时无法预知。譬如在中断处理程序isr中更改了这个变量的值,譬如多线程中在别的线程更改了这个变量的值,譬如硬件自动更改了这个变量的值(一般这个变量是一个寄存器的值)
    (2)以上说的三种情况(中断isr中引用的变量,多线程中共用的变量,硬件会更改的变量)都是编译器在编译时无法预知的更改,此时应用使用volatile告诉编译器这个变量属于这种(可变的、易变的)情况。编译器在遇到volatile修饰的变量时就不会对改变量的访问进行优化,就不会出现错误。
    (3)编译器的优化在一般情况下非常好,可以帮助提升程序效率。但是在特殊情况(volatile)下,变量会被编译器想象之外的力量所改变,此时如果编译器没有意识到而去优化则就会造成优化错误,优化错误就会带来执行时错误。而且这种错误很难被发现。
    (4)volatile是程序员意识到需要volatile然后在定义变量时加上volatile,如果你遇到了应该加volatile的情况而没有加程序可能会被错误的优化。如果在不应该加volatile而加了的情况程序不会出错只是会降低效率。所以我们对于volatile的态度应该是:正确区分,该加的时候加不该加的时候不加,如果不能确定该不该加为了保险起见就加上。

    6.restrict
    (1)c99中才支持的,所以很多延续c89的编译器是不支持restrict关键字,gcc支持的。
    (2)restrict也是和编译器行为特征有关的。
    (3)restrict只用来修饰指针,不能修饰普通变量。
    (4)http://blog.chinaunix.net/uid-22197900-id-359209.html

     

     

    展开全文
  • 存储类关键字

    2018-01-19 16:32:53
    平时定义局部变量时就是定义的auto,只是省略了auto关键字而已。  static :可修饰局部变量也可修饰全局变量。如果局部变量用static修饰时为静态局部变量, 它只能在函数内部使用但是一直占据存储空间的变量。...

             auto :修饰局部变量,分配在栈上(既然在栈上,说明它如果不初始化那么值就是随机的),

    平时定义局部变量时就是定义的auto,只是省略了auto关键字而已。

              static :可修饰局部变量也可修饰全局变量。如果局部变量用static修饰时为静态局部变量,

    它只能在函数内部使用但是一直占据存储空间的变量。(静态局部变量占用内存时间长可读性差,

    因此,除非必要,尽量避免使用局部变量。当多次调用一个函数且要求在调用之间保存某些变量的

    值时可考虑采用静态局部变量。)

    如果全局变量用static修饰时为静态全局变量,全局变量本身就是静态存储方式,静态全局变量也是静态

    存储方式,这俩这在存储方式上并无区别。

    全局变量与全局静态变量的区别:  
    (a)若程序由一个源文件构成时,全局变量与全局静态变量没有区别。  
    (b)若程序由多个源文件构成时,全局变量与全局静态变量不同:全局静态变量使得该变量成为定义该变量

    的源文件所独享,即:全局静态变量对组成该程序的其它源文件是无效的。  
    (c)具有外部链接的静态;可以在所有源文件里调用;除了本文件,其他文件可以通过extern的方式引用

    例:




    非静态全局变量对整个源程序都有效,所以在做静态库开发时用到全局变量都要用static修饰成静态的,

    避免接入静态库的程序中全局变量与静态库中的全局变量冲突。

    那么一个.m文件要使用另一个.m文件中的全局变量该怎么处理?很简单,使用extern关键字修饰。

               extern

    APPdelegate.m中定义的全局变量ZXYToken想在ViewController中使用


    可以打印出字符串:zhouxiangyu

    如果在APPdelegate.m中定义的是static静态的全局变量,那么在ViewController中这么写就

    会报错。

    (extern 的工作原理:先在当前文件查找有没有全局变量,没有找到,才会去其他文件查找。)


    const:   http://mp.blog.csdn.net/postedit/79034651

       const 与 static 联合使用


        const和static替代宏与宏的区别:


            register

    这个 关键字请求编译器尽可能地将变量存储在CPU内部寄存器中,而不是通过内存寻址访问以提高效率。注意 是尽可能,不是绝对。
    注意: 1、 register变量必须是能被CPU寄存器接受的类型,这意味着  register  变量必须是一个单个的值,并且其长度应小于或等于整型的长度。不能用取址符"&"来获取  register变量的地址


    volatile:


    typedef:

    typedef是C中的关键字,它的主要作用是给一个数据类型定义一个新的名字,一般用于简化较为复杂的类型声明。

    例:


    在结构体和block定义中比较常用到:

      

    俩种写法是等效的。








    展开全文
  • 存储相关的关键字

    2016-07-23 22:43:15
    1、auto (1)auto关键字在C语言中只有一个作用,那就是修饰局部变量...(3)平时定义局部变量时就是定义的auto的,只是省略了auto关键字而已。可见,auto的局部变量其实就是默认定义的普通的局部变量。 2、static (1)st

    1、auto
    (1)auto关键字在C语言中只有一个作用,那就是修饰局部变量。
    (2)auto修饰局部变量,表示这个局部变量是自动局部变量,自动局部变量分配在栈上。(既然在栈上,说明它如果不初始化那么值就是随机的······)
    (3)平时定义局部变量时就是定义的auto的,只是省略了auto关键字而已。可见,auto的局部变量其实就是默认定义的普通的局部变量。
    2、static
    (1)static关键字在C语言中有2种用法,而且这两种用法彼此没有任何关联、完全是独立的。其实当年本应该多发明一个关键字,但是C语言的作者觉得关键字太多不好,于是给static增加了一种用法,导致static一个关键字竟然有两种截然不同的含义。
    (2)static的第一种用法是:用来修饰局部变量,形成静态局部变量。要搞清楚静态局部变量和非静态局部变量的区别。本质区别是存储类不同(存储类不同就衍生出很多不同):非静态局部变量分配在栈上,而静态局部变量分配在数据段/bss段上。
    (3)static的第二种用法是:用来修饰全局变量,形成静态全局变量。要搞清楚静态全局变量和非静态全局变量的区别。区别是在链接属性上不同,讲到链接属性时详细讲。
    分析:
    1、静态局部变量在存储类方面和全局变量一样。
    2、静态局部变量在生命周期方面和全局变量一样。
    3、静态局部变量和全局变量的区别是:作用域、连接属性。静态局部变量作用域是代码块作用域(和普通局部变量是一样的)、链接属性是无连接;全局变量作用域是文件作用域(和函数是一样的)、链接属性方面是外连接。
    3、register
    (1)register关键字不常用,也只有一个作用,那就是:register修饰的变量。编译器会尽量将它分配在寄存器中。(平时分配的一般的变量都是在内存中的)。分配在寄存器中一样的用,但是读写效率会高很多。所以register修饰的变量用在那种变量被反复高频率的使用,通过改善这个变量的访问效率可以极大的提升程序运行效率时。所以register是一种极致提升程序运行效率的手段。
    (2)uboot中用到了一个register类型的变量,gd这个变量是用来存uboot的全局变量(gd就是global data)。因为这个全局变量在整个uboot中到处都被访问,所以定义成register的。
    (3)平时写代码要被定义成register这种情况很少,一般慎用。
    (4)register编译器只能承诺尽量将register修饰的变量放在寄存器中,但是不保证一定放在寄存器中。主要原因是因为寄存器数量有限,不一定有空用。
    4、extern
    (1)extern主要用来声明全局变量,声明的目的主要是在a.c中定义全局变量而在b.c中使用该变量。
    (2)C语言中程序的编译时以单个.c源文件为单位的,因此编译a.c时只考虑a.c中的内容(不会考了b.c的内容),这就导致a.c中使用了b.c中定义的变量时在编译时报错。解决方案是声明
    (3)应该在a.c中使用g_b之前先声明g_b,声明就是告诉a.c我在别的文件中定义了g_b,并且它的原型和声明的一样,将来在链接的时候链接器会在别的.o文件中找到这个同名变量。声明一个全局变量就要用到extern关键字
    5.volatile
    (1)volatile的字面意思:可变的、易变的。C语言中volatile用来修饰一个变量,表示这个变量可以被编译器之外的东西改变。编译器之内的意思是变量的值的改变是代码的作用,编译器之外的改变就是这个改变不是代码造成的,或者不是当前代码造成的,编译器在编译当前代码时无法预知。譬如在中断处理程序isr中更改了这个变量的值,譬如多线程中在别的线程更改了这个变量的值,譬如硬件自动更改了这个变量的值(一般这个变量是一个寄存器的值)
    (2)以上说的三种情况(中断isr中引用的变量,多线程中共用的变量,硬件会更改的变量)都是编译器在编译时无法预知的更改,此时应用使用volatile告诉编译器这个变量属于这种(可变的、易变的)情况。编译器在遇到volatile修饰的变量时就不会对改变量的访问进行优化,就不会出现错误。
    (3)编译器的优化在一般情况下非常好,可以帮助提升程序效率。但是在特殊情况(volatile)下,变量会被编译器想象之外的力量所改变,此时如果编译器没有意识到而去优化则就会造成优化错误,优化错误就会带来执行时错误。而且这种错误很难被发现。
    (4)volatile是程序员意识到需要volatile然后在定义变量时加上volatile,如果你遇到了应该加volatile的情况而没有加程序可能会被错误的优化。如果在不应该加volatile而加了的情况程序不会出错只是会降低效率。所以我们对于volatile的态度应该是:正确区分,该加的时候加不该加的时候不加,如果不能确定该不该加为了保险起见就加上。
    6.三种链接属性:外连接、内链接、无链接
    (1)外连接的意思就是外部链接属性,也就是说这家伙可以在整个程序范围内(言下之意就是可以跨文件)进行链接,譬如普通的函数和全局变量属于外连接。
    (2)内链接的意思就是(c文件内部)内部链接属性,也就是说这家伙可以在当前c文件内部范围内进行链接(言下之意就是不能在当前c文件外面的其他c文件中进行访问、链接)。static修饰的函数/全局变量属于内链接。
    (3)无连接的意思就是这个符号本身不参与链接,它跟链接没关系。所有的局部变量(auto的、static的)都是无连接的

    参考:http://www.zhulaoshi.org/

    展开全文
  • 变量声明和定义(extern关键字详解)

    千次阅读 2020-08-06 14:25:58
    文章目录声明和定义(extern关键字详解)一、C++中extern关键字的意义1.1 分离式编译1.2 声明与定义1.3 extern关键字二、声明与定义2.1 函数的声明和定义2.2 变量的声明和定义三、extern关键字详解3.1 基本理解3.2 ...
  • 构造方法constructor构造器 构造方法的定义 [修饰符] 类名 (形式参数列表){  //语句 } 构造器用于构造该的实例。作用:用来初始化对象!...(2)构造器虽然有返回值,但是不能定义返回类型(返回值
  • 接口是一种特殊的抽象,接口用关键字interface来标识,其实接口全写出来,前面要加,public abstract interface,不过一般情况下,已默认,不用写;接口中的也可以定义变量,不过全为public static final类型的,...
  • 这篇文章通过反编译讲解了为什么内部类能外部类private成员和为什么外部类能用内部类private成员 在Java编程中,使用private关键字修饰了某个成员,只有这个成员所在的类和这个类的方法可以使用,其他的类都无法...
  • global关键字

    千次阅读 2018-08-13 11:54:08
    php变量作用域:在所有函数外部定义的变量,拥有全局作用域global;在函数内部定义的变量用于局部作用域local。全局变量可以被脚本的任何...在函数体外定义的global变量不能在函数体内使用。并且不能在用global声明...
  • static关键字在编程中非常容易混淆,因为它用于不同的“上下文环境”有不同的作用和意思,现在我们来吧static关键字进行一个总结,希望对看到这篇文章的人有所帮助。 C语言中static关键字主要有以下作用: ...
  • 嵌入式C语言可不用的关键字

    千次阅读 多人点赞 2010-10-29 19:47:00
    1.static关键字 这个关键字前面也有提到,它的作用是强大的。 要对static关键字深入了解,首先需要掌握标准C程序的组成。 标准C程序一直由下列部分组成:  1)正文段——CPU执行的机器...
  • Swift关键字总结上篇

    千次阅读 2017-12-24 20:41:13
    在Swift官方文档的词汇结构中, 有非常多的关键字, 它们被用于声明中、语句中、表达式中、中、模式中, 还有以数字符号#开头的关键字, 以及特定上下文环境使用的关键字。 本文中涉及的代码可以在这里下载代码资源。...
  • Swift关键字总结下篇

    千次阅读 2017-12-29 10:35:01
    在Swift官方文档的词汇结构中, 有非常多的关键字, 它们被用于声明中、语句中、表达式中、中、模式中, 还有以数字符号#开头的关键字, 以及特定上下文环境使用的关键字。本文中涉及的代码可以在这里下载代码资源。 ...
  • 【嵌入式】C语言中volatile关键字

    千次阅读 多人点赞 2020-07-31 16:37:33
    将变量定义为volatile就表示告诉编译器这个变量可能会被竟想到地改变,在这种情况下,编译器就不会去假设这个变量的值了,及优化器在用到这个变量是必须每次重新读取他的值。 02. volatile应用场景 在程序中,...
  • C++关键字

    千次阅读 2012-04-04 16:28:50
    我们不能在程序中使用与关键字同名的标识符。以下是C++所保留的关键 C++关键字全集(这个是从C++ Primer copy过来的,有一些补充,也有一些已经被替代): (1)asm asm已经被__asm替代了,用于汇编语言...
  • volatile关键字

    千次阅读 2017-11-27 16:29:38
    好的编译程序进行一种被称为“冗余装入和存储的删去”(redundant load and store removal)的优化,即编译程序会在程序中寻找并删去这样两代码:一是可以删去的从内存装入数据的指令,因为相应的数据已经被...
  • PHP static关键字

    2017-05-14 13:34:38
    最近在写PHP无限极分类时,常常用到static关键字定义属性和方法,所以特地从网上总结了一下static关键字使用要点: 1、一般静态属性用来保存的公用数据 2、静态方法内部只能访问静态属性,包括本和父类的 3、...
  • C语言再学习 -- 存储类型关键字

    千次阅读 2016-12-27 15:12:46
    C语言中有 5 个作为存储说明符的关键字,分别是 auto、register、static、extern 以及 typedef。关键字typedef 与内存存储无关,由于语法原因被归入此类。 现在简单了解一下这五个存储说明符的关键字: ...
  • extern关键字

    2012-04-10 20:08:23
    extern关键字是声明一个外部变量或者是函数,,对象。第一次见到他是在动态链接库的编程中,动态链接库在采用隐式连接的时候用到了extern。但是每次编程在涉及到动态链接库的时候一般都是显示的加载动态链接库的。...
  • Java中this关键字和super关键字用法

    千次阅读 2017-08-25 10:32:59
    构造方法是一个的对象在通过new关键字创建时自动调用的,在程序中不能向调用其他方法一样通过方法名(也就是类名)来调用。但如果一个有多个构造方法,可以在一个构造方法中通过this(paras…)来调用其他的构造...
  • 如在成员变量或者成员方法前面,加上Private关键字,则其他就无法调用这个中的成员方法或则和成员变量。但是,如果这个有成员内部,则受这方面的限制。也就是说,在成员内部中可以随意引用外部类的成员...
  • C++关键字详解

    万次阅读 多人点赞 2016-12-16 18:53:43
    C/C++中的关键字 C/C++中的关键字如下:   注:上表中为C++98/03中的63个关键字,其中红色标注为C语言中的32个关键字。C++11中有73个关键字,新增加的10个为:alignas、alignof、char16_t、char32_t、...
  • 简述final关键字

    2016-05-25 13:19:54
    谈到final关键字,想必很多人都陌生,在使用匿名内部的时候可能会经常用到final关键字。另外,Java中的String就是一个final,那么今天我们就来了解final这个关键字的用法。下面是本文的目录大纲:  一....
  • 如果一个变量声明时候用到关键字volative ,那么以后每次用到该变量都要从其物理地址直接读取,不能利用原来的数据,主要是避免编译器优化的原因和外部造成的变量改变,举例如下: void divv(int a,b) { int c,
  • 全面理解Java内存模型(JMM)及volatile关键字

    万次阅读 多人点赞 2017-06-12 11:25:05
    但线程对变量的操作(读取赋值等)必须在工作内存中进行,首先要将变量从主内存拷贝的自己的工作内存空间,然后对变量进行操作,操作完成后再将变量写回主内存,不能直接操作主内存中的变量,工作内存中存储着主内存中...
  • java中static关键字和final关键字

    千次阅读 2015-05-06 11:06:42
    谈到final关键字,想必很多人都陌生,在使用匿名内部的时候可能会经常用到final关键字。另外,Java中的String就是一个final,那么今天我们就来了解final这个关键字的用法。下面是本文的目录大纲:  一....
  • 1.初始化列表 2.explicit关键字 3.static成员 概念: 4.友元 4.1友元函数 4.2友元
  • 可是很多人尤其是初学者对声明和定义分辨清,觉得声明即是定义定义即是声明。造成这种混淆并奇怪,因为变量在大多数情况下,声明的同时就定义了。e.g.//main1.cint var; //声明的同时也对其定义了int main(int...
  • 注意事项一:在内部中可以随意使用外部类的成员方法以及成员变量。  众所周知,在定义成员方法或者成员变量的时候,可以给其加上一些权限的修饰词,以防止其他的访问。如在成员变量或者成员方法前面,加上...
  • typescript学习之路(三) —— ts定义类的方法(包含es5以及es6的定义类

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 82,302
精华内容 32,920
关键字:

定义外部类不能用到的关键字