Day2 | Java基础 | 2 数据类型

Day1 | Java基础 | 2 数据类型

  • 基础版
    • static
      • static的用法
        • static修饰内部类
        • static修饰方法
        • static修饰变量
        • static修饰代码块
      • 深入分析
      • static小结
  • 问题回答版
    • 参数传递
      • 形参和实参的区别是什么?
      • Java是值传递还是引用传递?
      • 值传递和引用传递的区别是什么?
    • final关键词
      • final作用是什么?
      • final、finally、finalize有什么不同?
    • static关键词
      • static作用是什么?
      • static和final区别是什么?

基础版

static

参考链接

static的用法

static修饰内部类

静态内部类的使用示例:

public class StaticTest {
    //static关键字修饰内部类
    public static class InnerClass{
        InnerClass(){
            System.out.println("============= 静态内部类=============");
        }
        public void InnerMethod() {
            System.out.println("============= 静态内部方法=============");
        }
    }
    public static void main(String[] args) {
        //直接通过StaticTest类名访问静态内部类InnerClass
        InnerClass inner=new StaticTest.InnerClass();
        //静态内部类可以和普通类一样使用
        inner.InnerMethod();
    }
}
/*  输出是
 * ============= 静态内部类=============
 * ============= 静态内部方法=============
 */

如果没有用static修饰InterClass,则只能new 一个外部类实例。再通过外部实例创建内部类

static修饰方法

同上,可以直接通过类名调用:

public class StaticMethod {
    public static void test() {
        System.out.println("============= 静态方法=============");
    };
    public static void main(String[] args) {
        //方式一:直接通过类名
        StaticMethod.test();
        //方式二:
        StaticMethod fdd=new StaticMethod();
        fdd.test();
    }
}
static修饰变量
  • 静态变量:被static修饰的成员变量叫做,也叫类变量,说明这个变量是属于类的,而不是属于对象。
  • 实例变量:没有被static修饰的成员变量,说明这个变量是属于某个具体的对象。

同样可以直接通过类名调用静态变量:

public class StaticVar {
    private static String name="java的架构师技术栈"public static void main(String[] args) {
        //直接通过类名
        StaticVar.name;
    }
}
static修饰代码块

静态代码块在类第一次被载入时执行。类初始化的顺序:

  • 父类静态变量
  • 父类静态代码块 static{}
  • 子类静态变量
  • 子类静态代码块
  • 父类普通变量
  • 父类普通代码块
  • 父类构造函数
  • 子类普通变量
  • 子类普通代码块
  • 子类构造函数

深入分析

在这里插入图片描述
堆区

  • 存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)
  • 不存放基本类型和对象引用,只存放对象本身。
  • JVM只有一个堆区heap被所有线程共享。

方法区

  • 也叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。
  • 方法区中包含的都是在整个程序中永远唯一的元素,如class、static变量。

栈区

  • 每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都放在堆区中。
  • 每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。
  • 栈分为三个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。

一个例子:

public class Person {
    //静态变量
    static String firstName;
    String lastName;
    public void showName(){
        System.out.println(firstName+lastName);
    }
    //静态方法
    public static void viewName(){
      System.out.println(firstName);
    }
    
    public static void main(String[] args) {
        Person p =new Person();
        Person.firstName = "张";
        p.lastName="三";
        p.showName();
        
        Person p2 =new Person();
        Person.firstName="李";
        p2.lastName="四";
        p2.showName();
    }
}
//输出。张三、李四

在这里插入图片描述

  • 从方法区调用方法。
  • 堆内存中的成员变量lastname随着对象的产生而产生,随对象的消失而消失。
  • 静态变量是所有线程共享的,所以不会消失。因此,静态变量可以直接根据类名去访问。

static小结

特点

  • static修饰的成员被所有的对象共享。
  • static由于对象存在,因为static的成员随着类的加载就已经存在。
  • static修饰的成员多了一种调用方式,可以直接被类名调用。
  • static修饰的数据是共享数据,对象中存储的是特有数据

成员变量与静态变量的区别

区别成员变量静态变量
生命周期随着对象的创建而存在,随着对象的回收而释放随着的加载而存在,随着类的消失而消失
调用方式只能被对象调用可以被对象调用,也可以用类名调用(推荐)
别名实例变量类变量
存储位置堆内存的对象中,所以也叫对象的特有数据方法区(共享数据区)的静态区,所以也叫对象的共享数据

使用的注意事项

  • 静态方法只能访问静态成员。(非静态可以访问静态,也可以访问非静态)
  • 静态方法中不能使用this或super关键字。
  • 主函数是静态的。

问题回答版


参数传递

形参和实参的区别是什么?

  • 形参:形式参数,Parameters,定义方法时使用的参数。用来接受调用者传递的参数。作用域在方法内部。
  • 实参:实际参数,Arguments,调用时传递给方法的参数。实参在传递给别的方法前需要被预先赋值(必须有确定的值)。

