当前位置:首页 > 代码 > 正文

java计数器代码(java程序计数器的作用)

admin 发布:2022-12-19 21:34 97


今天给各位分享java计数器代码的知识,其中也会对java程序计数器的作用进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

计数器的java代码

Java技术与Java虚拟机中文JAVA技术网g0cVV+]

中文JAVA技术网I5Zz[ }'Og G6Y

说起Java,人们首先想到的是Java编程语言,然而事实上,Java是一种技术,它由四方面组成:Java编程语言、Java类文件格式、Java虚拟机和Java应用程序接口(Java API)。它们的关系如下图所示:

[)|)k3b9M#\)w%Q{~r0中文JAVA技术网:cP+] _2tRtm*K

中文JAVA技术网yz;_Y0FB

图1 Java四个方面的关系

,YWx ^L |Q0运行期环境代表着Java平台,开发人员编写Java代码(.java文件),然后将之编译成字节码(.class文件)。最后字节码被装入内存,一旦字节码进入虚拟机,它就会被解释器解释执行,或者是被即时代码发生器有选择的转换成机器码执行。从上图也可以看出Java平台由Java虚拟机和Java应用程序接口搭建,Java语言则是进入这个平台的通道,用Java语言编写并编译的程序可以运行在这个平台上。这个平台的结构如下图所示:

