Java筑基(三)

news2024/11/15 11:28:01

在这里插入图片描述


Java筑基(三)

  • 一、final概念
    • 1、案例1:采用继承:
    • 2、案例2:final修饰的类不可以被继承:
    • 3、案例3:final修饰的类不能有子类,但是可以有父类
    • 4、final修饰构造方法
    • 5、final修饰普通方法
    • 6、final修饰变量
      • 6.1、一般成员变量
      • 6.2、静态成员变量
      • 6.3、形参
      • 6.4、局部变量
  • 二、访问权限修饰符
    • 1、本类中都可以访问
    • 2、同一个包中private不支持访问
    • 3、同一个包中的子类private不支持访问
    • 4、不同包子类
    • 5、不同包无关类
  • 三、静态变量static
  • 四、静态方法static

一、final概念

类:不可以继承
方法:不可被子类覆盖
变量:不可被重新赋值

final修饰的类不可以被继承。
final修饰的类不能有子类,但是可以有父类。

1、案例1:采用继承:

父类

public class Animal {
    public void sleep(){
        System.out.println("Dog ... sleep方法");
    }
}

子类

public class Dog extends Animal {
    public void sleep(){
        System.out.println("Dog...sleep方法");
    }
}

实例化子类

public class FinalTest {
    public static void main(String[] args) {
        Dog d=new Dog();
        d.sleep();
    }
}

输出结果:

Dog...sleep方法

2、案例2:final修饰的类不可以被继承:

public final class Animal {
    public void sleep(){
        System.out.println("Dog ... sleep方法");
    }
}
public class Dog extends Animal {
    public void sleep(){
        System.out.println("Dog...sleep方法");
    }
}

package com.company.finalp;

public class FinalTest {
    public static void main(String[] args) {
        Dog d=new Dog();
        d.sleep();
    }
}

产生报错
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、案例3:final修饰的类不能有子类,但是可以有父类

子类

package com.company.finalp;

public final class Animal extends One {
    public void sleep(){
        System.out.println("Dog ... sleep方法");
    }
}

父类

package com.company.finalp;

public class One {
    public void eat(){
        System.out.println("eat...");
    }
}

public class FinalTest {
    public static void main(String[] args) {
        Animal a = new Animal();
        a.eat();
    }
}

执行结果:

eat...

4、final修饰构造方法

final修饰构造方法会直接报错
final不能修饰构造方法

在这里插入图片描述

5、final修饰普通方法

public class Animal extends One {
    public void sleep(){
        System.out.println("Dog ... sleep方法");
    }

    public final void play(){
        System.out.println("animal   play...");
    }
}
public class Dog extends Animal {
    public void sleep(){
        System.out.println("Dog...sleep方法");
    }
}
public class FinalTest {
    public static void main(String[] args) {
        Dog d=new Dog();
        d.sleep();
        d.play();
    }
}
Dog...sleep方法

animal   play...

方法不想被重新实现,写的时候什么样,最后不管谁继承都是什么样,那就final修饰。
在这里插入图片描述

6、final修饰变量

修饰的变量是一个常量,只能被赋值一次。
可修饰的变量:

  • 一般成员变量
  • 静态成员变量
  • 形参
  • 局部变量

6.1、一般成员变量

直接赋值显示初始化
构造方法赋值初始化

