Java 程序运行机制

Java 程序运行机制

运行过程

  1. 源文件 (a.java)
  2. Java 编译器
  3. 字节码文件(a.class)
  4. 进入 JRE ,分别执行 类装载器-->字节码校验器-->解释器
  5. 系统平台,执行.

注释

  • JRE 中包含 JVM (JAVA虚拟机); 其中的字节码校验器也是 JAVA 安全性的一种体现.
  • 也正是因为有 JVM 的存在, 使得 JAVA 具有挂平台的特性; JVM 是和运行环境 OS 相联系的.
  • 计算机高级语言的类型主要有两种--编译型和解释型. JAVA 是两种类型的结合.

JDK, JRE, JVM

  • 总体关系: JVM \(\sqsubseteq\) JRE \(\sqsubseteq\) JDK
  • JVM: Java Virtual Machine. 用于执行 bytecode 字节码的 "虚拟计算机"; 如: JIT(Just In Time Compiler);
  • JRE: Java Runtime Environment. "Java 运行时环境". 包含: JVM, 库函数,运行 Java 应用程序时所必须的文件. 如: java, javaw, libs, rt.jar;
  • JDK: Java Development Kit. "Java 运行工具包". 包含: JRE, 程序编译器和调试器等用于程序开发的文件. 如: javac(将 .java 文件编译成 .class 字节码文件), jar, debugging, tools, javap;

第一个 JAVA 程序

  • 一个 .java 文件可以包含多个 class, 但是只能对其中一个 class 声明 public. 在编译时,会生成多个 .class 文件.
  • main 方法时 java 应用程序的入口, 有固定的书写格式 public static void main(String[] args) {...}

java命名规范

  • 所有变量、方法、类名的命名原则:见名知意(也就要求我们区分词性,应该用动词还是名词命名)
  • 类名:每个单词的首字母大写;如:Man;
  • 方法名:第一个单词小写;从第二个单词开始首字母大写,我们称之为“驼峰原则”。如:eat(), eatFood();
  • 类成员变量名:驼峰原则
  • 局部变量:驼峰原则
  • 常量:大写字母和下划线。如:MAX_VALUE;
  • java声明规范: 一行只声明 1 个变量

入门小游戏

  1. 概述:整个游戏的代码量很小, 主要使用了两个 Java 图形类中的几个常用方法;
  2. 使用的 Java 库有
    • import java.awt.*
    • import java.swing.*
  3. 插入图片
    • Image image = Toolkit.getDefaultToolkit().getImage("ImagePath")
  4. 加载窗口
    • public class BallGame extends JFrame() {...}
    • 很明显可以看出,这是继承了 JFrame 这个父类方法;
    • 为了实现动画效果, 采用的方法是: 间隔固定时间, 重画窗口;
  public class BallGame extends JFrame {

  private Image ball = Toolkit.getDefaultToolkit().getImage("image/ball.png");
  private Image desk = Toolkit.getDefaultToolkit().getImage("image/background.png");

  private double ball_abscissa = 100;
  private double ball_ordinate = 100;

  private double degree = 3.14/3;

  // Load Window
  private void launchFrame() {
      setSize(558, 320);
      // 以屏幕的左顶点为原点,向右为x正方向,向下为y正方向
      setLocation(50,50);
      setVisible(true);

      // 不断重画窗口
      while (true) {
      // repaint() 调用的 paint() 方法;
          repaint();

      // 间隔40ms重画一次窗口;
      // 需要加上异常处理机制,不然 sleep 方法会报错;
          try {
              Thread.sleep(40);
          } catch (Exception e) {
              e.printStackTrace();
            }  
      }
    }

    // Paint Window
    public void paint(Graphics graphics) {
        System.out.println("Once");
        graphics.drawImage(desk, 0, 0, null);
        graphics.drawImage(ball, (int)ball_abscissa, (int)ball_ordinate, null);

        ball_abscissa += 10*Math.cos(degree);
        ball_ordinate += 10*Math.sin(degree);

        // 5 代表球的半径
        // 40 代表窗口上边框的高度
        // 检测上下边界
        if (ball_ordinate < 5+40 || ball_ordinate > 320-5)
            degree = -degree;

        // 检测左右边界
        if (ball_abscissa < 5 || ball_abscissa > 558-5)
            degree = 3.14 - degree;
    }

    public static void main(String[] args) {
        BallGame game = new BallGame();
        game.launchFrame();
    }
  }

猜你喜欢

转载自www.cnblogs.com/rongyupan/p/12670443.html
今日推荐