x[+DX0\:W-o@a0中文JAVA技术网"? c3Y6bj-_

中文JAVA技术网P @+O3lf_pJ b

中文JAVA技术网5h:OY TyL2\|Z

在Java平台的结构中, 可以看出,Java虚拟机(JVM) 处在核心的位置,是程序与底层操作系统和硬件无关的关键。它的下方是移植接口,移植接口由两部分组成:适配器和Java操作系统, 其中依赖于平台的部分称为适配器;JVM 通过移植接口在具体的平台和操作系统上实现;在JVM 的上方是Java的基本类库和扩展类库以及它们的API, 利用Java API编写的应用程序(application) 和小程序(Java applet) 可以在任何Java平台上运行而无需考虑底层平台, 就是因为有Java虚拟机(JVM)实现了程序与操作系统的分离,从而实现了Java 的平台无关性。

h6l-v;HV1SvYO0中文JAVA技术网-G5cAK(e w}

那么到底什么是Java虚拟机(JVM)呢?通常我们谈论JVM时,我们的意思可能是:中文JAVA技术网,T,Y5d(B5r

中文JAVA技术网yWv~s;J

对JVM规范的的比较抽象的说明;

b0r[/o_k+p0对JVM的具体实现;中文JAVA技术网Xdt8M1sP T_"_s

在程序运行期间所生成的一个JVM实例。中文JAVA技术网H k0g,~ hO\

中文JAVA技术网C3@ w6O-a

对JVM规范的的抽象说明是一些概念的集合,它们已经在书《The Java Virtual Machine Specification》(《Java虚拟机规范》)中被详细地描述了;对JVM的具体实现要么是软件,要么是软件和硬件的组合,它已经被许多生产厂商所实现,并存在于多种平台之上;运行Java程序的任务由JVM的运行期实例单个承担。在本文中我们所讨论的Java虚拟机(JVM)主要针对第三种情况而言。它可以被看成一个想象中的机器,在实际的计算机上通过软件模拟来实现,有自己想象中的硬件,如处理器、堆栈、寄存器等,还有自己相应的指令系统。中文JAVA技术网nC/D IHP,|

A)R-DFw o2X0JVM在它的生存周期中有一个明确的任务,那就是运行Java程序,因此当Java程序启动的时候,就产生JVM的一个实例;当程序运行结束的时候,该实例也跟着消失了。下面我们从JVM的体系结构和它的运行过程这两个方面来对它进行比较深入的研究。

Z6?gXm!~0Java虚拟机的体系结构

2XFZ@"I I,\0

e-i'_;P X a0刚才已经提到,JVM可以由不同的厂商来实现。由于厂商的不同必然导致JVM在实现上的一些不同,然而JVM还是可以实现跨平台的特性,这就要归功于设计JVM时的体系结构了。中文JAVA技术网{ v2TtMlG?"]*N

中文JAVA技术网,HK3YQN k

我们知道,一个JVM实例的行为不光是它自己的事,还涉及到它的子系统、存储区域、数据类型和指令这些部分,它们描述了JVM的一个抽象的内部体系结构,其目的不光规定实现JVM时它内部的体系结构,更重要的是提供了一种方式,用于严格定义实现时的外部行为。每个JVM都有两种机制,一个是装载具有合适名称的类(类或是接口),叫做类装载子系统;另外的一个负责执行包含在已装载的类或接口中的指令,叫做运行引擎。每个JVM又包括方法区、堆、Java栈、程序计数器和本地方法栈这五个部分,这几个部分和类装载机制与运行引擎机制一起组成的体系结构图为:中文JAVA技术网BW0EZCI

2o\d oz0中文JAVA技术网%K1Hl:f ~(@Y(U

图3 JVM的体系结构中文JAVA技术网0P/b(jt U$x

7{F*d8f7ySt:Q0JVM的每个实例都有一个它自己的方法域和一个堆,运行于JVM内的所有的线程都共享这些区域;当虚拟机装载类文件的时候,它解析其中的二进制数据所包含的类信息,并把它们放到方法域中;当程序运行的时候,JVM把程序初始化的所有对象置于堆上;而每个线程创建的时候,都会拥有自己的程序计数器和Java栈,其中程序计数器中的值指向下一条即将被执行的指令,线程的Java栈则存储为该线程调用Java方法的状态;本地方法调用的状态被存储在本地方法栈,该方法栈依赖于具体的实现。中文JAVA技术网 t?!Pz!B]

"^x1MT5qj0下面分别对这几个部分进行说明。

/}C2v7b:]%vo[|0中文JAVA技术网'z/@1RG7[E1`8B

执行引擎处于JVM的核心位置,在Java虚拟机规范中,它的行为是由指令集所决定的。尽管对于每条指令,规范很详细地说明了当JVM执行字节码遇到指令时,它的实现应该做什么,但对于怎么做却言之甚少。Java虚拟机支持大约248个字节码。每个字节码执行一种基本的CPU运算,例如,把一个整数加到寄存器,子程序转移等。Java指令集相当于Java程序的汇编语言。中文JAVA技术网 ^sH2X*b,Z

q3[ OT`z"M4V0Java指令集中的指令包含一个单字节的操作符,用于指定要执行的操作,还有0个或多个操作数,提供操作所需的参数或数据。许多指令没有操作数,仅由一个单字节的操作符构成。

P.R.Uxbfc0

o"o qq9_0虚拟机的内层循环的执行过程如下:中文JAVA技术网3Hn8B r,xE

MjHj(zBG t"m P0do{

l$Iz V!M9[0取一个操作符字节;中文JAVA技术网7[?3o?,v A|3b+O R

根据操作符的值执行一个动作;

I(^e)G)Hf6`0}while(程序未结束)中文JAVA技术网y}0J/|:so

中文JAVA技术网c|%L(ud

由于指令系统的简单性,使得虚拟机执行的过程十分简单,从而有利于提高执行的效率。指令中操作数的数量和大小是由操作符决定的。如果操作数比一个字节大,那么它存储的顺序是高位字节优先。例如,一个16位的参数存放时占用两个字节,其值为:

0H.w`wb}.X0中文JAVA技术网y{X;n.u4PT+e)D7\E

第一个字节*256+第二个字节字节码。中文JAVA技术网"V[]J!_0v+D

5^t6E[3aW![0指令流一般只是字节对齐的。指令tableswitch和lookup是例外,在这两条指令内部要求强制的4字节边界对齐。

#Rop'v6w FS0中文JAVA技术网g8Ai _)iw8r

对于本地方法接口,实现JVM并不要求一定要有它的支持,甚至可以完全没有。Sun公司实现Java本地接口(JNI)是出于可移植性的考虑,当然我们也可以设计出其它的本地接口来代替Sun公司的JNI。但是这些设计与实现是比较复杂的事情,需要确保垃圾回收器不会将那些正在被本地方法调用的对象释放掉。

~:Jin+U$zE SI7Y0

"j1lJ`7Dd0v"v0Java的堆是一个运行时数据区,类的实例(对象)从中分配空间,它的管理是由垃圾回收来负责的:不给程序员显式释放对象的能力。Java不规定具体使用的垃圾回收算法,可以根据系统的需求使用各种各样的算法。中文JAVA技术网'z/wgb.s

中文JAVA技术网\TMY[:H)Z#@ tr

java计数器

参考下面代码:

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

public class Test extends JFrame implements ActionListener {

private static final long serialVersionUID = 1L;

private JLabel lbl;

private JButton btn1;

private JButton btn2;

private JButton btn3;

private int con;

public static void main(String args[]) {

try {

Test test = new Test();

test.setVisible(true);

} catch (Exception e) {

e.printStackTrace();

}

}

public Test() {

super();

getContentPane().setLayout(null);

setTitle("Test");

setName("");

setResizable(false);

setBounds(100, 100, 300, 216);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

lbl = new JLabel();

lbl.setText(String.valueOf(con));

lbl.setBounds(84, 58, 96, 25);

getContentPane().add(lbl);

btn1 = new JButton();

btn1.setText("+ 1");

btn1.setBounds(29, 106, 64, 26);

btn1.addActionListener(this);

getContentPane().add(btn1);

btn2 = new JButton();

btn2.setText("- 1");

btn2.setBounds(99, 106, 64, 26);

btn2.addActionListener(this);

getContentPane().add(btn2);

btn3 = new JButton();

btn3.setText("Clear");

btn3.setBounds(169, 106, 64, 26);

btn3.addActionListener(this);

getContentPane().add(btn3);

}

public void actionPerformed(ActionEvent e) {

if (e.getSource() == btn1) {

con = Integer.parseInt(lbl.getText());

con++;

lbl.setText(String.valueOf(con));

}

if (e.getSource() == btn2) {

con = Integer.parseInt(lbl.getText());

con--;

lbl.setText(String.valueOf(con));

}

if (e.getSource() == btn3) {

lbl.setText(String.valueOf(0));

}

}

}

用java编写一个计数器或计时器

import java.awt.BorderLayout;

import java.awt.Container;

import java.awt.Font;

import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.JTextField;

public class TimerDemo extends JFrame implements ActionListener {

    private static final long serialVersionUID = 201306211111L;

    private JTextField screen = new JTextField("0");

    private JButton start = new JButton("开始");

    private JButton reset = new JButton("重置");

    private JPanel panel = new JPanel();

    private boolean isRunning;

    private int time;

    private int timeBetween;

    public TimerDemo(int timeBetween) {

        super("计时器");

        this.timeBetween = timeBetween;

        try {

            init();

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

    public TimerDemo() {

        super("计时器");

        this.timeBetween = 100;

        try {

            init();

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

    private void init() {

        panel.setLayout(new GridLayout());

        panel.add(start);

        panel.add(reset);

        start.addActionListener(this);

        reset.addActionListener(this);

        screen.setFont(new Font("幼圆", Font.BOLD, 60));

        screen.setHorizontalAlignment(JTextField.CENTER);

        screen.setEditable(false);

        Container c = getContentPane();

        c.setLayout(new BorderLayout());

        c.add(panel, BorderLayout.SOUTH);

        c.add(screen, BorderLayout.CENTER);

        this.setSize(200, 150);

        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        this.setResizable(false);

        this.setLocationRelativeTo(null);

        this.setVisible(true);

    }

    public static void main(String[] args) {

        new TimerDemo(1);// 设定 1ms/次

        // new TimerDemo();

    }

    @Override

    public void actionPerformed(ActionEvent e) {

        if (e.getSource() == start) {

            if (start.getText().equals("开始")) {

                start.setText("暂停");

                isRunning = true;

            } else if (start.getText().equals("暂停")) {

                start.setText("开始");

                isRunning = false;

            }

        }

        if (e.getSource() == reset) {

            start.setText("开始");

            screen.setText("0");

            isRunning = false;

            time = 0;

        }

        new Thread(new TimeZone()).start();

    }

    class TimeZone implements Runnable {

        @Override

        public void run() {

            while (isRunning) {

                time++;

                if (time = Integer.MAX_VALUE) {

                    screen.setText("ERROR");

                    JOptionPane.showMessageDialog(null, "ERROR");

                    isRunning = false;

                }

                screen.setText(String.valueOf(time));

                try {

                    Thread.sleep(timeBetween);

                } catch (Exception e) {

                    e.printStackTrace();

                }

            }

        }

    }

}

JAVA编写一个完整的计数器类Count,写出源代码

public class Count{ int countValue; Count(){ countValue=0; } public void increment() { countValue++; } public void decrement() { countValue--; } public void reset() { countValue=0; } public int getCountValue(){ return countValue; } public static void main(String args[]){ Count c = new Count(); c.increment(); System.out.println(c.getCountValue()); c.reset(); System.out.println(c.getCountValue()); } } 运行结果: 1 0

采纳哦

java 计算器代码

import javax.swing.*;

import javax.swing.border.Border;

import java.awt.*;

import java.awt.event.ActionListener;

import java.awt.event.ActionEvent;

import java.math.BigDecimal;

import java.math.RoundingMode;

import java.util.HashMap;

/**

* 我的计算器。Cheshi 继承于 JFrame,是计算器的界面

c*/

public class Cheshi extends JFrame {

private Border border = BorderFactory.createEmptyBorder(5, 5, 5, 5);

private JTextField textbox = new JTextField("0");

private CalculatorCore core = new CalculatorCore();

private ActionListener listener = new ActionListener() {

public void actionPerformed(ActionEvent e) {

JButton b = (JButton) e.getSource();

String label = b.getText();

String result = core.process(label);

textbox.setText(result);

}

};

public Cheshi(String title) throws HeadlessException {

super(title); // 调用父类构造方法

setupFrame(); // 调整窗体属性

setupControls(); // 创建控件

}

private void setupControls() {

setupDisplayPanel(); // 创建文本面板

setupButtonsPanel(); // 创建按钮面板

}

// 创建按钮面板并添加按钮

private void setupButtonsPanel() {

JPanel panel = new JPanel();

panel.setBorder(border);

panel.setLayout(new GridLayout(4, 5, 3, 3));

createButtons(panel, new String[]{

"7", "8", "9", "+", "C",

"4", "5", "6", "-", "CE",

"1", "2", "3", "*", "", // 空字符串表示这个位置没有按钮

"0", ".", "=", "/", ""

});

this.add(panel, BorderLayout.CENTER);

}

/**

* 在指定的面板上创建按钮

*

* @param panel 要创建按钮的面板

* @param labels 按钮文字

*/

private void createButtons(JPanel panel, String[] labels) {

for (String label : labels) {

// 如果 label 为空,则表示创建一个空面板。否则创建一个按钮。

if (label.equals("")) {

panel.add(new JPanel());

} else {

JButton b = new JButton(label);

b.addActionListener(listener); // 为按钮添加侦听器

panel.add(b);

}

}

}

// 设置显示面板,用一个文本框来作为计算器的显示部分。

private void setupDisplayPanel() {

JPanel panel = new JPanel();

panel.setLayout(new BorderLayout());

panel.setBorder(border);

setupTextbox();

panel.add(textbox, BorderLayout.CENTER);

this.add(panel, BorderLayout.NORTH);

}

// 调整文本框

private void setupTextbox() {

textbox.setHorizontalAlignment(JTextField.RIGHT); // 文本右对齐

textbox.setEditable(false); // 文本框只读

textbox.setBackground(Color.white); // 文本框背景色为白色

}

// 调整窗体

private void setupFrame() {

this.setDefaultCloseOperation(EXIT_ON_CLOSE); // 当窗体关闭时程序结束

this.setLocation(100, 50); // 设置窗体显示在桌面上的位置

this.setSize(300, 200); // 设置窗体大小

this.setResizable(false); // 窗体大小固定

}

// 程序入口

public static void main(String[] args) throws Exception {

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

Cheshi frame = new Cheshi("我的计算器");

frame.setVisible(true); // 在桌面上显示窗体

}

}

/**

* 计算器核心逻辑。这个逻辑只能处理 1~2 个数的运算。

*/

class CalculatorCore {

private String displayText = "0"; // 要显示的文本

boolean reset = true;

private BigDecimal number1, number2;

private String operator;

private HashMapString, Operator operators = new HashMapString, Operator();

private HashMapString, Processor processors = new HashMapString, Processor();

CalculatorCore() {

setupOperators();

setupProcessors();

}

// 为每种命令添加处理方式

private void setupProcessors() {

processors.put("[0-9]", new Processor() {

public void calculate(String command) {

numberClicked(command);

}

});

processors.put("\\.", new Processor() {

public void calculate(String command) {

dotClicked();

}

});

processors.put("=", new Processor() {

public void calculate(String command) {

equalsClicked();

}

});

processors.put("[+\\-*/]", new Processor() {

public void calculate(String command) {

operatorClicked(command);

}

});

processors.put("C", new Processor() {

public void calculate(String command) {

clearClicked();

}

});

processors.put("CE", new Processor() {

public void calculate(String command) {

clearErrorClicked();

}

});

}

// 为每种 operator 添加处理方式

private void setupOperators() {

operators.put("+", new Operator() {

public BigDecimal process(BigDecimal number1, BigDecimal number2) {

return number1.add(number2);

}

});

operators.put("-", new Operator() {

public BigDecimal process(BigDecimal number1, BigDecimal number2) {

return number1.subtract(number2);

}

});

operators.put("*", new Operator() {

public BigDecimal process(BigDecimal number1, BigDecimal number2) {

return number1.multiply(number2);

}

});

operators.put("/", new Operator() {

public BigDecimal process(BigDecimal number1, BigDecimal number2) {

return number1.divide(number2, 30, RoundingMode.HALF_UP);

}

});

}

// 根据命令处理。这里的命令实际上就是按钮文本。

public String process(String command) {

for (String pattern : processors.keySet()) {

if (command.matches(pattern)) {

processors.get(pattern).calculate(command);

break;

}

}

return displayText;

}

// 当按下 CE 时

private void clearErrorClicked() {

if (operator == null) {

number1 = null;

} else {

number2 = null;

}

displayText = "0";

reset = true;

}

// 当按下 C 时,将计算器置为初始状态。

private void clearClicked() {

number1 = null;

number2 = null;

operator = null;

displayText = "0";

reset = true;

}

// 当按下 = 时

private void equalsClicked() {

calculateResult();

number1 = null;

number2 = null;

operator = null;

reset = true;

}

// 计算结果

private void calculateResult() {

number2 = new BigDecimal(displayText);

Operator oper = operators.get(operator);

if (oper != null) {

BigDecimal result = oper.process(number1, number2);

displayText = result.toString();

}

}

// 当按下 +-*/ 时(这里也可以扩展成其他中间操作符)

private void operatorClicked(String command) {

if (operator != null) {

calculateResult();

}

number1 = new BigDecimal(displayText);

operator = command;

reset = true;

}

// 当按下 . 时

private void dotClicked() {

if (displayText.indexOf(".") == -1) {

displayText += ".";

} else if (reset) {

displayText = "0.";

}

reset = false;

}

// 当按下 0-9 时

private void numberClicked(String command) {

if (reset) {

displayText = command;

} else {

displayText += command;

}

reset = false;

}

// 运算符处理接口

interface Operator {

BigDecimal process(BigDecimal number1, BigDecimal number2);

}

// 按钮处理接口

interface Processor {

void calculate(String command);

}

}

关于java计数器代码和java程序计数器的作用的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/25362.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载