入门Java编程的知识点—>静态方法(day11)

news2024/9/20 15:04:59
  • 重点掌握final关键字特点?final的语法使用?
  • 重点掌握静态变量是什么?静态变量的语法与使用?了解方法区内存图执行过程?
  • 重点掌握静态方法是什么?静态方法的语法特点与使用?
  • 重点掌握常量语法如何定义与使用?

final(最终)

final可以用于修饰类,方法,属性。

  1. 修饰属性:用final修饰的属性,不可二次修改,且修饰成员变量,需要初始化赋值!

  2. 修饰方法:用final修饰的方法,不能够被子类重写!(存在继承的父级代码中!)

  3. 修饰类: 用final修饰的类,该类不能够被继承!

package oo.day03;

/**
 * final的使用演示类:
 */
public class FinalDemo {
    private final int a = 100;//final修饰的成员变量 需初始化赋值
    void show(){
//        a = 200; final修饰的变量不可二次修改!
    }
}
final class  Aoo{ //final修饰的类
    final void show(){ // final修饰的方法
    }
}
class  Boo /*extends Aoo*/ {//不能够继承final修饰的类。
//    @Override
//   public void show() { 不能重写final修饰的方法!
//
//    }
}

思考

每个学生手里拿的杯子,都是当前对象的,属于个人的。

饮水机只有一台不属于对象!但是可以被对象共享!----生活中静态的概念

1. static (静态)

静态变量适用性:当有一份数据,需要被多个对象使用,我们可以做成静态变量。

成员变量分为两种:

  1. 实例变量(成员变量):属于对象的!(有多少个对象就有多少份数据),在堆中存储。
  • 通过对象打点来进行访问。
  1. 静态变量: 属于类的(只有一份)!,在方法区中存储。
  • 通过类名打点进行访问。
  1. 静态变量就是用static修饰的变量,称之为静态变量。

一个类对应的.class字节码,会在当前类被首次使用时,加载到方法区中,且只会被加载一次。

JVM分配空间:栈区,堆区,方法区。 1.栈区放局部变量 2.堆区放对象 3.方法区:用来加载.class字节码文件(类中的方法(构造方法,普通方法,静态方法)/静态变量)

    
package oo.day03;
/**
 * 静态变量的使用演示类:
 */
public class StaticDemo {
    public static void main(String[] args) {
        Coo c1 = new Coo();//创建一个Coo对象
        c1.show(); // a 1  b 1
        Coo c2 = new Coo();//创建一个Coo对象
        c2.show(); // a 1  b 2
        Coo c3 = new Coo();//创建一个Coo对象
        c3.show(); // a 1  b 3
        System.out.println( Coo.b );//访问静态资源 通过类名的形式打点调用
        System.out.println( c3.a); //访问实例资源  通过对象的形式打点调用
    }
}
class Coo {
    public int a;// 实例变量 -----> 属于对象的----->      杯子
    public static int b;//静态变量 -----> 属于类的 ---->  饮水机
    Coo(){
        a++;
        b++;
    }
    void show() {
        System.out.println("实例变量a的数据为:" + a +"静态变量b的数据为" + b);
    }
}
2. 方法区内存图示:

3. 静态方法:

用static修饰的方法称之为静态方法。

  1. 静态方法属于类的,访问通过类名打点进行访问。

  2. 存储在方法区中。

  3. 静态的方法 没有 this传递 (不能有this 关键字),所以静态方法无法访问实例成员(普通方法,实例成员变量)

适用性:静态方法一般只会存在于工具类中,对于外部调用非常方便,无需创建对象即可使用。

package oo.day03;

/**
 * 静态变量的使用演示类:
 * 静态方法的使用演示类:
 */
public class StaticDemo {
    public static void main(String[] args) {
//        System.out.println( Coo.b );//访问静态资源 通过类名的形式打点调用
//        System.out.println( c3.a); //访问实例资源  通过对象的形式打点调用
        Coo.show2();//访问静态方法,通过类名点的形式
        //随机数的功能
        Math.random();
    }
}
class Coo {
    public int a;// 实例变量 -----> 属于对象的----->      杯子
    public static int b;//静态变量 -----> 属于类的 ---->  饮水机