Java是值传递还是引用传递?

值传递。

  • 当参数是基本数据类型,传递的就是基本类型的字面量值的拷贝,会创建副本。比如原始类型(int、long、char等)、包装类型(Integer、Long、String等),实参和形参都是存储在不同的栈帧内,修改形参的栈帧数据,不会影响实参的数据。
  • 当参数是引用类型数据,传递的就是实参所引用的对象在堆中地址值的拷贝,同样也会创建副本。形参和实参指向同一个地址的时候,修改形参地址的内容,会影响到实参。当形参和实参指向不同的地址的时候,修改形参地址的内容,并不会影响到实参。

值传递和引用传递的区别是什么?

  • 值传递:调用方法时,将实际参数拷贝一份传递给方法。在方法中修改形式参数时,不会影响到实际参数。
  • 引用传递:也称地址传递。调用方法时,将实际参数的地址传递给方法。在方法中对形式参数的修改,会影响到实际参数。

final关键词

final作用是什么?

用于修饰类、方法、变量。

final 修饰意义
不能继承扩展
变量不能修改(避免意外赋值导致的编程错误)
方法不能重写

final、finally、finalize有什么不同?

  • finally:Java保证重点代码一定要被执行的一种机制。可以使用 try-finally 或try-catch-finally进行类似关闭JDBC连接、保证unlock锁等动作。

需要关闭的连接等资源,更推荐使用 Java 7 中添加的 try-with-resources 语句,因为通常 Java 平台能够更好地处理异常情况,编码量也要少很多。

  • finalize:是基础类java.lang.Object的一个方法,它的设计目的是保证对象在被垃圾收集前完成特定资源的回收。finalize机制现在已经不推荐使用,并且在JDK9开始被标记为deprecated。因为无法保证finalize什么时候执行,执行的是否符合预期。使用不当会影响性能,导致程序死锁、挂起等。

下面代码会输出什么?
try {
// do something
System.exit(1);
} finally{
System.out.println(“Print from finally”);
}
上面 finally 里面的代码可不会被执行,这是一个特例。

static关键词

static作用是什么?

方便在没有创建对象的情况下进行调用。直接根据类名就可以去访问。

Java中static一般用来修饰成员变量、函数或内部类。普通类不允许声明为静态类。

static和final区别是什么?

参考链接

区别staticfinal
能否修饰类、方法、成员变量可以可以
能否修饰构造器不可以不可以
能否修饰代码块可以不可以
能否修饰局部变量不可以可以
修饰方法时能否被重写不可以不可以

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python-VBA函数之旅-reversed函数

目录 一、reversed函数的常见应用场景 二、reversed函数使用注意事项 三、如何用好reversed函数? 1、reversed函数: 1-1、Python: 1-2、VBA: 2、推荐阅读: 个人主页: https://blog.csdn.net/ygb_10…

Infuse for Mac激活版:高清影音播放软件

对于热爱影音娱乐的Mac用户来说,Infuse for Mac是一个不容错过的选择。它以其简洁的操作界面和强大的播放功能,为用户带来了全新的影音播放体验。 Infuse for Mac支持广泛的音视频格式,无需额外转换,即可轻松播放您喜爱的影片。无…

Centos 中如何汉化man命令

刚学Linux,记不住命令和选项,很依赖里面的 man 查看命令,但因为着实看不懂,有没有什么办法把man查看命令的信息改成中文 在CentOS 7中,你可以通过安装man-pages-zh包来获取中文的man手册。以下是具体的步骤&#xff1a…

unity ui 同屏

一共有三个摄像机,上屏,下屏 和 类似照相机的ccamera 类似照相机的ccamera的设置: 下屏摄像机设置: 下屏交互的Canvas设置: 新建一个canvas,下面放上rawimage: 如果下屏不想显示的内容&#xf…

【WEEK11】 【DAY2】Employee Management System Part 3【English Version】

2024.5.7 Tuesday Continuing from 【WEEK11】 【DAY1】Employee Management System Part 2【English Version】 Contents 10.4. Login Functionality10.4.1. Modify index.html10.4.2. Main Page Style Missing After Login Failure10.4.3. Create LoginController.java10.4.4…

【stomp 实战】spring websocket用户消息发送源码分析

这一节,我们学习用户消息是如何发送的。 消息的分类 spring websocket将消息分为两种,一种是给指定的用户发送(用户消息),一种是广播消息,即给所有用户发送消息。那怎么区分这两种消息呢?那就是用前缀了…

通过 Java 操作 redis -- list 列表基本命令

目录 使用命令 lpush,lrange,rpush 使用命令 lpop 和 rpop 使用命令 blpop,brpop 使用命令 llen 关于 redis list 列表类型的相关命令推荐看Redis - list 列表 要想通过 Java 操作 redis,首先要连接上 redis 服务器&#xff…

