关键字static与格式访问修饰符详解(代码解释版)

简介: 关键字static与格式访问修饰符详解(代码解释版)

前言

static是修饰类,属性,方法,让他们只有存在一份,随着类的加载而加载,被所有对象共享,优先于对象的存在;
Java中用来确定访问范围的叫做 格式访问修饰符,随范围大到小分别是public,protected,default,private,下面通过代码详细解释


一、Static

1.static是什么

static是用来修饰类(内部类),属性,方法的关键字,使得他们静态化也就是模板化,在内存中只存在一份,每一次修改都会影响下一次调用时的值改变

让他修饰的有以下几个特点

●随着类的加载而加载
●优先于对象存在
●修饰的成员被所有对象共享
●可以不创建对象,直接调用

1.用static修饰的内容-->代码演示

⑴用static修饰的成员变量的演示
赋值演示

这里写一个非静态的String类型,一个静态的String属性类型
```java
public class Static {
//静态修饰举例
String name;
static String country = "中国";

}

>在main方法里通过测试,更改上面的两个属性来演示

![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/0083f7be2e32404aab32f8b54f937a27.png)
这样就改变了p3这个对象里的name值,而当你直接通过类名调用时就会**报错**,如下
![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/ef9d655d82464f8cbbaa00092e0527aa.png)
报错原因是 (不能从静态上下文引用非静态的name)因为name还没有加载到内存空间里,还不能用

---
*更改静态属性演示*
>首先构造一个类

```java
public class Static {
    //静态修饰举例
    String name;                           //非静态
    static String country = "中国";        //静态

}

构造一个测试类

public class TestStatic{
   

    public static void main(String[] args) {
   
        //通过类名直接调用
        System.out.println(Static.country);//输出中国人
        //通过对象调用
        Static p1 = new Static();
        System.out.println(p1.country);//静态也可以通过创建对象来调用
        //通过对象来更改类中的静态属性
        p1.country = "中国人";
        Static p2 = new Static();
        System.out.println(p2.country);//输出中国人
        //通过类名调取后更改
        Static.country = "阿根廷";
        /*
             此时由于通过类名更改后,只有一份的country值改变
             成阿根廷 ,所以任何对象调用时候都是更改后的值
        */
        System.out.println(p2.country);//输出阿根廷

    }
}

⑵用static修饰的成员方法的演示
●static修饰的方法可以过类名直接调用
●static修饰的方法和不用static修饰的方法都可以通过创建对象调用

构造一个类

public class Static {
   
    //静态修饰举例
    String name;
    static String country = "中国";
    //静态方法调用静态
    public static void test(){
   
        System.out.println("国籍:"+country);
    }
    //非静态方法调用静态和非静态
    public void test1(){
   
        System.out.println("姓名 :"+name+"   国籍 :"+country);
    }
}

写一个测试类

public class TestStatic{
   

    public static void main(String[] args) {
   
        //通过类名调用静态方法
        Static.test();
        //通过对象可以调用非静态方法也可以调用静态方法
        Static p3 = new Static();
        p3.test1();//调用非静态
        p3.test();//调用静态
    }
}

⑶用static修饰内部类的演示
(注意:普通类是不能被static修饰,只有内部类才可以)
●被static修饰的内不类可以直接作为一个普通类来使用,不需要实例一个外部类使用

代码演示(先写一个静态内部类与非静态的内部类)

public class Test1 {
   
    //这是一个静态修饰的内部类
    public static class TestStatic{
   
        void inner(){
   
            System.out.println("---我是一个静态的内部类---");
        }
    }
    //这是一个非静态修饰的内部类
    public class TestNoStatic{
   
        void inner(){
   
            System.out.println("---我是一个非静态的内部类---");
        }
    }

测试类

public class Test {
   
