Java基础相关(一、常见修饰符)

学之广在于不倦,不倦在于固志。 ——晋·葛洪­

(学问的渊博在于学习时不知道厌倦,而学习不知厌倦在于有坚定的目标)

001.Java修饰符:

       ---> 修饰符用来定义类、方法、或者变量,通常放在语句最前端

       ---> 修饰符分为:

                                  访问修饰符、非访问修饰符

002.Java访问修饰符:

       ---> 访问修饰符也称访问控制符,是指能够控制类、成员变量、方法(也包含构造方法)使用权限的关键字

       ---> 访问修饰符用来限定外界(即调用者)对类、变量、方法的访问范围,主要包含四个访问修饰符

              00a.private  >>> 私有的,同一类可以访问

                                  >>> 修饰对象:变量、方法(可以修饰内部类)

                                                            被private修饰的成员(内部类、变量、方法)只能被其自身(即所属类)访问,对其他类是不可见的

                                   >>> 类(外部类)和接口不可以没声明为private

                                   >>> private主要是隐藏类的实现细节和保护类的数据

                                   >>> 声明为私有访问类型的变量只能通过类中公共的getter方法被外部类访问

               00b.default  >>> 默认访问修饰符(即不使用任何关键字就表示default),同一包内可以访问

                                   >>> 修饰对象:类、接口、变量、方法

                                   >>> default修饰的变量、方法,对同一包内的类可见(类的子类不可见),

                                   >>> 接口里的变量隐式的声明为 public static final,接口里的方法默认是访问权限为 public

               00c.protected  >>> 受保护的,对同一包内的类和所有子类可以访问

                                       >>> 修饰对象:变量、方法(不能修饰外部类和接口)

                                       >>> 子类和基类在同一包内:被protected修饰的变量、方法和构造器可以被同一个包中的任何其他类访问

                                               子类和基类不在同一包内:在子类中,子类实例可以访问其从基类继承而来的protected方法,而不能访问基类实例中的protected方法

                                       >>> 子类能访问protected修饰的方法、变量,这样可以避免不相关类使用这些方法和变量

                00d.public  >>> 公共的,对所有类可见,能够被任何其他类访问

                                   >>> 修饰对象:类、接口、方法、变量

                                   >>> 如果几个相互访问的public类分布在不同的包中,则需要导入相应public类所在的包,由于类的继承性,类的所有公共方法和变量都能被其他子类继承

