修饰符:final 、static、public、protected、private、default。

一、final(不能修改)

使用final修饰变量定义:该变量一旦被初始化之后就不允许再被修改。

final修饰引用类型:一旦为其赋值,将不能够重新用来引用另一个对象,不过可以修改其引用对象的成员 变量。

final修饰成员变量:其值不能改变,必须进行初始化。

public class YourClassNameHere {
final String color; // 如果后面没有在构造函数中初始化,则错误。
final String color1 = "红色"; //正确,进行显示初始化
String color2 = "蓝色";
public YourClassNameHere(String color){
this.color = color;
}
public static void main(String[] args) {
String color = "黄色";
YourClassNameHere test = new YourClassNameHere(color);
System.out.println(test.color);
String color1 = "绿色";
YourClassNameHere test1 = new YourClassNameHere(color1);
System.out.println(test1.color);
System.out.println(test1.color1); // test1.color = "改变颜色"; //错误,不能修改final变量
test1.color2 = "改变颜色2";
System.out.println(test1.color2);
}
}

final修饰的局部变量:

final修饰局部变量可以只声明不初始化,但是被修饰的局部变量一旦被赋值后就不能进行修改了。如果在创建时没有对其赋值,那么在使用前还是可以对其赋值的。

final修饰的方法:

被修饰的方法能被该类的子类所继承,但不能重写,这样保护了父类某些特殊的数据。

//重写父类方法,但没有用final修饰
class bike
{
String color = "黄色"; public void getMes()
{
System.out.println("父类的成员变量color" + color);
}
}
public class test extends bike
{
String color = "绿色"; //重写父类方法
public void getMes()
{
System.out.println("子类的成员变量color" + color);
}
public static void main(String[] args)
{
test t = new test();
t.getMes(); }
}
//重写父类方法,用final修饰
class bike
{
String color = "黄色"; public final void getMes()
{
System.out.println("父类的成员变量color" + color);
}
}
public class test extends bike
{
String color = "绿色"; //不能重写父类方法
/*
public void getMes()
{
System.out.println("子类的成员变量color" + color);
}
*/
public static void main(String[] args)
{
test t = new test();
t.getMes(); }
}

final修饰类:说明该类不能有子类,即该类不能被继承,该类的成员变量在这里不起作用。

final修饰类里的方法默认被修饰为final。

二、static(只能存一份)

静态:在内存中只能有一份。

静态变量:只能存在一份,它属于类,不属于对象,不随着对象的创建而建立副本。如果不想在创建对象的时候就需要知道一些相关信息,那么就声明为static类型。

public class test
{
static String color = "绿色"; public test(String color)
{
this color += color;
} public static void main(String[] args)
{
test t1 = new test("黄色");
test t2 = new test("红色"); System.out.println(t1.color); // 绿色黄色红色
System.out.println(t2.color); //绿色黄色红色
System.out.println(color); //绿色黄色红色
}
}

静态变量的访问:

  •   类名.静态成员变量名称
  •   静态成员变量名称

三、静态常量 static final

静态常量:唯一的、不可变的、只存在一份的数据。系统不会分配默认值,必须初始化。

  • static:属于类,随着类的创建而创建。
  • final:值不能改变。
  • static和final没有先后之分。

四、public、private、default、protected

public:声明被它修饰的成员变量为公共类型,这个成员变量在任何包里都能访问,包括子类也能访问到。

private:除了本类外任何类都不能访问到这个成员变量,具有很好的保护性。

default:如果不给成员变量添加任何修饰符,就表示这个成员变量被修饰为default类型。在同一个包里的类或子类是能够访问的,相当于public类型。但是在不同包里的类或子类没有继承该成员变量,是访问不到它的。

  如果子类在另一个包里,而成员变量或方法没有添加修饰符,子类是访问不到的。

protected:在同一个包里和public类型是一样的,可访问到。如果在不同包里的protected类型的成员变量就只能通过子类来访问。子类可以访问父类protected权限的成员是指集成到子类中后在子类是可见的,而非子类内部建立一个父类的实例后该实例可以访问自身的protected成员。

五、abstract抽象

与final含义完全相反。抽象类里最少要含有一个抽象方法,让子类去实现这个抽象方法

