java計數器
A. java中垃圾回收機制的原理是什麼
GC的工作原理: 引用計數,標記復制"引用計數"是一種簡單但速度很慢的垃圾回收技術.所有對象都有一個引用計數器,當有引用連接時計數器加1,當引用離開作用域時或者被置於NULL時,計數器-1,垃圾回收器會在所有包含對象引用的列表上進行遍歷,當發現某個對象的引用計數為0時,就釋放佔用的空間."標記復制"的運行機制,垃圾回收器遍歷包含所有引用的列表,當發現存活的對象引用時做上標記,這樣當遍歷完所有對象引用並做上標記的時候,執行垃圾回收,將沒有標記的對象堆空間釋放.
垃圾回收機制的優點:Java的垃圾回收機制使得java程序員不用擔心內存空間的分配,減少了內存溢出.但同時也犧牲了一定的性能.
B. 用java編寫一個計數器或計時器
importjava.awt.BorderLayout;
importjava.awt.Container;
importjava.awt.Font;
importjava.awt.GridLayout;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjavax.swing.JButton;
importjavax.swing.JFrame;
importjavax.swing.JOptionPane;
importjavax.swing.JPanel;
importjavax.swing.JTextField;
{
=201306211111L;
privateJTextFieldscreen=newJTextField("0");
privateJButtonstart=newJButton("開始");
privateJButtonreset=newJButton("重置");
privateJPanelpanel=newJPanel();
privatebooleanisRunning;
privateinttime;
privateinttimeBetween;
publicTimerDemo(inttimeBetween){
super("計時器");
this.timeBetween=timeBetween;
try{
init();
}catch(Exceptione){
e.printStackTrace();
}
}
publicTimerDemo(){
super("計時器");
this.timeBetween=100;
try{
init();
}catch(Exceptione){
e.printStackTrace();
}
}
privatevoidinit(){
panel.setLayout(newGridLayout());
panel.add(start);
panel.add(reset);
start.addActionListener(this);
reset.addActionListener(this);
screen.setFont(newFont("幼圓",Font.BOLD,60));
screen.setHorizontalAlignment(JTextField.CENTER);
screen.setEditable(false);
Containerc=getContentPane();
c.setLayout(newBorderLayout());
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);
}
publicstaticvoidmain(String[]args){
newTimerDemo(1);//設定1ms/次
//newTimerDemo();
}
@Override
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==start){
if(start.getText().equals("開始")){
start.setText("暫停");
isRunning=true;
}elseif(start.getText().equals("暫停")){
start.setText("開始");
isRunning=false;
}
}
if(e.getSource()==reset){
start.setText("開始");
screen.setText("0");
isRunning=false;
time=0;
}
newThread(newTimeZone()).start();
}
{
@Override
publicvoidrun(){
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(Exceptione){
e.printStackTrace();
}
}
}
}
}
C. 鐢╦ava緙栧緱璁$畻鍣ㄧ▼搴忚蔣浠跺拰婧愪唬鐮
java璁$畻鍣ㄦ簮紼嬪簭
java璁$畻鍣
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
class calculation extends JFrame
{public calculation() /*鏋勯犳柟娉*/
{super("璁℃暟鍣");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
initTextPanel(); /*鏂囨湰妗*/
initControlPanel(); /*鎺у埗閿*/
initKeyPanel(); /*鏁板瓧鍜岃繍綆楃*/
Container pane = getContentPane();
pane.setLayout(new BorderLayout());
pane.add(TextPanel,BorderLayout.NORTH);
pane.add(ControlPanel,BorderLayout.CENTER);
pane.add(KeyPanel,BorderLayout.SOUTH);
pack();
try
{UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
}
catch(Exception ex)
{;} /璁╅敭*璁劇疆Windons瑙傛劅*/
SwingUtilities.updateComponentTreeUI(this);
setResizable(false);
setVisible(true);
}
private void initTextPanel() /*璁劇疆鏂囨湰妗*/
{ TextPanel=new JPanel();
TextPanel.setLayout(new FlowLayout());
Resultarea =new JTextField("0",25);
Resultarea.setEditable(false); /*璁劇疆涓嶅彲緙栬緫*/
Color color=Color.white;
Resultarea.setBackground(color); /*棰滆壊*/
Resultarea.setHorizontalAlignment(JTextField.RIGHT); /*璁炬墥婊戞壆緗鏄劇ず浣嶇疆*/
TextPanel.add(Resultarea);
}
private void initControlPanel() /*璁劇疆鎺у埗閿鏄ョ伓*/
{ControlPanel=new JPanel();
ControlPanel.setLayout(new GridLayout(1,3,4,4));
JButton b1=new JButton("Backspace"); /*Backspace閿*/
b1.setFont(font1);
b1.addActionListener(new ActionListener()
{public void actionPerformed(ActionEvent e)
{String s1=Resultarea.getText();
int l=s1.length();
Resultarea.setText(s1.substring(0 ,l-1));
}
});
ControlPanel.add(b1);
JButton b2=new JButton("CE"); /*CE閿*/
b2.setFont(font1);
b2.addActionListener(new ActionListener()
{public void actionPerformed(ActionEvent e)
{Resultarea.setText("0");
isNew=true;
}
});
ControlPanel.add(b2);
JButton b3=new JButton("C"); /*C閿*/
b3.setFont(font1);
b3.addActionListener(new ActionListener()
{public void actionPerformed(ActionEvent e)
{Resultarea.setText("0");
pnum="";
operation="";
isNew=true;
}
});
ControlPanel.add(b3);
}
private void initKeyPanel() /*璁劇疆鏁板瓧閿鍜岃繍綆楃﹂敭*/
{String key[] = {"7","8","9","/","sqrt","4","5","6","*","%","1","2","3","-","1/x","0","+/-",".","+","="};
KeyPanel = new JPanel();
KeyPanel.setLayout(new GridLayout(4,5,4,4));
for(int i=0;i<20;i++)
{String label = key[i];
JButton b = new JButton(label);
b.setActionCommand(key[i]);
b.setFont(font2);
KeyPanel.add(b);
b.addActionListener(new ActionListener() /*鏃犲悕鐩戝惉鍣*/
{public void actionPerformed(ActionEvent e)
{Key_actionPerformed(e);
}
});
}
}
public void Key_actionPerformed(ActionEvent e) /*鏁板瓧閿鍜岃繍綆楃﹂敭鏃犲悕鐩戝惉鍣*/
{String s=(e.getActionCommand());
String st=Resultarea.getText();
if(s.equals("0")) /*杈撳叆鏁頒負0*/
{if(st.equals("0"))
return;
else
{if(!isNew)
Resultarea.setText(st+"0");
else
Resultarea.setText("0");
}
isNew=false;
return;
}
if(s.equals("+/-")) /*杈撳叆鏁頒負+/-*/
{double k=Double.parseDouble(st);
{if(k!=0)
display(-k);
}
return;
}
if(s.equals("1")||s.equals("2")||s.equals("3")||s.equals("4")||s.equals("5")||s.equals("6")||s.equals("7")||s.equals("8")||s.equals("9")) /*杈撳叆1-9*/
{if(!isNew)
Resultarea.setText(st+s);
else
{ Resultarea.setText(s);
isNew=false;
}
return;
}
if(s.equals(".")) /*杈撳叆灝忔暟鐐*/
{if(Resultarea.getText().indexOf(".")==-1) /*涓嶅瓨鍦ㄥ皬鏁扮偣*/
{if(isNew)
{Resultarea.setText("0.");
isNew=false;
}
else
Resultarea.setText(st+".");
}
return;
}
isNew=true; /*鎸変笅榪愮畻絎︼紝杈撳叆鏂扮殑鏁*/
if(s.equals("="))
{compute(s);
operation="";
}
else
{if(s.equals("+")||s.equals("-")||s.equals("*")||s.equals("/")) /*浜岀洰榪愮畻絎﹀彿*/
{if(operation.equals(""))
{pnum=Resultarea.getText();
operation=s;
}
else
compute(s);
}
else /*涓鐩榪愮畻*/
{Count count1=new Count(Double.parseDouble(st));
if(s.equals("sqrt"))
{
display(count1.sqrt());
}
else
{if(s.equals("1/x"))
{if(st.equals("0"))
{Resultarea.setText("闄ゆ暟涓嶈兘涓0.");
operation="";
pnum="";
}
else
display(count1.reciprocal()); /*奼傚掓暟*/
}
else
display(Double.parseDouble(st)/100); /*杈撳叆%錛屼嬌褰撳墠鏄劇ず鐨勫奸櫎浜100*/
}
}
}
}
private void compute(String s)
{if(s.equals("="))
{if(operation.equals(""))
return;
}
double data1=Double.parseDouble(pnum);
double data2=Double.parseDouble(Resultarea.getText());
Count count2=new Count(data1,data2); /*鍔犲噺涔橀櫎璁$畻*/
if(operation.equals("+"))
display((count2.plus()));
else
{if(operation.equals("-"))
display((count2.minus()));
else
{if(operation.equals("*"))
display((count2.multiply()));
else
if(operation.equals("/"))
{if(data2==0)
{Resultarea.setText("闄ゆ暟涓嶈兘涓0");
operation="";
pnum="";
return;
}
else
display((count2.divide()));
}
}
}
operation=""; /*絎﹀彿涓哄綋鍓嶇*/
pnum=Resultarea.getText();/*榪愮畻鏁頒負褰撳墠鏂囨湰鏁*/
}
public void display(double result) /*鏄劇ず杈撳嚭鏂規硶*/
{int a=(int)result;
if(a==result)
Resultarea.setText(String.valueOf(a));
else
Resultarea.setText(String.valueOf(result));
if(Resultarea.getText().equals("NaN"))
Resultarea.setText("杈撳叆鍑芥暟鏃犳晥");
}
private JPanel TextPanel; /*鏂囨湰妗嗘夋澘*/
private JTextField Resultarea; /*鏂囨湰妗*/
private JPanel ControlPanel; /*鎺у埗閿閿闈㈡澘*/
private JPanel KeyPanel; /*鏁板瓧閿鍜岃繍綆楃﹂敭闈㈡澘*/
private Font font1=new Font("Dialog",0, 10); /*鎺у埗閿瀛椾綋*/
private Font font2 = new Font("Dialog",0,10); /*鏁板瓧閿鍜岀﹀彿閿瀛椾綋*/
private String pnum=""; /*鍓嶆搷浣滄暟*/
private boolean isNew=true; /*鎺у埗鏄鍚︽槸鏂版暟*/
private String operation=""; /*榪愮畻絎*/
}
class tester /*嫻嬭瘯綾*/
{
public static void main(String[] args)
{
new calculation();
}
}
D. JRE和JVM有什麼關系
簡單地說,jre包含jvm,jvm是運行java的核心虛擬機,而運行java程序不僅需要核心虛擬機,還需要其他的類載入器,位元組碼校驗器,以及大量的基礎類庫。jre除了包含jvm外,還包含運行java程序的其他環境支持。
jre 即java運行時環境,全稱是Java Runtime Environment,是java程序運行的必須條件。jvm (Java Virtual Machine) 即java虛擬機,是可以運行java位元組碼文件的虛擬計算機。
(4)java計數器擴展閱讀
JRE是運行基於Java語言編寫的程序所不可缺少的運行環境。也是通過它,Java的開發者才得以將自己開發的程序發布到用戶手中,讓用戶使用。JRE中包含了Java virtual machine(JVM),runtime class libraries和Java application launcher,這些是運行Java程序的必要組件。
與大家熟知的JDK不同,JRE是Java運行環境,並不是一個開發環境,所以沒有包含任何開發工具(如編譯器和調試器),只是針對於使用Java程序的用戶。
金字塔結構 JDK=JRE+JVM+其它運行Java程序一般都要求用戶的電腦安裝JRE環境(Java Runtime Environment);沒有jre,java程序無法運行;而沒有java程序,jre就沒有用武之地。
E. 如何用JAVA寫一個計數器讓它能自動按順序產生學號或員工編號這類的資料呢
你的這個問題其實挺有意思的,你先想一下你這個表打算怎麼設計。
首先你先要設計一個年級班級表,比如年級表就是2015.2016.2015級。然後班級表。計算機系
01軟體工程02應用化學03。不細分了,就是按系就是班了。
那麼學生表就是
idstu_idgreedclassname.....其他信息
主鍵學號年級班級名字其他
大概就這個簡單設計下。greed和class在其他的表都有這個東西,所以就根據這兩個的規則來
生成學生的學號。在錄入的時候先查已經入庫的這個年紀班級下的所有記錄。如果有就有一個
學號的id比如201501110這個。這樣再新增就給下一個學生+1。如果沒有,那麼就從
201501001開始往上加。
這種問題其實你可以想一下你們學校的學號是怎麼設計的。
F. JAVA 類的對象的計數器
一樓用System.gc();來調用finalize()方法是不確定的,得到的結果是不穩定的。最好定義一個static類型的方法,來銷毀類例如:
public class Test {
public static int num = 0;
public Test() {
num ++;
System.out.println("NO=" + num);
}
//靜態刪除方法,用類名可以直接調用
public static void delete(Test o) {
num --;
System.out.println("NO=" + num);
o=null;
}
public static void main(String [] args) {
Test [] objs = new Test[5];
for(Test obj: objs) {
obj = new Test();
}
Test.delete(objs[1]);
Test.delete(objs[0]);
}
}