一、访问修饰符

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. 使用resultMap实现高级结果映射

    使用resultMap实现高级结果映射 resultMap的属性: 1.属性 id:resultMap的唯一标识.type:resulMap的映射结果类型(一般为Java实体类).2.子节点 id:一 ...

  2. jquery-进度条

    function process_bar(s_date, e_date, data) { $('.modal-body').text('你选择的时期范围是:' + s_date + '到' + e_d ...

  3. c++并发编程之进程创建(给那些想知道细节的人)

    关于多进程创建,此处只讲解一个函数fork(). 1.进程创建 先上代码: #include"iostream" #include<unistd.h> //unix标准 ...

  4. 【Spring】事务(transactional)之初步理解

    一. 场景 有一个定时器,做数据库表数据同步. 把数据库A的表table(DB_A_TABLE)同步到数据库B的表table(DB_B_TABLE). 对于DB_A_TABLE的每行数据要做一定的逻辑 ...

  5. beautifulsoup4进阶学习笔记

    requests库是可以找到想要的东西,基本上几行代码就搞定,但是进一步把有用的内容提取出来变成自己想要的格式来方便后续进行数据分析 正则表达式提取的话,需要一些时间成本,这个可以每天积累一点. 这里 ...

  6. py 二级习题(重新输出文本-----每行一句话)

    #需要的一小段文本 txt = "人生得意须尽欢,莫使金樽空对月.天生我才必有用,千金散尽还复来." #对文本进行分割,转换成列表形式 def txt_split(txt): li ...

  7. 在CSS中,link里 的rel="stylesheet"是什么意思?

    rel是relationship的英文缩写,它描述了当前页面与href所指定文档的关系:stylesheet就是样式表的意思:CSS是 Cascading Style Sheet(级联样式表)的缩写 ...

  8. oracle建数据库

    oracle用户界面登陆 用户要切换到oracle sqlplus / as sysdba //sys用户是oracle的最高管理员所以要加上as help index //查看命令列表,sql中不区 ...

  9. [POI2010] GRA-The Minima Game - 贪心,dp,博弈论

    给出N个正整数,AB两个人轮流取数,A先取.每次可以取任意多个数,直到N个数都被取走.每次获得的得分为取的数中的最小值,A和B的策略都是尽可能使得自己的得分减去对手的得分更大.在这样的情况下,最终A的 ...

  10. 解决Maven依赖报红的批处理文件

    maven经常因为网络或者其他原因导致仓库jar包下载不完整,导致jar包依赖报红,此小工具可以一键删除未下载完成文件 set REPOSITORY_PATH=E:\deplor\apache-mav ...