JavaSE 面向对象程序设计初级 静态static 包package 常量final 代码块 代码实操理论内存原理详解

简介: JavaSE 面向对象程序设计初级 静态static 包package 常量final 代码块 代码实操理论内存原理详解

static(静态)

静态的特点

1.static可以修饰变量和方法;

2.被static修饰的变量或者方法是独立于该类的任何对象,也就是说,这些变量和方法不属于任何一个实例对象,而是被类的实例对象所共享;

3.在类被加载的时候,就会去加载被static修饰的部分;

4.被static修饰的变量或者方法是优先于对象存在的,也就是说当一个类加载完毕之后,即便没有创建对象,也可以去访问。

应用示例

定义类:属性 行为

所有的student类所有的对象共享teacherName

直接调用

static是一个java的修饰符

静态变量

被static修饰的成员变量,叫做静态变量

特点:被该类所有的对象共享

调用方式:

1.类名调用(推荐)

2.对象名调用

静态变量是随着类加载而加载的,优于对象出现

方法执行完毕 出栈

通过对象s2调用方法show

堆内存里的静态区

静态区的变量是各个对象共享的,谁要 用谁去拿

静态区的变量在内存里只有一份

静态对象属于类

简单来说,静态对象就是在程序运行期间一直存在的一个对象,它不会随着函数或方法的调用而创建或销毁,而是随着程序的启动而创建,随着程序的结束而销毁。静态对象通常被用于保存全局状态或者提供共享的资源,可以通过类名直接访问,而无需创建类的实例。例如,在Java中,我们可以定义一个静态变量表示某个类的实例个数,每次创建该类的实例时,静态变量的值就会递增,因为静态变量属于类,而非对象。

类:类是一种抽象的概念,它定义了对象的属性和行为。类可以看作是对象的模板或蓝图,描述了对象应该具有的特征和行为。

对象:对象是类的一个实例,它是类的具体化。当我们根据类创建一个具体的实例时,这个实例就是一个对象,拥有了类所定义的属性和行为。

因此,其他对象不是类,而是基于类创建的实例。类是用来定义对象的模板,而对象是根据模板创建出来的具体实体。在面向对象编程中,我们通过定义类来描述对象的特征和行为,并通过创建对象来使用这些特征和行为。

在Java等静态类型语言中,类的加载通常发生在程序运行之初,但在动态语言或一些特殊场景下,类的加载可能会更加灵活和动态。

总的来说,类的加载是在程序运行期间动态发生的,根据程序运行时的需要来进行。

静态方法

被static修饰的成员方法,叫做静态方法

成员方法 getter setter

多用在测试类和工具类中

javaBean类:

用来描述一类事物的类

例 Student Dog Cat

测试类:

用来检测其他类是否正确

带有main方法 是程序的主入口

工具类:

帮我们做一些事情,但不描述任何事情(例如数组求和)

1.类名见名知意

2.私有化构造方法

3.方法定义为静态

javabean类中很少用

静态方法很少用

1.类名调用(推荐)

2.对象名调用

工具类

遍历数组

求总分和平均数

测试类

创建工具类 求集合中的学生年龄的最大值

首先定义javabean类 存储学生对象 放入属性

再用工具类进行定义方法

最后在测试类中调用工具类中的方法

注意事项

1.静态方法只能访问静态变量静态方法

2.非静态方法可以访问静态变量或者静态方法,也可以访问非静态的成员变量和成员方法

3.静态方法中没有this关键字

静态方法的调用方式是通过类名直接调用,不需要先创建类的实例。这也说明了为什么静态方法中没有this关键字,因为在没有实例的情况下,不存在当前对象实例的引用。

this表示当时方法调用者的地址值

this由虚拟机赋值

谁调用当前方法,this就 地址值

内存图

this在形参的最前面 是隐含的

非静态和对象相关,必须要有this;

成员变量 成员方法

静态的是共享的,和每一个对象无关,所以无this

静态 随着类加载而加载

非静态 跟对象有关

重新认识main方法

public class Helloworld{
    public static void main(String[] args){
        System.out.println("HelloWorld");
    }
}

public:权限修饰符 被虚拟机调用 访问权限足够大

static:被虚拟机调用 不用创建对象,直接类名访问

因为main方法是静态的,所有测试类的其他方法也需要是静态的

void:被虚拟机调用,不需要给虚拟机返回值

main:虚拟机只能识别main

String[] args:以前是接收数据,现在没用

什么是包

包是文件夹,用来管理不同功能的java类,方便后期代码维护 分门归类

包名规则:

公司域名反写+包的作用,需要全部英文小写,见名知意

packet com.ithema.domain

使用同一个包中的类时,不需要导包

使用导包在什么时候

1.使用java.lang包中的类时,不需要导包

2.其他情况都需要导包

3.如果同时使用两个包中的同名类,需要用全类名

4.使用其他其他包里面的类时要用全类名

final关键字

表示 最终的 不可被改变

一个 修饰符

应用于 方法:表明该方法时最终方法,不能被重写

应用于 :表明该类是最终类,不能被继承

应用于 变量:叫做常量,只能被赋值一次

写在类中防止值改变

例:

math类中的成员变量PI(π)

public static final double PI=3.1415926 5358979 323846