    public void show() { //普通方法 (自定义方法)
        this.a = 1; //访问实例变量  ----->隐式 this写法
        Coo.b = 2;//访问静态变量        ----->隐式 类名打点写法
    }
    public static void show2() { //静态方法 ---->现象是没有隐式this传递
//        this.a = 1; // 没有隐式 this传递
//         show();  无法访问 实例成员变量 /普通方法
        b = 2;//静态方法可以访问静态成员(静态变量/静态方法)。
    }
}

常量:

用static final 修饰的变量则是常量。常量结合了static 和final的特性。

特性:可以通过类名方式访问,不能二次修改,声明时需要初始化。

  1. 常量命名要求纯大写。多个单词之间用下划线隔开。

  2. 常量的适用性:当一份数据,确定下来以后,几乎不会改变,那么也不能被修改,我们可以声明为常量

1.方便使用 2.数据的稳定性。

package oo.day03;

/**
 * 常量的使用演示类:
 */

public class StaticFinalDemo {
    public static void main(String[] args) {
        //1.先将Eoo.class字节码文件加载到方法区中
        //2.打印输出当前 a的值
        System.out.println( Eoo.a); //访问静态变量
//        Eoo e = new Eoo();
//        e.b = 1000; 不可二次修改  可以直接用。
        
        //在编译期间,本质上就将C这个常量中的数值转换为具体的数据!
//        System.out.println(200);
        System.out.println(Eoo.C); // 访问常量
    }
}

class Eoo {
    public static int a = 2000;//静态变量
    public final  int b = 100;//用final修饰的变量  不可二次修改
    public static final int C = 200; //常量     属于类的,通过类名来访问。

    static {
        System.out.println("Eoo这个类的静态代码块执行了....");
    }

}
1. 扩充(时间允许情况下的内容):
① package(包)

作用:避免类名冲突,同包中不允许存在同名文件。

包名:纯小写,工作包规范:域名反写.项目名称.模块名称.类名

类的全包名:包名.类名

package day01;
class HelloWorld{ //类的全包名: day01.HelloWorld
}
② import(导入)

适用性:当前类需要用到某些功能时,而这些功能不再当前类的同包中,则需要通过import导入要使用的功能类的全包名即可。

快捷导入功能的全包名:alt + Enter + Enter

  • 如果使用的类在当前类的同包下,直接访问即可!

2. 访问修饰符

控制代码的可见范围,目的保护程序的合法性,安全性,健壮性。

迪米特原则:"不要和陌生人说话",类的成员能私有尽量私有!

属性的封装: 属性私有化,方法公开化. 对外可以获取的权限,可以设置的权限 具体看需要

public : 公开, 当前类/ 同包类 / 子类 /非同包类

protected:保护 , 当前类/同包类/子类

默认的(不写) : 当前类/同包类

private: 私有 当前类

class Card{ //卡类
    private int CardPwd;//卡密码
    private int balance;//账户余额 
    
    public void checkCardPwd(int pwd){
        if(pwd == CardPwd){
            System.out.println("密码正确,授权成功..可以进入操作业务"); 	
        }else{
            System.out.println("密码输入错误还剩..."); 	
        }
    }
    
    public void setBalance(int money){
        if(money > 0){
            balance += money;
        }
    }
   
    public int getBalance(){ //可以供外部获取该余额的方法
        return balance;
    }  
    
}
① 当前类/同包类测试:
package oo.test01;

/**
 * 访问修饰符测试:
 * public   : 当前类/同包类/子类/非同包类
 * protected: 当前类/同包类/子类
 * 默认的    : 当前类/同包类
 * private  : 当前类
 */
public class Aoo {
    public int a; //公开
    protected int b;//保护
    int c;//默认
    private int d;//私有的
    void test() {
        a = 1;//当前类可见
        b = 2;//当前类可见
        c = 3;//当前类可见
        d = 4;//当前类可见
    }
}
class Boo{ //同包类
    void test(){
        Aoo aoo = new Aoo();
        aoo.a = 1;//同包类可见
        aoo.b = 2;//同包类可见
        aoo.c = 3;//同包类可见
//        aoo.d = 4;//私有成员同包类不可见
    }
}
② test02
package oo.test02;

