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关键字修饰,随着类的加载而加载,并且自动触发,只执行一次 第一次

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

初始化数据 提高代码效率

目录
相关文章
|
2月前
|
算法 JavaScript 前端开发
新生代和老生代内存划分的原理是什么?
【10月更文挑战第29天】新生代和老生代内存划分是JavaScript引擎为了更高效地管理内存、提高垃圾回收效率而采用的一种重要策略,它充分考虑了不同类型对象的生命周期和内存使用特点,通过不同的垃圾回收算法和晋升机制,实现了对内存的有效管理和优化。
|
3月前
|
C++
【C++】深入解析C/C++内存管理:new与delete的使用及原理(二)
【C++】深入解析C/C++内存管理:new与delete的使用及原理
|
3月前
|
编译器 C++ 开发者
【C++】深入解析C/C++内存管理:new与delete的使用及原理(三)
【C++】深入解析C/C++内存管理:new与delete的使用及原理
|
3月前
|
存储 C语言 C++
【C++】深入解析C/C++内存管理:new与delete的使用及原理(一)
【C++】深入解析C/C++内存管理:new与delete的使用及原理
|
1月前
|
存储 算法 Java
Java 内存管理与优化:掌控堆与栈,雕琢高效代码
Java内存管理与优化是提升程序性能的关键。掌握堆与栈的运作机制,学习如何有效管理内存资源,雕琢出更加高效的代码,是每个Java开发者必备的技能。
61 5
|
2月前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
70 1
|
2月前
|
存储 JavaScript 前端开发
如何优化代码以避免闭包引起的内存泄露
本文介绍了闭包引起内存泄露的原因,并提供了几种优化代码的策略,帮助开发者有效避免内存泄露问题,提升应用性能。
|
4月前
|
存储 弹性计算 测试技术
阿里云服务器实例规格vCPU、内存、网络带宽、网络收发包PPS、连接数等性能指标详解
阿里云服务器ECS实例可以分为多种实例规格族。根据CPU、内存等配置,一种实例规格族又分为多种实例规格。而实例规格又包含vCPU、处理器、内存、vTPM、本地存储、网络带宽、网络收发包PPS、连接数、弹性网卡、云盘带宽、云盘IOPS等指标,本文为大家详细介绍实例规格的这些指标,以供大家了解和选择。
215 14
阿里云服务器实例规格vCPU、内存、网络带宽、网络收发包PPS、连接数等性能指标详解
|
4月前
|
监控 算法 Java
深入理解Java中的垃圾回收机制在Java编程中,垃圾回收(Garbage Collection, GC)是一个核心概念,它自动管理内存,帮助开发者避免内存泄漏和溢出问题。本文将探讨Java中的垃圾回收机制,包括其基本原理、不同类型的垃圾收集器以及如何调优垃圾回收性能。通过深入浅出的方式,让读者对Java的垃圾回收有一个全面的认识。
本文详细介绍了Java中的垃圾回收机制,从基本原理到不同类型垃圾收集器的工作原理,再到实际调优策略。通过通俗易懂的语言和条理清晰的解释,帮助读者更好地理解和应用Java的垃圾回收技术,从而编写出更高效、稳定的Java应用程序。
|
5月前
|
存储 缓存 JSON
一行代码,我优化掉了1G内存占用
这里一行代码,指的是:String.intern()的调用,为了调用这一行代码,也写了几十行额外的代码。

热门文章

最新文章