java基础(14)---修饰符的更多相关文章

  1. java基础之修饰符和内部类

    1.java修饰符 /* 修饰符: 权限修饰符:private,默认的,protected,public 状态修饰符:static,final 抽象修饰符:abstract 类: 权限修饰符:默认修饰 ...

  2. Java基础-访问修饰符

    访问修饰符 default (即缺省,什么也不写): 在同一包内可见,不使用任何修饰符.使用对象:类.接口.变量.方法. private : 在同一类内可见.使用对象:变量.方法. 注意:不能修饰类( ...

  3. JAVA基础_修饰符

    引言:Java的修饰符根据修饰的对象不同,分为类修饰符.方法修饰符.变量修饰符,其中每种修饰符又分为访问控制修饰符和非访问控制修饰符.访问控制存在的原因:a.让客户端程序员无法触及他们不应该触及的部分 ...

  4. java基础之 修饰符

    一.访问修饰符 Java中,可以使用访问控制符来保护对类.变量.方法和构造方法的访问.Java 支持 4 种不同的访问权限. 1.default (即缺省,什么也不写): 在同一包内可见,不使用任何修 ...

  5. Java 基础 面向对象修饰符和自定义数据类型

    不同修饰符使用细节 常用来修饰类.方法.变量的修饰符如下: public 权限修饰符,公共访问, 类,方法,成员变量 protected 权限修饰符,受保护访问, 方法,成员变量 默认什么也不写 也是 ...

  6. 4. java基础之修饰符

    其他修饰符 public 可以修饰属性.方法.构造方法.类 protected 可以修饰属性.方法.构造方法 default 可以修饰属性.方法.构造方法.类 private 可以修饰属性.方法.构造 ...

  7. java中的修饰符和基本数据类型

    1.java中的修饰符 java中的修饰符主要是用来对类资源进行一个权限控制,上面表格表现的很清晰,无需多言. 2.java中的基本数据类型 java中的数据类型分为引用类型和基本类型.基本数据类型有 ...

  8. Java中的 修饰符

    java中的修饰符分为类修饰符,字段修饰符,方法修饰符. 根据功能的不同,主要分为以下几种. 1.权限访问修饰符  访问权限的控制常被称为具体实现的隐藏 把数据和方法包进类中,以及具体实现的隐藏,常共 ...

  9. 深入理解Java的protected修饰符

    其实Java的protected修饰符,权限定义的很微妙,大致有以下几种: (1)protected控制符用于修饰方法和成员变量: (2)一个类的protected方法或成员变量,在包外是不能通过该类 ...

  10. java访问权限修饰符

    作用域 当前类 同一package 子孙类 其他package public √ √ √ √ protected √ √ √ × friendly √ √ × × private √ × × × ja ...

随机推荐

  1. Tensorflow不同版本要求与CUDA及CUDNN版本对应关系

    参考官网地址: Windows端:https://tensorflow.google.cn/install/source_windows CPUVersion Python version Compi ...

  2. 二级C语言模拟试题(第1套)

    1. 选择题. 1-1,判断各种变量所占的字节数. #include<stdio.h> int main() { char p[] = {'6','2','3'}, *q = p; int ...

  3. python综合作业要求

    要求: 1.课程成绩数据(学号尾数为0,1同学完成) 至少要完成内容:分析每年不同班级平均成绩情况.不同年份总体平均成绩情况.不同性别学生成绩情况,并用一定图表展示. 2.集美大学各省录取分数数据(学 ...

  4. [转帖]很遗憾,没有一篇文章能讲清楚ZooKeeper

    很遗憾,没有一篇文章能讲清楚ZooKeeper https://os.51cto.com/art/201911/606571.htm [51CTO.com原创稿件]互联网时代是信息爆发的时代,信息的高 ...

  5. Java多线程编程(1)--Java中的线程

    一.程序.进程和线程   程序是一组指令的有序集合,也可以将其通俗地理解为若干行代码.它本身没有任何运行的含义,它只是一个静态的实体,它可能只是一个单纯的文本文件,也有可能是经过编译之后生成的可执行文 ...

  6. day14——装饰器

    day14 装饰器 装饰器本质就是闭包 开放封闭原则: 扩展是开放的(增加新功能),对源码是封闭的(修改已经实现的功能) 装饰器:用来装饰的工具 作用:在不改变源代码及调用方式的基础下额外增加新的功能 ...

  7. golang之defer

    概述 对于资源释放,有很多不同的实现方式,不同语言也有不同的惯用方法. C语言 :手动管理 Golang :defer Python :上下文管理器contexManager C++ : 作用域和析构 ...

  8. .net 生成非托管代码

    最近在一个老外的程序中看到一段代码,其中使用了System.Runtime.InteropServices.MarshalAs方法进行托管代码与非托管代码之间封装数据,感觉很新颖.特意记录下来,供大家 ...

  9. js 不同浏览器的类型判断 navigator.userAgent

    一.通过navigator.userAgent来进行浏览器类型判断 // 判断浏览器内核.手机系统等,使用 browser.userAgent.mobile var browser = { userA ...

  10. HTML5中的lang属性,zh-CN还是zh-Hans?

    一.资源 先提供资源.如果我弄错了什么,请以这些文档为准: W3C文档.IANA已登记的子标签.BCP 47.RFC 5646. 二.格式简介 先上一张图片: 一个Language Tags,由①到⑦ ...