public /*final*/ class Animal extends One {
    //一般成员变量
    //方法1
    private String name="kobe";
    private int sex=1;
	
	//方法2
    public Animal(String name,int sex){
        name="kobe";
        sex=1;
    }

6.2、静态成员变量

直接赋值显示初始化
在static代码块赋值进行初始化

package com.company.finalp;

public /*final*/ class Animal extends One {

    static final int MAX_AGE = 60;

    static final int MIN_AGE;

    static {
        MIN_AGE=1;
    }

}

package com.company.finalp;

public class FinalTest {
    public static void main(String[] args) {
        System.out.println(Animal.MAX_AGE);
        System.out.println(Animal.MIN_AGE);
    }
}

输出结果

60
1

6.3、形参

调用方法时,给形参赋值

package com.company.finalp;

public /*final*/ class Animal extends One {

    public void sleep(int time){
        System.out.println("睡觉"+time+"小时");
    }

}

package com.company.finalp;

public class FinalTest {
    public static void main(String[] args) {
        Animal a =new Animal();
        a.sleep(6);
    }
}
睡觉6小时

在这里插入图片描述

6.4、局部变量

直接赋值显示初始化
调用时赋值

在这里插入图片描述

二、访问权限修饰符

/**
 *              本类    本包    同包子类    不同包子类    不同包无关类
 * private       y
 * 默认           y       y       y
 * protected     y       y       y          y
 * public        y       y       y          y           y
 */

1、本类中都可以访问

私有方法、默认方法、受保护的方法、公共方法都可以被访问

public class Father {
    private void show1(){
        System.out.println("private show1");
    }

    void show2(){
        System.out.println("默认 show2");
    }
    protected void show3(){
        System.out.println("protected show3");

    }
    public void show4(){
        System.out.println("public show4");
    }

    public static void main(String[] args) {
        Father f=new Father();
        //私有化
        f.show1();
        f.show2();
        f.show3();
        f.show4();
    }
}

2、同一个包中private不支持访问

在这里插入图片描述

3、同一个包中的子类private不支持访问

在这里插入图片描述

4、不同包子类

受保护的方法、公共方法可以被访问
在这里插入图片描述

5、不同包无关类

公共方法可以被访问

在这里插入图片描述

三、静态变量static

作用:

  • java中的static可以修饰类的成员
    • static既可以修饰对应类里面的成员变量,也可以修饰类里面的方法。
  • 被修饰的内容就不再属于这个对象了。而是属于这个类
    • static修饰的成员变量叫静态变量,也叫类变量。
    • static修饰的方法叫静态方法,也叫类方法。

无论有多少个对象,对应静态变量的属性值在内存空间中只存在一份。
静态变量存放在方法区
调用方式:类名.静态变量名
特点:

  • 让一个类的所有实例都共享数据。
  • 变量值存储在一个公共的内存地址。

static修饰的静态变量,被所有的实例变量都共享

package com.company.staticp;

public class TestEnginer {
    //属性名
    //名字
    private String name;
    //工作内容
    private String work;
    //部门
    // static修饰的静态变量,被所有的实例变量都共享
    static String department;

    public void selfsay(){
        System.out.println("我是"+department+"部门"+getWork());
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getWork() {
        return work;
    }

    public void setWork(String work) {
        this.work = work;
    }

}

静态变量 变量值存在一个公共地址:方法区内,同一个类的所有的实例都可以去访问

public class TestEngineDemo {
    public static void main(String[] args) {
        TestEnginer testenger= new TestEnginer();
        testenger.setName("kobe");
        testenger.setWork("java测开");
        TestEnginer.department="测试";

        //类名.变量名
        //静态变量 变量值存在一个公共地址:方法区内,同一个类的所有的实例都可以去访问

        TestEnginer testenger1= new TestEnginer();
        testenger1.setName("curry");
        testenger1.setWork("python测开");

        testenger.selfsay();
        testenger1.selfsay();
    }
}

注意:
随意修改static修饰的属性有风险,一般为了避免风险:final和static配合使用,即把静态变量变为常量

final + static 常量;常量变量名全部大写

package com.company.staticp;

public class TestEnginer {
    //属性名
    //名字
    private String name;
    //工作内容
    private String work;
    //部门
    // static修饰的静态变量,被所有的实例变量都共享
    // public static String department = "质量高级控制";

    // final + static  常量
    // 常量变量名全部大写
    public final static String DEPARTMENT = "质量高级控制";

    public void selfsay(){
        System.out.println("我是"+DEPARTMENT+"部门"+getWork());
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getWork() {
        return work;
    }

    public void setWork(String work) {
        this.work = work;
    }

}

实例对象无法调用静态变量

public class TestEngineDemo {
    public static void main(String[] args) {
        TestEnginer testenger= new TestEnginer();
        testenger.setName("kobe");
        testenger.setWork("java测开");

        //类名.变量名
        //静态变量 变量值存在一个公共地址:方法区内,同一个类的所有的实例都可以去访问

        TestEnginer testenger1= new TestEnginer();
        testenger1.setName("curry");
        testenger1.setWork("python测开");

        testenger.selfsay();
        testenger1.selfsay();
    }
}

输出结果

我是质量高级控制部门java测开
我是质量高级控制部门python测开

四、静态方法static

调用方式:类名.静态方法名(参数)
特点:

  • 类不能调实例方法或者访问实例变量,因为静态方法中没有this关键字。
  • 类可以调用静态方法及访问静态变量。
package com.company.staticp;

public class ReverseList {
    int num1=15;
    static int num2=25;


    public void show(){
        System.out.println(num1);
        System.out.println(num2);
    }

    public static void show1(){
        System.out.println(num2);
    }
}
package com.company.staticp;

public class ReverseListDemo {
    public static void main(String[] args) {
        ReverseList r=new ReverseList();
        r.show();
        //静态方法调用格式
        ReverseList.show1();
        System.out.println(ReverseList.num2);
    }
}

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

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

相关文章

《Python源码剖析》之pyc文件

前言 前面我们主要围绕pyObject和pyTypeObject聊完了python的内建对象部分,现在我们将开启新的篇章—python虚拟机,将聚焦在python的执行部分,搞懂从“代码”到“执行”的过程。开启新的篇章之前,你也许会有一个疑惑:我…

aws 接入awsIOT平台的证书签发逻辑

参考资料 https://aws.amazon.com/cn/blogs/china/certification-vending-machine-intelligent-device-access-aws-iot-platform-solution/ IoT 设备与 AWS IoT Core 的 MQTT 通信使用基于证书的 TLS 1.2双向认证体系。所谓的双向认证,即意味着 IoT 设备端需安装 …

制作电子画册速成攻略,快来试试

​当今社会,数字媒体日益普及,电子画册作为一种崭新的展示方式,受到了越来越多人的青睐。它不仅形式新颖,互动性强,而且制作起来也并不复杂。想知道如何快速掌握制作电子画册的技巧吗?我来教你吧。 接下来&…

代码随想录-Day20

654. 最大二叉树 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点,其值为 nums 中的最大值。 递归地在最大值 左边 的 子数组前缀上 构建左子树。 递归地在最大值 右边 的 子数组后缀上 构建右子树。 返回 nums…

cmake编译redis6.0源码总结

1配置clion使用cygwin模拟linux环境,先下载cygwin后配置 2导入源码,配置cmake文件 由于redis是基于Linux上的Makefile,所以Windows上需要配置CMakeLists.txt使用cmake工具编译运行。github上已经有人尝试编写CMakeLists.txt文件&#xff0c…

<Python实际应用>用yolov9实现垃圾检测

公司一个项目需要在无人机巡检的画面中识别垃圾和汽车,正好听闻yolov9最新出炉,于是试了一下采用yolov9来搭建该项目 1.下载和部署 下载yolov9:GitHub地址:GitHub代码下载地址 配置环境可以参考之前关于yolov5的文章 Yolov5自学笔记之一-…

计算机毕业设计 | springboot+vue房屋租赁管理系统(附源码)

1,绪论 1.1 课题来源 随着社会的不断发展以及大家生活水平的提高,越来越多的年轻人选择在大城市发展。在大城市发展就意味着要在外面有一处安身的地方。在租房的过程中,大家也面临着各种各样的问题,比如需要费时费力去现场看房&…

2024宝藏工具EasyRecovery数据恢复软件免费版本下载

在这个数字化的时代,数据已经成为我们生活中的重中之重。无论是工作中的重要文件,还是手机中珍贵的照片,我们都依赖着这些数据。然而,数据丢失的情况时有发生,可能是误删,可能是设备故障,更可能…

Java八大类型详解

整数类型 (4种) 整数的类型 类型占用内存空间范围byte [字节]1字节-128 ~ 127存放的范围是>二进制short [短整型]2字节 -(2⁵) ~ 2⁵-1 -32768 ~ 32767 int [整形]4字节 -2 ~ 2-1 -2147483648 - 2147483647 long [长整形]8字节-2⁶ ~ 2⁶-1 整数类型的使用细节 1. Java个…

架构师必考题--软件系统质量属性

软件系统质量属性 1.质量属性2.质量属性场景描述3.系统架构评估 这个知识点是系统架构师必考的题目,也是案例分析题第一题, 有时候会出现在选择题里面,考的分数也是非常高的。 1.质量属性 属性说明可用性错误检测/恢复/避免性能资源需求/管理…

元组的创建和删除

目录 使用赋值运算符直接创建元组 创建空元组 创建数值元组 删除元组 自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 元组(tuple)是Python中另一个重要的序列结构&#…

异方差的Stata操作(计量114)

以数据集 nerlove.dta 为例,演示如何在 Stata 中处理异方差。 此数据集包括以下变量: tc ( 总成本 ) ; q ( 总产量 ) ; pl ( 工资率 ) ; pk ( 资本的使用成本 ) ; pf ( 燃料价格 ) ; …

H3CNE-7-TCP和UDP协议

TCP和UDP协议 TCP:可靠传输,面向连接 -------- 速度慢,准确性高 UDP:不可靠传输,非面向连接 -------- 速度快,但准确性差 面向连接:如果某应用层协议的四层使用TCP端口,那么正式的…

【代码随想录训练营】【Day 27 and 28】【回溯1-2】| Leetcode 77, 216, 17

【代码随想录训练营】【Day 27 and 28】【回溯1-2】| Leetcode 77, 216, 17 需强化知识点 组合问题:感受遍历的横向和纵向 题目 77. 组合 注意path要深拷贝 class Solution:def combine(self, n: int, k: int) -> List[List[int]]:result []def backtrac…

Thymeleaf 搭建家居网首页

文章目录 1.引入Thymeleaf sunliving-commodity模块1.在resources目录下引入Thymeleaf 所需资源2.pom.xml引入Thymeleaf依赖3.application.yml 关闭缓存,使页面实时刷新4.在application-prod.yml开启缓存5.编写com/sun/sunliving/commodity/web/IndexController.jav…

VLAN高级特性

1.VLAN聚合 (1)VLAN聚合产生的技术背景 (2)VLAN聚合概述 (3)VLAN聚合的原理 多个Sub-VLAN共享一个网关地址,节约了子网网络地址、子网定向广播地址、子网缺省网关地址,且各Sub-VLAN…

基于51单片机的超声波液位测量与控制系统

基于51单片机液位控制器 (仿真+程序+原理图PCB+设计报告) 功能介绍 具体功能: 1.使用HC-SR04测量液位,LCD1602显示; 2.当水位高于设定上限的时候,对应声光报警报警&am…

【同构字符串】python

思路: 先记录同一个值出现的次数,再将字典中的值取出,比较2个列表即可 代码: class Solution:def isIsomorphic(self, s: str, t: str) -> bool:dit1dict()dit2dict()for i in range(len(s)):if s[i] not in dit1:dit1[s[i…

SQL Server2019安装步骤教程(图文)_最新教程

一、下载SQL Server2019 1.到微软官网下载SQL Server Developer版本,官网当前的2019版本下载需要注册账号。 不想注册的朋友,可以选择从网盘下载:点击此处直接下载 2.下载之后先解压,解压后执行exe安装程序。打开之后的界面如下…