绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
Java类、对象以及(静态)方法的探讨
2023-01-12 16:38:01

大家好,这是我的篇博客。在这里我想跟大家分享一下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 void main(String args[]){}是初学者包括我都很不解的一个函数形式。实际上,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,得到的结果大家肯定也知道了。

分享好友

分享这个小栈给你的朋友们,一起进步吧。

Java小专栏
创建时间:2019-08-08 21:32:06
Java专栏专注技术分享
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • lihong
    栈主

小栈成员

查看更多
  • 栈栈
  • 杨三百
  • at_1
  • gaokeke123
戳我,来吐槽~