【Java】Java核心要点总结 66

简介: 1. 成员变量 和 局部变量 的区别● 语法形式 :从语法形式上看,成员变量是属于类的,而局部变量是在代码块或方法中定义的变量或是方法的参数;成员变量可以被 public,private,static 等修饰符所修饰,而局部变量不能被访问控制修饰符及 static 所修饰;但是,成员变量和局部变量都能被 final 所修饰。● 存储方式 :从变量在内存中的存储方式来看,如果成员变量是使用 static 修饰的,那么这个成员变量是属于类的,如果没有使用 static 修饰,这个成员变量是属于实例的。而对象存在于堆内存,局部变量则存在于栈内存。

1. 成员变量 和 局部变量 的区别

● 语法形式 :从语法形式上看,成员变量是属于类的,而局部变量是在代码块或方法中定义的变量或是方法的参数;成员变量可以被 public,private,static 等修饰符所修饰,而局部变量不能被访问控制修饰符及 static 所修饰;但是,成员变量和局部变量都能被 final 所修饰。

● 存储方式 :从变量在内存中的存储方式来看,如果成员变量是使用 static 修饰的,那么这个成员变量是属于类的,如果没有使用 static 修饰,这个成员变量是属于实例的。而对象存在于堆内存,局部变量则存在于栈内存。

● 生存时间 :从变量在内存中的生存时间上看,成员变量是对象的一部分,它随着对象的创建而存在,而局部变量随着方法的调用而自动生成,随着方法的调用结束而消亡。

● 默认值 :从变量是否有默认值来看,成员变量如果没有被赋初始值,则会自动以类型的默认值而赋值(一种情况例外:被 final 修饰的成员变量也必须显式地赋值),而局部变量则不会自动赋值


2 . 静态方法 和 实例方法 区别

1、调用方式

在外部调用静态方法时,可以使用 类名.方法名 的方式,也可以使用 对象.方法名 的方式,而实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象 。

不过,需要注意的是一般不建议使用 对象.方法名 的方式来调用静态方法。这种方式非常容易造成混淆,静态方法不属于类的某个对象而是属于这个类。

因此,一般建议使用 类名.方法名 的方式来调用静态方法。


2、访问类成员是否存在限制

静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),不允许访问实例成员(即实例成员变量和实例方法),而实例方法不存在这个限制。


3. 基本数据类型 和 包装类 的区别

● 成员变量包装类型不赋值就是 null ,而基本类型有默认值且不是 null。

● 包装类型可用于泛型,而基本类型不可以。

● 基本数据类型的局部变量存放在 Java 虚拟机栈中的局部变量表中,基本数据类型的成员变量(未被 static 修饰 )存放在 Java 虚拟机的堆中。包装类型属于对象类型,我们知道几乎所有对象实例都存在于堆中。

● 相比于对象类型, 基本数据类型占用的空间非常小。


4. 局部变量一定存储在栈中吗?

一般情况下,局部变量(local variable)是存放在调用栈(call stack)上的,也就是存放在栈帧中。每当有一个新函数调用时,就会为该函数创建一个新的栈帧,该函数内所定义的局部变量就存储在该栈帧中。


但是,某些编译器可能会对没有被使用的局部变量进行优化,将其直接剔除掉,而不将其存入栈中。另外,在某些情况下,编译器也可能会将某些局部变量存放在寄存器中,以提高程序的执行效率。因此,总体来说,虽然大多数情况下局部变量是存放在栈中的,但并不绝对。


5. 包装类型的缓存机制

Java中的包装类型(Wrapper Class)是为了将基本数据类型转换成对象而设计的。每种基本数据类型都有对应的包装类:Integer、Float、Double、Long、Boolean、Byte、Short、Character。


在 Java 1.5 及以后的版本中,Java通过使用缓存机制来提高包装类型的性能。具体操作如下:


对于 byte、short、integer 这三种类型的包装类,会预先创建 -128~127 这些范围内的所有数值的包装类对象,并保存在一个叫做“cache”的数组中。


对于 Boolean 类型,JVM预先创建了 TRUE 和 FALSE 两个对象,并保存在 Boolean.cache 数组中。


对于 Char 类型,Java则保存了从 ‘\u0000’ 到 ‘\u007F’ 字符的包装类对象,因为大部分字符都被使用得很少,没有必要进行全部缓存。


对于 Float、Double 等其他类型的包装类,由于它们的值域比较大,缓存区间也比较大,所以 JVM 没有为其提供默认的缓存实现。

fee047a7e35549f9b56dfdaa7c72739a.png