抽象类基本概念

抽象类及抽象方法 概念:一个类中没有包含足够的信息来描绘一个具体的对象,这种类被定义为抽象类,含有抽象方法的类也被称为抽象类。 用通俗的话来说就是当一个类的某个功能(方法)实现不确定时,我们就将该…

【Hadoop】MapReduce (七)

MapReduce 执行流程 MapTask执行流程 Read:读取阶段 MapTask会调用InputFormat中的getSplits方法来对文件进行切片切片之后,针对每一个Split,产生一个RecordReader流用于读取数据数据是以Key-Value形式来产生,交给map方法来处理…

RAFT:引领 Llama 在 RAG 中发展

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

Java面试八股文(MySQL篇)

数据库三范式 数据库事务介绍 索引介绍 SQL优化手段 mysql union 与 union all 语法及用法 并发事务带来的问题 大表如何优化 索引类型介绍 MYSQL数据库锁介绍

代码审计-PHP模型开发篇MVC层动态调试未授权脆弱鉴权未引用错误逻辑

知识点 1、PHP审计-动态调试-未授权安全 2、PHP审计-文件对比-未授权安全 3、PHP审计-未授权访问-三种形态动态调试优点 1、实时跟踪代码执行流程 2、实时获取变量接受数据 3、实时分析指定文件动态 环境配置:https://blog.csdn.net/m0_60571842/article/details/…

您可以使用WordPress创建的19种网站类型

当人们决定为什么他们应该使用WordPress时,我们经常会被问到“WordPress可以做[空白]吗?答案大多是肯定的。在本文中,我们将向您展示您可以使用WordPress创建的19种不同类型的网站,而无需学习任何编程技巧。 目录 隐藏 1 开始使用…

JS-拖拽元素放大缩小

效果左右布局&#xff0c;拖拽后&#xff0c;宽度放大缩小 其实自己写也可以&#xff0c;不过还是发现了两个好用的js库&#xff0c;既然不需要自己写&#xff0c;当然是能偷懒就偷懒 1、resizerjs 官网地址&#xff1a;https://github.com/eknowles/resizerjs <!doctype …

Milvus Cloud 的RAG 的广泛应用及其独特优势

一个典型的 RAG 框架可以分为检索器(Retriever)和生成器(Generator)两块,检索过程包括为数据(如 Documents)做切分、嵌入向量(Embedding)、并构建索引(Chunks Vectors),再通过向量检索以召回相关结果,而生成过程则是利用基于检索结果(Context)增强的 Prompt 来激…

C语言22行代码,让你的朋友以为中了病毒

1 **C语言介绍 ** C语言是一种计算机编程语言&#xff0c;由丹尼斯里奇&#xff08;Dennis Ritchie&#xff09;在1972年左右为UNIX操作系统设计并开发。它具有高效、可移植、灵活和强大的特点&#xff0c;在计算机科学领域中具有广泛的应用。C语言是一种结构化语言&#xff0…

【原创】不同RTOS中POSIX接口的实现差异

文章目录 前言POSIX简介RTOS对POSIX的实现情况ZephyrFreeRTOS RTOS提供的POSIX接口实时吗&#xff1f;nanosleepTimer-不同linux版本和xenomai的实现差异PREEMPT-RT Timer实现原理Xenomai Timer实现原理 总结参考 前言 在开发实时应用时&#xff0c;我们希望软件具备良好的跨平…

用于密集预测任务的通道知识蒸馏——关键字:蒸馏

摘要 https://arxiv.org/pdf/2011.13256 知识蒸馏(KD)已被证明是训练紧凑密集预测模型的简单有效工具。通过从大型教师网络转移而来的额外监督来训练轻量级学生网络。大多数先前的针对密集预测任务的KD变体都在空间域中对学生网络和教师网络的激活图进行对齐,通常是通过在每…

实验9:WLAN配置管理(课内实验)

实验9&#xff1a;WLAN配置管理 实验目的及要求&#xff1a; 掌握无线局域网络无线路由器和无线网络控制器的配置与应用。能够完成配置SSID隐藏、密码认证&#xff0c;远程站点WLAN配置和WLC配置等无线网络配置&#xff0c;完成网络连通性测试。 实验设备&#xff1a; 无线…

吴恩达2022机器学习专项课程C2(高级学习算法)W1(神经网络):2.5 更复杂的神经网络

目录 示例填写第三层的层数1.问题2.答案 公式&#xff1a;计算任意层的激活值激活函数 示例 层数有4层&#xff0c;不包括输入层。 填写第三层的层数 1.问题 你能把第二个神经元的上标和下标填写出来吗&#xff1f; 2.答案 根据公式g(wxb)&#xff0c;这里的x对应的是上…