重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
/** * @author admin * 該程序的功能為實現模擬銀行ATM自動取款機提款,查詢等功能. */ import Java.io.*; /*該類為實現客戶信息及部分功能*/ class Account { private String code =null; //信用卡號 private String name =null; //客戶姓名 private String password=null; //客戶密碼 private double money =0.0; //卡里金額 public Account(String code,String name,String password,double money) { this.code=code; this.name=name; this.password=password; this.money=money; } protected String get_Code() { return code; } protected String get_Name() { return name; } protected String get_Password() { return password; } public double get_Money() { return money; } /*得到剩余的錢的數目*/ protected void set_Balance(double mon) { money -= mon; } } /**********實現具體取款機功能*********/ class ATM { Account act; // private String name; // private String pwd; public ATM() { act=new Account("000000","Devil","123456",50000); } /***********歡迎界面***********/ protected void Welcome() { String str="---------------------------------"; System.out.print(str "\n" "歡迎使用Angel模擬自動取款機程序.\n" str "\n"); System.out.print(" 1.取款." "\n" " 2.查詢信息." "\n" " 3.密碼設置." "\n" " 4.退出系統." "\n"); } /**********登陸系統**********/ protected void Load_Sys() throws Exception { String card,pwd; int counter=0; BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); do { System.out.println("請輸入您的信用卡號:"); card=br.readLine(); System.out.println("請輸入您的密碼:"); pwd=br.readLine(); if(!isRight(card,pwd)) { System.out.println("您的卡號或密碼輸入有誤."); counter ; } else SysOpter(); }while(counter3); Lock_Sys(); } 回復獲取全部
創新互聯是一家專注于成都做網站、網站制作和成都服務器托管的網絡公司,有著豐富的建站經驗和案例。
它是程序的一種低級表示,可以運行于Java虛擬機上。將程序抽象成字節碼可以保證Java程序在各種設備上的運行
Java號稱是一門“一次編譯到處運行”的語言,從我們寫的java文件到通過編譯器編譯成java字節碼文件(.class文件),這個過程是java編譯過程;而我們的java虛擬機執行的就是字節碼文件。不論該字節碼文件來自何方,由哪種編譯器編譯,甚至是手寫字節碼文件,只要符合java虛擬機的規范,那么它就能夠執行該字節碼文件。
JAVA程序的運行
因為Java具有跨平臺特性,為了實現這個特性Java執行在一臺虛擬機上,這臺虛擬機也就是JVM,Java通過JVM屏蔽了不同平臺之間的差異,從而做到一次編譯到處執行。JVM位于Java編譯器和OS平臺之間,Java編譯器只需面向JVM,生成JVM能理解的代碼,這個代碼即字節碼,JVM再將字節碼翻譯成真實機器所能理解的二進制機器碼。
字節碼是怎么產生的?
我們所編寫的程序都是.java格式,通常在執行的時候也許點擊一下eclipse的運行鍵就可以在控制臺看到運行結果,但是也可以更酷一些,如果你裝了JDK,那就可以直接在以命令行的方式編譯運行你的.java文件,編譯后會形成.class文件,這個.class文件即字節碼。
字節碼怎么解讀?
上圖是編譯好的字節碼文件,即一堆16進制的字節,如果使用IDE去打開,也許看到的是已經被反編譯的我們所熟悉的java代碼,但這才是純正的字節碼
這里只介紹字節碼由哪些部分組成, 具體的意思自行百度或者看文尾的連接, 有較為詳細的講解
上圖即字節碼文件的組成部分, Class文件的結構不像XML等描述語言那樣松散自由。由于它沒有任何分隔符號,
所以,以上數據項無論是順序還是數量都是被嚴格限定的。哪個字節代表什么含義,長度是多少,先后順序如何,都不允許改變, 如上圖左側即每一部分規定的長度
魔數(Magic Number)
魔數是用來區分文件類型的一種標志,一般都是用文件的前幾個字節來表示。
比如0XCAFE BABE表示的是class文件,那么有人會問,文件類型可以通過文件名后綴來判斷啊?是的,但是文件名是可以修改的(包括后綴),那么為了保證文件的安全性,將文件類型寫在文件內部來保證不被篡改。
至于為什么是CAFE BABE估計大家也能猜到, 程序員與咖啡的不解之緣
版本號(Version)
版本號含主版本號和次版本號,都是各占2個字節。在此Demo種為0X0000 0033。其中前面的0000是次版本號,后面的0033是主版本號。通過進制轉換得到的是次版本號為0,主版本號為51。高版本的JDK能向下兼容以前版本的Class文件,但不能運行以后版本的Class文件,即使文件格式未發生任何變化. 這就是target參數的用處,可以在使用JDK 1.7編譯時指定-target 1.5
常量池(Constant Pool)
常量池是Class文件中的資源倉庫, 量池中主要存儲2大類常量:字面量和符號引用。字面量如文本字符串,java中聲明為final的常量值等等,而符號引用如類和接口的全局限定名,字段的名稱和描述符,方法的名稱和描述符。常量池是一個表結構,在表的內容前有一個類型的計數器,表示常量池的長度
上面的表中描述了11中數據類型的結構,其實在jdk1.7之后又增加了3種(CONSTANT_MethodHandle_info,CONSTANT_MethodType_info以及CONSTANT_InvokeDynamic_info)。這樣算起來一共是14種
訪問標志(Access_Flag)
訪問標志信息包括該Class文件是類還是接口,是否被定義成public,是否是abstract,如果是類,是否被聲明成final。通過上面的源代碼,我們知道該文件是類并且是public。
0x 00 21:是0×0020和0×0001的并集。其中0×0020這個標志值涉及到字節碼指令
類索引(This Class Name)
類索引用于確定類的全限定名
0×00 03 表示引用第3個常量,同時第3個常量引用第19個常量,查找得”com/demo/Demo”。#3.#19
父類索引(Super Class Name)
0×00 04 同理:#4.#20(java/lang/Object)
接口索引(Interfaces)
通過上邊字節碼圖可以看到,這個接口有2+n個字節,前兩個字節表示的是接口數量,后面跟著就是接口的表。我們這個類沒有任何接口,所以應該是0000。果不其然,查找字節碼文件得到的就是0000。
字段表集合(fields)
字段表用于描述類和接口中聲明的變量。這里的字段包含了類級別變量以及實例變量,但是不包括方法內部聲明的局部變量。接下來就是2+n個字段屬性。我們只有一個屬性a,所以應該是0001。查找文件果不其然是0001。
該區域含有字段的訪問標志, 訪問權限, 字段的名稱索引, 字段的描述符索引, 屬性表
描述符的作用就是用來描述字段的數據類型、方法的參數列表和返回值。而屬性表就是為字段表和方法表提供額外信息的表結構。對于字段來說,此處如果將字段聲明為一個static final msg = "aaa"的常量,則字段后就會跟著一個屬性表,其中存在一項名為ConstantValue,指向常量池中的一個常量,值為的"aaa"。
方法(methods)
包含訪問標志表, 方法名索引 , 方法描述符索引, 屬性表數量,等
Attribute
0×0001 :同樣的,表示有1個Attributes了。
0x000f : #15(“SourceFile”)
0×0000 0002 attribute_length=2
0×0010 : sourcefile_index = #16(“Demo.java”)
SourceFile屬性用來記錄生成該Class文件的源碼文件名稱。
通過設備開通WiFi連接獲取Mac地址是最可取的,代碼如下:
/**
* 設備開通WiFi連接,通過wifiManager獲取Mac地址
*/
public static String getMacFromWifi(Context context){
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
State wifiState = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();
if(wifiState == NetworkInfo.State.CONNECTED){//判斷當前是否使用wifi連接
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
if (!wifiManager.isWifiEnabled()) { //如果當前wifi不可用
wifiManager.setWifiEnabled(true);
}
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
return wifiInfo.getMacAddress();
}
return null;
}
用這個類吧.好的話,給我加加分.
import java.sql.*;
/**
* @功能: 一個JDBC的本地化API連接類,封裝了數據操作方法,只用傳一個SQL語句即可
* @作者: 李開歡
* @日期: 2007/
*/
public class ConnectionDemo {
/*
* 這里可以將常量全部放入另一個類中,以方便修改
*/
private static Connection conn;
private static Statement ps;
private static ResultSet rs;
private static final String DRIVER = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
private static final String URL = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb";
private static final String USER ="sa";
private static final String PASS = "sa";
public ConnectionDemo() {
// TODO Auto-generated constructor stub
ConnectionDemo.getConnection();
}
public static Connection getConnection(){
System.out.println("連接中...");
try {
Class.forName(ConnectionDemo.DRIVER);
conn = DriverManager.getConnection(ConnectionDemo.URL, ConnectionDemo.USER, ConnectionDemo.PASS);
System.out.println("成功連接");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
public static Statement getStatement(String sql){
System.out.println("執行SQL語句中...");
try {
ps = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
if(sql.substring(0, 6).equals("select")){
rs = ps.executeQuery(sql);
System.out.println("執行完查詢操作,結果已返回ResultSet集合");
}else if(sql.substring(0, 6).equals("delete")){
ps.executeUpdate(sql);
System.out.println("已執行完畢刪除操作");
}else if(sql.substring(0, 6).equals("insert")){
ps.executeUpdate(sql);
System.out.println("已執行完畢增加操作");
}else{
ps.executeUpdate(sql);
System.out.println("已執行完畢更新操作");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return ps;
}
public static ResultSet getResultSet(){
System.out.println("查詢結果為:");
return rs;
}
public static void closeConnection(){
System.out.println("關閉連接中...");
try {
if (rs != null) {
rs.close();
System.out.println("已關閉ResultSet");
}
if (ps != null) {
ps.close();
System.out.println("已關閉Statement");
}
if (conn != null) {
conn.close();
System.out.println("已關閉Connection");
}
} catch (Exception e) {
// TODO: handle exception
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
ConnectionDemo.getConnection();
String sql = "delete from type where id = 1";
ConnectionDemo.getStatement(sql);
String sql2 = "insert into type values(1,'教學設備')";
ConnectionDemo.getStatement(sql2);
String sql1 = "select * from type";
ConnectionDemo.getStatement(sql1);
ResultSet rs = ConnectionDemo.getResultSet();
System.out.println("編號 "+"類 型");
try {
while(rs.next()){
System.out.print(" "+rs.getInt(1)+" ");
System.out.println(rs.getString(2));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ConnectionDemo.closeConnection();
}
}
直接給你java關于telnet的一個例子
public?class?Main?{????public?static?void?main(String[]?args)?{????????try?{
TelnetClient?telnetClient?=?new?TelnetClient("vt200");??//指明Telnet終端類型,否則會返回來的數據中文會亂碼
telnetClient.setDefaultTimeout(5000);?//socket延遲時間:5000ms
telnetClient.connect("127.0.0.1",23);??//建立一個連接,默認端口是23
InputStream?inputStream?=?telnetClient.getInputStream();?//讀取命令的流
PrintStream?pStream?=?new?PrintStream(telnetClient.getOutputStream());??//寫命令的流
byte[]?b?=?new?byte[1024];????????????int?size;
StringBuffer?sBuffer?=?new?StringBuffer(300);????????????while(true)?{?????//讀取Server返回來的數據,直到讀到登陸標識,這個時候認為可以輸入用戶名
size?=?inputStream.read(b);????????????????if(-1?!=?size)?{
sBuffer.append(new?String(b,0,size));????????????????????if(sBuffer.toString().trim().endsWith("login:"))?{????????????????????????break;
}
}
}
System.out.println(sBuffer.toString());
pStream.println("exit");?//寫命令
pStream.flush();?//將命令發送到telnet?Server
if(null?!=?pStream)?{
pStream.close();
}
telnetClient.disconnect();
}?catch?(SocketException?e)?{????????????//?TODO?Auto-generated?catch?block????????????e.printStackTrace();
}?catch?(IOException?e)?{????????????//?TODO?Auto-generated?catch?block????????????e.printStackTrace();
}
}
}