003.Java非访问修饰符:

        ---> 一种类型限定符,用来限定变量的类型

        ---> 非访问限定符有以下几类:

              00a.static >>> 静态,用来修饰类方法、类变量(内部类推荐使用static,因为非静态内部类对外部类持有强引用)

                              >>> 静态变量:给变量前添加了static限定符

                                                       一般用于开放给外部类直接使用的变量,直接“类名.变量名”即可访问,无需事先实例化类的对象

                                                       static关键字用于表明独立于对象的静态变量,无论一个类实例化多少对象,它的静态变量只有一份copy,该静态变量在内存中的地址是固定的,类似于全局变量,每一次实例化对象,使用的静态变量仍然是程序初始化的那个静态变量

                                                        静态变量是伴随着类的加载而加载的,当类加载进内存的时候,静态变量就已经伴随着类的加载而加载进内存了,并且静态变量只在类加载的时候加载一次,存放在方法区的静态区中

                                                        全局变量也就是成员变量,是在创建对象的时候初始化的,所以只要创建对象就会初始化全局变量(成员变量),并存放在静态区

                               >>> 静态方法:给方法名前加了static限定符

                                                        一般用于开放给外部类直接使用的方法,直接“类名.变量名”即可访问直接“类名.方法名”即可访问,无需事先实例化类对象

                                                        静态方法中只能调用静态方法,不能调用非静态方法

                                                        静态方法中只能使用静态的类变量,不能使用非静态的类变量

                                                        静态方法中不能使用this、super,即使this后面跟静态类变量也不行

                               >>> 静态类:给类名前加了static限定符

                                                     一般用于开放给外部使用类中的内部类,这样就可以直接“外部类.内部类”访问一般用于开放给外部类直接使用的方法,

                               >>> 静态代码块:给“{}”前加static限定符(即static {})

                                                            是在类中独立于类成员的static代码块,它不在任何方法体内,它在类加载的时候执行且仅执行一次这些静态代码块

                                                            一般用于在使用JNI接口的地方,需要事先调用System.loadLibrary来加载so动态库,或者在类加载时就需要执行的方法或者需要对成员变量进行无条件初始化时使用

              00b.final  >>> 最终、固定不变的,用来修饰类、方法、变量(常见于变量)

                             >>> final变量:给变量前加final

                                                     final变量一般用于不希望变量值变更的场合,防止变量值修改产生不可预料的结果

                                                     final变量被显式地初始化且只能初始化一次,被final修饰的对象的引用不能指向不同的对象,但是,final修饰的对象里的数据可以修改,也就是说final对象的引用不可改变,但是里面的值可以改变(如,一个point点对象,它的x,y值可以变化)

                                                     final修饰符通常和static一起使用来创建类的常量

                             >>>  final方法:给方法前加final

                                                      类中的final方法可以被子类继承,但是不可修改

                                                       声明为final的方法主要是防止该方法被修改        

                              >>> final类:给类前加final(通常见于系统源码)

                                                  final类不能被继承,不可修改,是一个最终形态

                              >>> 一个特例:匿名内部类的局部变量

                                                       因为匿名内部类在编译的时于方法是平级的,所以不能调用方法的变量,只能调用类的变量;但是一个匿名内部类非要调用方法的变量,就需要声明该方法的变量为final类型,即把改变量当作一个常量来用

              00b.synchronized和volatile  >>> 线程相关的修饰符

                                                            >>>  synchronized 声明的方法同一时间只能被一个线程访问,常见于单例模式

                                                            >>>  volatile 修饰的成员变量在每次被线程访问时,都强制从共享内存中重新读取该成员变量的值,而且,当成员变量发生变化时,会强制线程将变化的值回写到共享内存,这样就可以保证在任何时刻,两个不同的线程总是看到某个成员变量的同一个值

 003.总结及注意:

                            java静态对象的数据在全局是唯一的,一处改即全改,在内存空间上是固定的,会优先分别静态对象空间,非静态对象反之;

                            java静态变量初始化无法被阻止,它在被构造器调用之前就已经初始化了,在类的内部变量定义的顺序决定了初始化的顺序,变量定义散布于各个地方,仍然会在任何方法(包括构造方法)调用之前被初始化

                             final变量初始化有三种方式(1.在声明final变量的时候 ;    2.在类的构造函数中 ;     3.在静态代码块中)

                             >>> 访问控制符和继承一些需要注意的地方:

                                     1). 父类中声明为public的方法在子类中也必须声明为public;父类中声明为protected的方法在子类中要么声明为protected要么声明为public,不可为private;父类中默认修饰符声明的方法在子类中可以声明为private;父类中声明为private的方法不可被继承

                                     2). 子类继承父类初始化顺序为    >>> 在实例化子类是时,会首先执行父类的初始化代码块(先静态),实例变量的初始化

                                                                                         >>> 执行父类的构造函数

                                                                                         >>> 子类的初始化代码块

                                                                                         >>> 子类的构造函数

                                     4). 如果类还没有被加载,那么子类通过类名加点的方式调用对象的时候,首先会执行父类的静态代码块和静态变量,顺序就是他们的出现顺序,然后再执行子类静态代码块和静态变量

                                     5).如果类已经被加载过了,那么静态代码块和静态变量就不会再次被执行,再创建对象的时候只会执行与实例相关的变量初始化和构造函数


              Last:欢迎指正、交流

                        参考链接:--- 参考文献直通车 ---

                                          --- 参考文献直通车 ---

                                        《JAVA思想编程第四版》

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343