一、访问修饰符

Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java 支持 4 种不同的访问权限。

1、default (即缺省,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。

2、private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)

3、public : 对所有类可见。使用对象:类、接口、变量、方法

4、protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)

  • 基类的 protected 成员是包内可见的,并且对子类可见;
  • 若子类与基类不在同一包中,那么在子类中,子类实例可以访问其从基类继承而来的protected方法,而不能访问基类实例的protected方法。

二、非访问修饰符

1、static:修饰符,用来创建类方法和类变量。

静态变量:static关键字用来声明独立于对象的静态变量。

(1)无论一个类实例化多少对象,它的静态变量只有一份拷贝。

(2)局部变量不能被声明为static。 

静态方法:Static关键字用来声明独立于对象的静态方法。

(1)静态方法不能使用类的非静态变量。

public class VisitNot {
// 声明静态变量
public static String str = "喵帕斯";
public int a = 0; // 声明静态方法
public static String printStr() {
// 局部变量不能被声明为static,会报错
// static String localv = "10"; // 静态方法可以使用静态变量
str = "(" + str + ")"; // 静态方法不可以使用非静态变量,会报错
// System.out.println(a);
return str;
} public static void main(String[] args) {
// 访问静态变量 类.变量名
System.out.println(VisitNot.str);
// 访问静态方法 类.方法名
System.out.println(VisitNot.printStr());
}
}

注意:对类(静态)变量和方法的访问可以直接使用classname.variablename和classname.methodname的方式访问。

2、final:修饰符,用来修饰类、方法和变量。

(1)final变量能被显式地初始化并且只能初始化一次。

(2)修饰的变量为常量,不可修改。

(3)final对象的引用不能改变。

(4)类中的final方法可以被子类继承,但是不能被子类重写,可被重载。

(5)final类不能被继承。

public class FinalTest {
// 声明final变量
public final int a = 0; // 声明的final变量引用了一个实例对象
public final B b = new B(); // 声明的final变量是不能被修改的,会报错
public int m() {
b = new B();
a += 100;
return a;
} // 声明final的方法可以重载
class B {
public final void m2() { }
public final void m2(int a) { }
} // 声明final的方法,不能被重写,会报错
class c extends B{
@Override
public final void m2() { }
} final class D{}
// 声明final的类,不能被继承
class E extends D{}
}

3、abstract:修饰符,用来创建抽象类和抽象方法。

(1)abstract如果用于修饰类,此类将不能被实例化;

(2)abstract如果用于修饰方法,那么此方法的类必须也要用abstract修饰;

(3)abstract修饰的类用于继承,子类必须实现里面abstract修饰的方法;

(4)用abstract修饰的类和方法,不能再使用 final、static来进行修饰;

(5)abstract类可存在非abstract的方法,但存在abstract方法的类,必须是abstract修饰的;

package test;

public class abstractTest {
public static void main(String[] args) {
System.out.println("abstractTest");
}
} // 这是一个abstract修饰的类
abstract class A { // abstract类里的abstract方法
public abstract void aM(); // abstract类里的普通方法
public void bM() {
int i = 0;
i++;
System.out.println(i);
}
} // 类B继承abstract类A
class B extends A { //必须实现abstract类A的abstract方法、否则报错
@Override
public void aM() {
System.out.println("abstract类A的abstract方法aM(),实现了!");
}
}

4、synchronized和volatile修饰符,主要用于线程的编程。

这个有点复杂,后面再看。

java基础之 修饰符的更多相关文章

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

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

  2. Java基础-访问修饰符

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

  3. JAVA基础_修饰符

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

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

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

  5. 4. java基础之修饰符

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

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

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

  7. Java中的 修饰符

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

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

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

  9. java访问权限修饰符

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

随机推荐

  1. 到底什么是.NET?

    ​.NET 概念比较庞大,本文只讨论基础知识,只用简单语言描述. 我们是NET程序员,但是我们有没有思考过到底什么是.NET ? 官方定义 .NET是微软推出来的一个致力于敏捷开发的软件框架. 大概2 ...

  2. Console对象与错误处理机制

    console的常见用途有两个. 调试程序,显示网页代码运行时的错误信息. 提供了一个命令行接口,用来与网页代码互动. console对象的浏览器实现,包含在浏览器自带的开发工具之中.按 F12 打开 ...

  3. Android数据存储之共享参数SharedPreferences

    SharedPreferences是Android的一个轻量级存储工具,采用的存储结构是Key-Value的键值对方式,类似于Java的Properties类,二者都是把Key-Value的键值对保存 ...

  4. react 中 函数bind 和箭头函数

    用bind形式 方便测试,含有this时候最好用bind形 其他情况用箭头函数 含有this的时候也可以用箭头函数

  5. 题解 AT3718 【[ABC081B] Shift only】

    题目传送门 分析 直接暴力. 我们可以根据题意进行模拟,使用二重循环即可. 代码讲解 定义变量\(n\)和计数数组\(cnt\),再定义数组\(a\)并输入. int a[1000000]; int ...

  6. vue中封装jsonp

    一.安装jsonp 二.封装

  7. Linux下安装python,mysql,redis

    linux 安装Python3 1.python下载 请在终端输入如下命令: cd /home wget http://cdn.npm.taobao.org/dist/python/3.6.5/Pyt ...

  8. 【转载】Cadence验证仿真工具IUS和IES

    本博客转自: cadence验证仿真工具IUS和IES | 骏的世界http://www.lujun.org.cn/?p=3714 cadence验证仿真工具IUS和IES cadence,有两大验证 ...

  9. 自动生成admin(后台)

    public --->>>>index.php 入口文件如下: // +---------------------------------------------------- ...

  10. laravel使用阿里云OSS上传图片

    需要自己注册阿里云账号并且开通oss服务,建立Bucket存储空间,此步骤不做演示 一.composer安装:使用composer在项目根目录执行以下命令 composer require johnl ...