理解Java(一)

2021/7/12 20:36:12

本文主要是介绍理解Java(一),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。

public class Hello{
 public static void main(String[] args){ 
 System.out.println("hello world"); 
 }
 }

以上面代码为例,展开以下问题的讨论:
一、Hello是我们自己定义的一个类,为什么写java代码的时候要写一个类?

答:在java中,类是组织代码的基本单元。在类中,可以编写方法。在方法里面,是需要JVM去执行的一行行代码。(我们平时所说的代码执行,就是这些方法中的代码)
JAVA语言中规定,大多数情况下,需要把执行的代码写在方法中,把方法写在类里。所以写代码时一般都先定义一个类,类中定义一个方法,然后把要执行的代码写在方法中。
这里所说的类中和方法中,具体的表现形式,就是一对花括号{}。

public class Student{ 
//这里是就是类中 
}
public class Student{
 public void run(){
  //这里就是方法中,当然这个方法整体也在类中
   }
   }

二、Hello类中的方法名为什么是main?
答:main方法是java中的一个特殊方法,它是作为java程序的唯一入口而存在的。

思考:一个项目中写了好几个百个类,每个类中的方法加起来一共又有上千个方法,那么当JVM加载了这么多个类和方法的时候,JVM应该从什么地方开始运行程序呢?

答:java中使用了一个固定的方法来作为程序的入口,无论写了多少个类,多少个方法,JVM一定是从这个固定的程序入口方法开始执行代码的,为了能够让JVM很好的识别这个入口方法,这个方法的编写形式就是固定的。

//这是java中的程序入口方法,一切代码的执行,都要从这里开始 
public static void main(String[] args){
 //方法中,就可以编写一行行需要运行的代码了
  }

我们在Hello类中定义一个main方法,让JVM运行Hello这个类时,可以直接接从类中
的程序入口方法,也就是main开始运行代码,又由于main方法是固定的写法,所以JVM很容易就把它识别出来,然后去运行它,main方法被运行了,那么main中的代码就会被一行行的顺序执行了。

思考;如果一个类中没有编写固定形式的main方法,那么使用java命令去运行这个类,会发生什么?为什么?在这情况下,如果还想使用这个Hello类,该怎么办?

  1. 类运行时,会报错,导致无法运行。
  2. 因为JVM在类中找不到指定的程序入口,即main方法。
  3. 要想使用这个类,我们需要定义一个其他类,比如Test类,在Test类中定义main方法,同时在main中调用这个类中的属性或方法,这样就用到这个类中的代码了。

三、System.out.println(“hello world”);,谈谈你对这句代码的理解。

答:System是JavaSE(Java 2 Platform, Standard Edition)的API(application program interface—>应用程序编程接口)中提供的一个类;(注意:S要大写)
out是System中的一个属性;
println是out中的一个方法;
System.out是访问System类中的一个属性,System.out.println是调用out中的一个方法,而println(“hello world”),就是将字符串"hello world"输出到命令行或控制台中。

四、在Hello类中为什么可以使用System这个类?

  1. System这个类所在的.java文件已经编写完成,并且已经编译成.class文件,System.java文件在src.zip中,编译好的System.class文件在rt.jar中。
  2. 这个.class文件所在位置,是JVM可以自动加载的指定路径,这样就可以保证JVM可以把这个.class文件中的字节码(也就是System这个类的代码),加载到JVM的内存中。
  3. 在Hello中,使用import(导入)关键字,将要使用的System类,引入到Hello中,如果System类是在java.lang包中进行定义的,或者System类和Hello类是在同一个包下面定义的,那么import语句可以省去不写。

当前 Hello类中,是没有声明 package(包)的,那么这时候 Hello类就算是在默认包中,而 System类,是在 java.lang包下定义的,所以当前情况下, Hello类中不使用import导入,也可以直接使用 System类。

五、使用java运行这个类时,JVM通过什么找到Hello.class文件的?

答:通过CLASSPATH环境变量配置的路径,来查找的Hello.class文件的,如果配置的路径不对,那么运行Hello时会报错(找不到这个类)。
配置JDK的三个环境变量的时候,若把CLASSPATH配置的路径就是点(.),表示当
前路径。

六、能否看到JVM去启动运行Hello类之前,确实从rt.jar中加载到了System这个类?

答:可以,只需要在运行Hello类的时候,加一个参数即可:
java -verbose Hello
verbose参数可以将JVM启动运行的时候加载的信息输出出来,由于内容太多,这里可以做一个输出重定向:
java -verbose Hello > a.txt
(这个操作在Windows里面也是一样的)
通过文件中记录的输出内容,就可以看到JVM在运行Hello这个类之前,整个加载的过程和顺序。(这里JVM其实就是给我们自己编写的类Hello,准备运行的环境。)
rt.jar中rt就是runtime的缩写,表示运行时环境的意思。

七、Hello这个类的名字和Hello.java的名字有什么联系吗?

答:

  1. 如果文件中的类是public修饰的,那么这个类的名字一定要和java文件的名字一样。
  2. 如果文件中的类不是public修饰的,那么这个类的名字和java文件的名字一样不一样都行。
  3. 类名和java文件名字的首字母要大写。(编程规范,默认遵循即可,小写也没有任何问题)


这篇关于理解Java(一)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程