当自动装箱时,如果需要创建的包装类型已经存在于缓存数组中,就直接返回该缓存数组中的对象;否则,再去创建一个新的对象。

这种缓存机制可以避免 Java 中因自动装箱和拆箱过程中频繁创建对象带来的性能损失,提高 Java 程序的执行效率。

相关文章
|
缓存 安全 Java
【Java】Java核心要点总结70
1. volatile 如何保证变量的可⻅性? 在Java中,使用volatile关键字可以确保变量的可见性。 当一个线程修改了一个被volatile修饰的变量时,它会立即将该变量的最新值刷新到主内存。而其他线程在读取该变量时,会从主内存中重新获取最新值,而不是使用缓存中的旧值。 这样做的原因是,普通的变量在多线程环境下存在线程间不可见的问题。每个线程都有自己的工作内存,由于运行速度快和编译优化等原因,线程可能会直接读取工作内存中的旧值,而不去主内存中获取最新的值,导致线程之间的数据不一致。
|
安全 Java 数据库连接
【Java】Java核心要点总结:62
1. 线程中的线程是怎么创建的,是一开始就随着线程池的启动创建好的吗? 线程中的线程通常是通过在父线程中创建新的Thread对象并将其加入线程池中实现的。当然,这个过程也可以通过一些其他的方式来实现,比如使用ExecutorService.submit()方法提交一个Callable或Runnable任务。
|
3月前
|
消息中间件 NoSQL Java
Java知识要点及面试题
该文档涵盖Java后端开发的关键知识点,包括Java基础、JVM、多线程、MySQL、Redis、Spring框架、Spring Cloud、Kafka及分布式系统设计。针对每个主题,文档列举了重要概念及面试常问问题,帮助读者全面掌握相关技术并准备面试。例如,Java基础部分涉及面向对象编程、数据类型、异常处理等;JVM部分则讲解内存结构、类加载机制及垃圾回收算法。此外,还介绍了多线程的生命周期、同步机制及线程池使用,数据库设计与优化,以及分布式系统中的微服务、RPC调用和负载均衡等。
|
4月前
|
Java
【Java基础面试三十七】、说一说Java的异常机制
这篇文章介绍了Java异常机制的三个主要方面:异常处理(使用try、catch、finally语句)、抛出异常(使用throw和throws关键字)、以及异常跟踪栈(异常传播和程序终止时的栈信息输出)。
|
4月前
|
Java
【Java基础面试十六】、Java中的多态是怎么实现的?
这篇文章解释了Java中多态的实现机制,主要是通过继承,允许将子类实例赋给父类引用,并在运行时表现出子类的行为特征,实现这一过程通常涉及普通类、抽象类或接口的使用。
|
缓存 监控 Java
【Java】Java核心要点总结:61
1. java中的线程池是如何实现的 Java 中的线程池是通过 ThreadPoolExecutor 类实现的。ThreadPoolExecutor 继承自 AbstractExecutorService,并实现了 Executor、ExecutorService 和 Future 接口,它可以为程序提供管理和控制多个工作者线程的功能,提高线程重用性并避免线程频繁创建销毁的开销。
|
监控 安全 Java
Java面试题-Java核心基础
Java面试题-Java核心基础
106 2
|
算法 安全 Java
【Java】Java核心要点总结:59
1. 线程的run()和start()有什么区别,为什么不直接调用run() Java中通过继承 Thread 或实现 Runnable 接口来创建线程,线程是通过 start() 方法启动的,而不是直接调用 run() 方法。下面是它们之间的区别: start() 和 run() 的区别 调用 start() 方法会启动一个新线程并执行其中的 run() 方法,而直接调用 run() 方法将在当前线程中执行 run() 方法,并不会创建新的线程。
|
存储 Java C语言
【Java】Java核心要点总结 67
1. 浮点数运运算会有精度损失 这个和计算机保存浮点数的机制有很大关系。我们知道计算机是二进制的,而且计算机在表示一个数字时,宽度是有限的,无限循环的小数存储在计算机时,只能被截断,所以就会导致小数精度发生损失的情况。这也就是解释了为什么浮点数没有办法用二进制精确表示。
|
算法 安全 Java
【Java】Java核心要点总结:58
1. java中 怎么确保一个集合不能被修改 Java 中可以使用 Collections 类的 unmodifiableXXX() 方法来确保一个集合不能被修改。其中,XXX 表示需要被转换的集合类型,如 List、Set、Map 等。这些方法都返回指定集合的不可修改视图
下一篇
DataWorks