Java基础--类和对象

devtools/2025/1/20 12:30:51/

目录

什么是类?

什么是对象

为什么java会设计对象

Java对象该怎么用

程序执行流程

类的加载顺序


什么是类?

        类是构建对象的模板,一个类可以创建多个对象,每个对象的数据的最初来源来自对象

java">public class Student{public int age = 18;public String name = "张三";public double height = 180.5;}                           //创建Student类Student s = new Student();
System.out.println(s.age);

第一个student:表示数据类型;

s:表示项目或者变量的名称;

new关键字:要求在堆内存中开辟内存空间;

Student():构造器,在创建对象时给对象赋值;

= :赋值操作,将堆内存中的创建的新空间地址赋值给s;

java">Student s1 = new Student();
Student s2 = new Student();
s2.name = "李四";

方法区存储类信息!!!!!! 

什么是对象

        对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。

        看看周围真实的世界,会发现身边有很多对象,车,狗,人等等。所有这些对象都有自己的状态和行为。拿一条狗来举例,它的状态有:名字、品种、颜色,行为有:叫、摇尾巴和跑。对比现实对象和软件对象,它们之间十分相似软件对象也有状态和行为。软件对象的状态就是属性,行为通过方法体现。在软件开发中,方法操作对象内部状态的改变,对象的相互调用也是通过方法来完成。

为什么java会设计对象

在class插入get、set方法

Java对象该怎么用

类信息先放在方法区,main方法入栈,注意this

程序执行流程

图中123所在位置为字符串常量池。

基本数据类型(如整数、浮点数、布尔值等)直接存储在栈内存中,其值直接保存在变量中。当你将一个基本数据类型的变量赋值给另一个变量时,会复制该变量的值,因此每个变量都有其自己的数据副本。‌(如上图flay方法中的 public void flay(int num){};)

引用数据类型(如对象、数组、函数等)存储在堆内存中,而变量中保存的是堆内存中的对象地址。当你将一个引用数据类型的变量赋值给另一个变量时,实际上只是复制了引用地址,而不是对象本身。(如上图run方法中String name = “123”;)

类的加载顺序

java">public class Test extends Base{public Test(){System.out.println("test constructor");    }public static void main(String[] args){new Test();    }static{System.out.println("test static");    }  //static修饰的代码块在main方法执行之前执行,其目的是修饰main方法。
}class Base{static{System.out.println("base static");    }public Base(){System.out.println("base constructor");    }
}

 结果为

java">//base static
//test static
//base constructor
//test constructor

注意:static修饰的代码块在main方法执行之前执行,其目的是修饰main方法。

        首先扫描main方法所在的类Test类,又发现Test的父类为Base类(再扫描发现Base类没有父类),然后编译(java文件变为class文件进入方法区),父类先进入方法区,加载Base中的static方法,再子类进入方法区,执行Test中的static。

        然后main方法入栈,子类创建新对象时,父类要先创建对象。所以要先执行Base类的构造器,再执行Test子类中的构造器。


http://www.ppmy.cn/devtools/152083.html

相关文章

Python从0到100(八十四):神经网络-卷积神经网络训练CIFAR-10数据集

前言: 零基础学Python:Python从0到100最新最全教程。 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…

Vue.js组件开发-解决PDF签章预览问题

在Vue.js组件开发中,解决PDF签章预览问题可能涉及多个方面,包括选择合适的PDF预览库、配置PDF.js(或其封装库如vue-pdf)以正确显示签章、以及处理可能的兼容性和性能问题。 步骤和建议: 1. 选择合适的PDF预览库 ‌vu…

数字图像处理:实验三

hello!uu们大家好,这里是我们第三章实验的学习,在这里我们将学到以下几个任务,第一、基本灰度变换操作,第二、二值化的应用,额外的还有GMM模型的操作等,我们先从前面开始,了解知识点…

设计和优化用于 AR、HUD 和高级显示系统的表面浮雕光栅

表面浮雕光栅是许多光学系统中的关键组件,在控制增强现实 (AR) 显示器、平视显示器 (HUD) 和其他先进光子器件中的光传播方面发挥着关键作用。作为在这个领域工作的工程师和设计师,您了解针对特定应用优化这…

游戏画质升级史的思考

画质代入感大众玩家对游戏的第一印象与评判标准 大众玩家还没到靠游戏性等内在因素来评判游戏的程度。 画面的重要性,任何时候都不能轻视。 行业就是靠摩尔定律来推动进步的。 NS2机能达到PS4到PS4PRO之间的水准,5050达到8G显存,都会引发连…

模块化架构与微服务架构,哪种更适合桌面软件开发?

前言 在现代软件开发中,架构设计扮演着至关重要的角色。两种常见的架构设计方法是模块化架构与微服务架构。它们各自有独特的优势和适用场景,尤其在C#桌面软件开发领域,模块化架构往往更加具有实践性。本文将对这两种架构进行对比&#xff0…

python学opencv|读取图像(三十八 )阈值自适应处理

【1】引言 前序学习了5种阈值处理方法,包括(反)阈值处理、(反)零值处理和截断处理,相关文章链接为: python学opencv|读取图像(三十三)阈值处理-灰度图像-CSDN博客 python学opencv|读取图像(三十四&#…

Windows蓝牙驱动开发-蓝牙 IOCTL

蓝牙驱动程序堆栈为配置文件驱动程序提供了多个 IOCTL,来收集有关以下内容的信息: 本地蓝牙无线电和系统; 远程蓝牙设备; 会使即插即用 (PnP) 管理器加载配置文件驱动程序的设备; 为收集有关本地蓝牙无线电和系统的…