import oo.test01.Aoo;
public class Coo {
    void test(){
        Aoo aoo = new Aoo();
        aoo.a = 1; //公开的非同包可访问
//        aoo.b = 2; 保护的 非同包类不可访问
//        aoo.c = 3; 默认的 非同包类不可访问
//        aoo.d = 4; 私有的 非同包类不可访问
    }
}

class Doo extends Aoo{
    void test(){
        a = 1;//非同包子类 可以访问 公开权限
        b = 2;//非同包子类 可以访问 保护权限
//        c = 3;非同包子类 不可访问 默认权限
//        d = 4;非同包子类 不可访问 私有权限
    }
}

上篇文章:入门Java编程的知识点—>重写(day10)-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/Z0412_J0103/article/details/141464855下篇文章: 入门Java编程的知识点—>API(day12)-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/Z0412_J0103/article/details/141550951

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2095626.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IT运维问题深度剖析与一体化解决方案探索

在当今信息化高速发展的时代,IT运维作为保障企业业务连续性和稳定性的关键环节,其重要性日益凸显。然而,随着企业规模的扩大和业务的复杂化,IT运维面临着诸多挑战和问题。本文旨在深度剖析当前IT运维中的紧迫性问题与需求&#xf…

C++学习, 指针的指针

指针的指针: 是一种间接寻址的形式,指针的指针就是将指针的地址存放在另一个指针里面。一般,指针包含一个变量的地址,当定义一个指向指针的指针时,第一个指针包含了第二个指针的地址,第二个指针指向实际值…

day35-测试之性能测试JMeter的测试报告、并发数计算和性能监控

目录 一、JMeter的测试报告 1.1.聚合报告 1.2.html报告 二、JMeter的并发数计算 2.1.性能测试时的TPS,大都是根据用户真实的业务数据(运营数据)来计算的 2.2.运营数据 2.3.普通计算方法 2.4.二八原则计算方法 2.5.计算稳定性测试并发量 2.6…

Java性能优化传奇之旅--Java万亿级性能优化之Java 性能优化传奇:热门技术点亮高效之路

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的博客,正是这样一个温暖美好的所在。在这里,你们不仅能够收获既富有趣味又极为实…

MOELoRA —— 多任务医学应用中的参数高效微调方法

人工智能咨询培训老师叶梓 转载标明出处 在医疗场景中,LLMs可以应用于多种不同的任务,如医生推荐、诊断预测、药物推荐、医学实体识别、临床报告生成等。这些任务的输入和输出差异很大,给统一模型的微调带来了挑战。而且LLMs的参数众多&…

Nginx 维护与应用:最佳实践

文章目录 引言安装与基础维护macOS 上安装 NginxUbuntu 上安装 NginxCentOS 上安装 NginxWindows 上安装 Nginx查看 Nginx 运行状态与日志信息(Linux)版本升级与配置备份(Linux) Nginx 应用场景Web 服务器反向代理动静分离负载均衡…

“线程池中线程异常后:销毁还是复用?”

目录 一、验证execute提交线程池中 测试 结论 二、验证submit提交线程池中 测试 结论 三、源码解析 查看submit方法的执行逻辑 查看execute方法的执行逻辑 为什么submit方法,没有创建新的线程,而是继续复用原线程? 四、总结 需要说…

Android AOSP定制默认输入法为讯飞输入法

Android AOSP定制默认输入法为讯飞输入法 前言: ​ 最近在公司的项目中发现默认的输入法非常不好用,而且默认输入法中英文切换非常麻烦,被用户吐槽定制的AOSP镜像体验不好,于是查找资料,研究了一番,尝试了…

【C++】日期类函数(时间计数器)从无到有实现

欢迎来到HarperLee的学习笔记&#xff01; 博主主页传送门&#xff1a;HarperLee的博客主页 个人语录&#xff1a;他强任他强&#xff0c;清风拂山岗&#xff01; 一、前期准备 1.1 检查构造的日期是否合法 bool Date::CheckDate() {if (_month < 1 || _month > 12|| _d…

vercel免费在线部署TodoList网页应用

参考&#xff1a; TodoList网页应用&#xff1a;https://blog.csdn.net/weixin_42357472/article/details/140909096 1、项目首先上传github 直接vscode自带的上传项目&#xff0c;commit后在创建项目上传即可 2、vercel部署项目 1&#xff09;先注册 2&#xff09;impor…

基于PHP评论区的存储型XSS漏洞