常量

在实际开发中,常量一般为系统的配置信息,方便维护,提高可读性

和final关键字一起用

命名规范

单个单词:全部大写

多个单词:全部大写 单词之间用下划线隔开

细节(重点)

final修饰的变量是基本类型,那么变量存储的数据值不能发生改变

final修饰的变量是引用数据类型,那么变量存储的地址值不能发生改变,对象内部的可以该改变

实例操作

权限修饰符

控制一个成员能被访问的范围

可以修饰成员变量,方法,构造方法,内部类

private 只能自己用

默认(空着不写) 只能在本包中

protectes 受保护的 其他包里的子类也能用

public 都能用

实际开发中一般只用private 和 public

原则

成员变量私有

方法公开

如果方法是抽取其他方法中共性代码,要私有

代码块

局部代码块

写在方法里面的单独代码

回收内存 不浪费空间

不过现在硬件水平提高了,内存空间很大 实际开发中已经不再使用这种方式写代码

public class Dduo{
    public static void main(String[] args){
        {
            int a=10;
        }
        System.out.printf(a);
    }
}//输出结果为0

构造代码块

写在成员位置的代码块,可以优先于成员方法执行

成员方法中共性的可以抽出来放在方法前写入构造代码块

private String name;
private int age;
{
    System.out,println("开始创建对象喽")
}
public Student(){
    
}

只要创建对象 就会先执行构造代码块(必定执行) 再执行构造方法

不过现在也不用了,因为不灵活

静态代码块

static{}

需要通过static关键字修饰,随着类的加载而加载,并且自动触发,只执行一次 第一次

在类加载的时候,随着类的加载使用

初始化数据 提高代码效率

目录
相关文章
|
29天前
|
存储 算法 Java
Java 内存管理与优化:掌控堆与栈,雕琢高效代码
Java内存管理与优化是提升程序性能的关键。掌握堆与栈的运作机制,学习如何有效管理内存资源,雕琢出更加高效的代码,是每个Java开发者必备的技能。
55 5
|
30天前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
63 1
|
1月前
|
存储 JavaScript 前端开发
如何优化代码以避免闭包引起的内存泄露
本文介绍了闭包引起内存泄露的原因,并提供了几种优化代码的策略,帮助开发者有效避免内存泄露问题,提升应用性能。
|
4月前
|
存储 缓存 JSON
一行代码,我优化掉了1G内存占用
这里一行代码,指的是:String.intern()的调用,为了调用这一行代码,也写了几十行额外的代码。
|
4月前
|
缓存 Java
Java内存管理秘籍:掌握强软弱幻四大引用,让代码效率翻倍!
【8月更文挑战第29天】在Java中,引用是连接对象与内存的桥梁,主要分为强引用、软引用、弱引用和幻象引用。强引用确保对象生命周期由引用控制,适用于普通对象;软引用在内存不足时可被回收,适合用于内存敏感的缓存;弱引用在无强引用时即可被回收,适用于弱关联如监听器列表;幻象引用需与引用队列配合使用,用于跟踪对象回收状态,适用于执行清理工作。合理使用不同类型的引用车可以提升程序性能和资源管理效率。
49 4
|
4月前
|
前端开发 JavaScript Java
揭开 JavaScript 垃圾回收的秘密——一场与内存泄漏的生死较量,让你的代码从此焕然一新!
【8月更文挑战第23天】本文通过多个实例深入探讨了JavaScript中的垃圾回收机制及其对应用性能的影响。首先介绍了基本的内存管理方式,随后分析了变量不再使用时的回收过程。接着,通过事件监听器未被移除及全局变量管理不当等场景展示了常见的内存泄漏问题。最后,文章介绍了使用`WeakRef`和`FinalizationRegistry`等现代API来有效避免内存泄漏的方法。理解并运用这些技术能显著提升Web应用的稳定性和效率。
99 0
|
5月前
|
存储 Rust JavaScript
Rust 问题之TypeScript 代码,变量 s 存储在栈内存中还是堆内存中如何解决
Rust 问题之TypeScript 代码,变量 s 存储在栈内存中还是堆内存中如何解决
|
1月前
|
缓存 Prometheus 监控
Elasticsearch集群JVM调优设置合适的堆内存大小
Elasticsearch集群JVM调优设置合适的堆内存大小
311 1
|
25天前
|
存储 监控 算法
深入探索Java虚拟机(JVM)的内存管理机制
本文旨在为读者提供对Java虚拟机(JVM)内存管理机制的深入理解。通过详细解析JVM的内存结构、垃圾回收算法以及性能优化策略,本文不仅揭示了Java程序高效运行背后的原理,还为开发者提供了优化应用程序性能的实用技巧。不同于常规摘要仅概述文章大意,本文摘要将简要介绍JVM内存管理的关键点,为读者提供一个清晰的学习路线图。
|
1月前
|
Java
JVM内存参数
-Xmx[]:堆空间最大内存 -Xms[]:堆空间最小内存,一般设置成跟堆空间最大内存一样的 -Xmn[]:新生代的最大内存 -xx[use 垃圾回收器名称]:指定垃圾回收器 -xss:设置单个线程栈大小 一般设堆空间为最大可用物理地址的百分之80

热门文章

最新文章