java静态对象在哪分配内存(Java类、对象以及(静态)方法的探讨)
大家好 ,这是我的第一篇博客 。在这里我想跟大家分享一下Java最基础的Class and Object ,也就是我们熟说的类和对象 ,以及对Java方法的探讨 。
初学时的我因为没有对这里面的每一行代码思考透彻 ,在学习Java中级时感到愈加困难 ,像是在搭建一栋地基不断摇晃的大楼 ,越往上盖 ,越是觉得自己轻浮 。因此 ,我决定用相较初学时不同的眼界 ,回过头来看最基础的代码 。也希望我的随笔能帮助到你们 ,或是得到你们的不一样的看法 。
完整代码请见下图 。首先 ,我用大楼来解释一下类Class和对象Object之间的关系 。
如果对象Object是一栋大楼 ,那么类Class就是大楼的建造图纸 。在图纸里面,我们需要写上:大楼里面的东西例如地板 、玻璃等(variables变量) ,以及大楼的安全保障怎么做(methods方法) 。如以下代码所示 。
相信你们已经懂了大楼的图纸应该怎么去写 ,接下来我将创建一个计算器类和一个(public)测试类 。计算机类有三个变量:num1, num2, result, 同时还有一个方法void Perform()用以计算num1+num2;测试类中没有定义新变量,但是它有一个主方法(我们将在后面详细说这个主方法)
在主方法中 ,我们将引用计算器类 ,创建一个新的object即cal 。这里我们需要用到关键字new(用以分配内存)和构造函数constructor:Calc cal; cal = new Calc();(构造函数也将在后面详细讲解)Calc cal;为引用 ,cal = new Calc();为创建新的object ,也可以直接写成Calc cal = new Calc();
创建好新的对象之后 ,我们就可以引用Calc类中的变量:cal.num1, cal.num2, cal.result 以及方法:cal.Perform();如果我们声明cal.num1=3;cal.num2=5;那么经过cal.Perform()方法之后 ,cal.result = cal.num1+cal.num2 = 8 ,再经过
System.out.println输出cal.result ,在控制台console得到结果8。
相信你们已经大致了解了如何引用类并创造一个新的对象 ,并引用类中的变量和方法进行计算 。不过我们还剩有两个未解释清楚的问题:主方法main()和构造函数constructor ,我们将一一进行解释 。
public static voidmain(Stringargs[]){}是初学者包括我都很不解的一个函数形式。实际上 ,Java运行时首先会执行main()方法 ,就和c语言一样 。而main方法是由Java虚拟机调用的,所以必须是public ,虚拟机调用的main()方法的时候 ,不需要产生任何对象,所以main()方法声明为static ,且不需要返回值 ,所以必须声明为void 。String[] args是main函数的形式参数,可以用来获取命令行用户输入进去的参数 。
接下来我们解释构造函数constructor 。我们在主方法中的对象 cal 就是由Calc()构造函数创建的 。实际上 ,无需我们进行定义 ,每一个类会自动生成与类同名的构造函数(方法) 。一个类中能有多个构造函数 。它们没有函数类型 ,不返回任何值 ,且默认类中定义的变量为0 。因此 ,如果我们不在主方法中声明cal.num1=3;cal.num2=5 ,那么输出结果将会是0 。如下图:
当然 ,我们还可以自行定义构造函数以改变变量的默认值 ,甚至是函数的参数 。
如下图所示 。我们取消了声明cal.num1=3;cal.num2=5 ,而是在构造函数Calc()中直接将3 ,5分别赋值给num1, num2,在另外一个构造函数Calc(int number1,int number2)中将number1 ,number2分别赋值给num1, num2 ,而在主函数中,对象cal2的构造函数中的3 ,4将分别赋值给number1 ,number2 。分别输出cal1.result和cal2.result ,得到的结果大家肯定也知道了。
好了这就是这次博客的全部内容 ,谢谢你们能够看完 。更详细的关于main()函数的解释可以看https://www.cnblogs.com/wannianma/archive/2011/04/03/wannianma.html
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!