    public static void main(String[] args) {
   

    /*
           调用静态内部类
           调用时不需要new一个Static对象,直接newTestStatic对象即可
     */
        Test1.TestStatic Static = new Test1.TestStatic();
        Static.inner();
    /*
            调用非静态内部类
            调用时必须先构造一个Static的对象sta,再通过sta.new构造一个内部对象
     */
                Test1 sta = new Test1();
                Test1.TestNoStatic noStatic = sta.new TestNoStatic();
    }
}

二、格式访问修饰符

1.public

public 用来修饰类,属性,方法,表明该变量或者方法是公共的,在任何类中都可以调用

2.protected

protected用来属性,方法,表明该变量或者方法是受保护的,在本包下的任何类,以及其他包中该类的子类可以调用(注意要创建子类对象调用)

2.default

default 用来修饰类,属性,方法,表明该变量或者方法是默认的,在本包下的任何类可以调用

4.private

>private 用来修饰属性,方法,表明该变量或者方法是私有化的,只能在本类中使用

5.用代码分别测试以上修饰符的访问权限

这里写一些访问修饰符修饰的属性,来逐个测试访问权限
```java
public class XShFu {
public int pub = 10;
protected int pro = 20;
int daf = 30;
private int pri = 40;
/
public 修饰 类,属性,方法 各个类都可以访问
protected 修饰 属性,方法 同包里访问,不同包的子类,通过创建子类对象来调用
default 修饰 类,属性,方法 同包不同类
private 修饰 属性.方法 本类
/

}
```

示例1

代码演示如下图
在这里插入图片描述
●由图知:同包不同类--->不能访问到private修饰的成员

示例2
在这里插入图片描述
●由上图可以知道不同包--->只能访问public的成员

示例3

在这里插入图片描述
●由上图知,不同包下的类,但是该类是继承了类xiushifu,所以xiushifu里的protected修饰的成员该类可以调用,而defaul与private修饰的成员不能访问

(注意:当要调用父类里的protected修饰的成员时,必须创建子类对象子类对象子类对象)

相关文章
|
SQL 缓存 安全
Android ORM 框架之 greenDAO
Android ORM 框架之 greenDAO
1149 0
|
7月前
|
IDE 开发工具
IntelliJ IDEA 安装 pmd-idea-1.9.0.zip 插件详细教程
PMD-IDEA 是基于 PMD 的 IntelliJ IDEA 代码检查插件,支持静态代码分析,帮助发现潜在问题。下载 zip 包后,通过 Settings → Plugins → Install from Disk 安装,重启 IDEA 即可使用。可右键文件或项目运行扫描,结果在底部面板展示,支持自定义规则与扫描范围,提升代码质量。
|
小程序
【04】微信支付商户申请下户到配置完整流程-微信开放平台移动APP应用通过-微信商户继续申请-微信开户函-视频声明-以及对公打款验证-申请+配置完整流程-优雅草卓伊凡
【04】微信支付商户申请下户到配置完整流程-微信开放平台移动APP应用通过-微信商户继续申请-微信开户函-视频声明-以及对公打款验证-申请+配置完整流程-优雅草卓伊凡
1123 1
【04】微信支付商户申请下户到配置完整流程-微信开放平台移动APP应用通过-微信商户继续申请-微信开户函-视频声明-以及对公打款验证-申请+配置完整流程-优雅草卓伊凡
|
安全 算法 小程序
【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
1070 28
【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
|
Android开发 开发者
 一键在线获取APP公钥、包名、签名及备案信息方法介绍
本文介绍了一款在线APP解析工具,可以一键获取APP的公钥、包名、签名等基础信息,同时提供了详细的操作步骤和使用示例,帮助开发者更便捷地进行APP备案信息的获取。
|
设计模式 关系型数据库 测试技术
进阶技巧:提高单元测试覆盖率与代码质量
【10月更文挑战第14天】随着软件复杂性的不断增加,确保代码质量的重要性日益凸显。单元测试作为软件开发过程中的一个重要环节,对于提高代码质量、减少bug以及加快开发速度都有着不可替代的作用。本文将探讨如何优化单元测试以达到更高的测试覆盖率,并确保代码质量。我们将从编写有效的测试用例策略入手,讨论如何避免常见的测试陷阱,使用mocking工具模拟依赖项,以及如何重构难以测试的代码。
698 4
|
Java 测试技术 数据库连接
@Before 和 @BeforeClass 注释的区别
【8月更文挑战第22天】
1213 0
|
监控 算法 Java
JVM 调优之 glibc 引发的内存泄露
Pmap 提供了进程的内存映射,pmap 命令用于显示一个或多个进程的内存状态。其报告进程的地址空间和内存状态信息
JVM 调优之 glibc 引发的内存泄露
|
SQL 数据挖掘 数据处理
SQL中有哪些常用的函数?
【7月更文挑战第27天】SQL中有哪些常用的函数?
414 4
springboot静态资源目录访问,及自定义静态资源路径,index页面的访问
本文介绍了Spring Boot中静态资源的访问位置、如何进行静态资源访问测试、自定义静态资源路径和静态资源请求映射,以及如何处理自定义静态资源映射对index页面访问的影响。提供了两种解决方案:取消自定义静态资源映射或编写Controller来截获index.html的请求并重定向。
springboot静态资源目录访问,及自定义静态资源路径,index页面的访问