评论区的XSS漏洞是指攻击者在评论区输入恶意脚本&#xff0c;当其他用户浏览该页面时&#xff0c;这些恶意脚本会被执行&#xff0c;从而造成安全威胁。这种漏洞通常出现在网站没有对用户输入进行充分过滤和转义的情况下&#xff0c;为存储型XSS。存储型XSS攻击是指攻击者在目标…

【MCAL】TC397+EB-tresos之SPI配置实战 - (同步/异步)

本篇文章首先从理论讲起&#xff0c;从AUTOSAR规范以及MCAL手册两个不同角度&#xff08;前者偏理论&#xff0c;后者偏实践&#xff09;介绍了SPI模块的背景概念与理论&#xff0c;帮助读者在实际配置之前能有个理论的框架。然后详细的介绍了在TC397平台使用EB tresos对SPI驱动…

数智化粮仓综合监控管理系统设计方案WORD-2023

关注智慧方案文库&#xff0c;学习9000多份智慧城市智慧医院&#xff0c;智慧水利&#xff0c;智能制造&#xff0c;数字化转型&#xff0c;智慧工厂&#xff0c;智慧矿山&#xff0c;智慧交通&#xff0c;智慧粮仓&#xff0c;工业互联网&#xff0c;数字孪生......持续更新热…

SpringCloud Alibaba】(十三)学习 RocketMQ 消息队列

目录 1、MQ 使用场景与选型对比1.1、MQ 的使用场景1.2、引入 MQ 后的注意事项1.3、MQ 选型对比 2、下载、安装 RocketMQ 及 RocketMQ 控制台2.1、下载安装 RocketMQ2.2、测试 RocketMQ 环境2.3、RocketMQ 控制台【图形化管理控制台】2.3.1、下载、安装2.3.2、验证 RocketMQ 控制…

【困难】 猿人学web第一届 第14题 备而后动-勿使有变

调试干扰 进入题目 打开开发者工具会进入一个无限 debugger; 向上查看堆栈&#xff0c;可以找到生成 debugger 的代码段 手动解混淆后可以知道 debugger 生成的方式 (function () {// 函数内的代码是不需要的&#xff0c;因为里面的代码不会执行 }[constructor](debugger)[call…

Java并发编程面试必备:如何创建线程池、线程池拒绝策略

一、线程池 1. 线程池使用 1.1 如何配置线程池大小 如何配置线程池大小要看业务系统执行的任务更多的是计算密集型任务&#xff0c;还是I/O密集型任务。大家可以从这两个方面来回答面试官。 &#xff08;1&#xff09;如果是计算密集型任务&#xff0c;通常情况下&#xff…

模型 ACT心理灵活六边形

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。接纳现实&#xff0c;灵活行动&#xff0c;追求价值。 1 ACT心理灵活六边形的应用 1.1 应对工作压力 背景&#xff1a; 在高压的工作环境中&#xff0c;员工经常面临巨大的工作压力&#xff0c;这可…

在VScode中使用Git将本地已有文件夹提交到Github仓库以便于使用版本控制进行项目开发

前置软件 VScode、Git。 Linux系统中安装Git工具请自行百度。可以通过git --version查看对应Git版本号。 Github创建空白仓库 一定要注意创建空白仓库&#xff0c;不要包含任何文件&#xff0c;包括Readme.md文件也不能有。 上面的仓库名&#xff08;Repository name&#xff…

Kaggle克隆github项目+文件操作+Kaggle常见操作问题解决方案——一文搞定,以openpose姿态估计项目为例

文章目录 前言一、Kaggle克隆仓库1、克隆项目2、查看目录 二、安装依赖三、文件的上传、复制、转移操作1.上传.pth文件到input目录2、将权重文件从input目录转移到工作目录 三、修改工作目录里的文件内容1、修改demo_camera.py内容 四、运行&#xff01; 前言 想跑一些深度学习…

【网络安全】条件竞争绕过电子邮件验证

未经许可,不得转载。 文章目录 正文正文 目标:xxx.com 使用电子邮件注册该网站并登录。接着,进入帐户设置,进入更改电子邮件功能: 请求包如下: 接着,发送两个相同的请求包到repeater,第一个中添加攻击者邮件: 第二个中添加正常的邮件: 创建组,以便能够同时发送两个…