文本java
Ⅰ jvm如何在運行時動態把java文本編譯成class,然後載入到jvm
為了在Java程序運行時動態編譯Java源代碼並生成Class文件,避免將編譯產物存到文件中,可以採用特殊的方法,例如自定義實現JavaFileManager和JavaFileObject。這類操作較為復雜,但提供了一種靈活的解決方案。
實現策略可以分為兩步:首先在運行時編譯Java源代碼,獲取編譯後的位元組碼;其次,使用自定義類載入器在運行時定義這些類。通過這種方式,無需文件操作,直接在內存中完成編譯與載入過程。
在使用編譯器API進行動態編譯時,可以遵循上述步驟。涉及的關鍵類JavaFileManager和JavaFileObject需要自定義實現,以滿足特定的文件管理需求。
然而,在嘗試使用Java11環境下運行上述代碼時,可能會遇到編譯失敗的問題,而Java8環境下則能正常運行。具體原因尚未查明,可能涉及Java版本的兼容性或API實現細節的變動。
Ⅱ java解決中文亂碼轉碼
Java解決中文亂碼轉碼的方法是使用正確的字元編碼方式。在Java中,常用的字元編碼方式有UTF-8、GBK等。
亂碼的原因在於編碼方式的不匹配,比如在一個使用UTF-8編碼的環境中,如果使用了GBK編碼去讀取數據,就會導致中文亂碼。因此,解決亂碼問題的關鍵是確保在相同的環境中使用相同的編碼方式。
具體解決方法可以分為以下幾個方面:
1. 確保源代碼文件本身保存時使用的編碼方式是正確的。在Java開發環境中,一般推薦使用UTF-8編碼方式保存源代碼文件。
2. 在讀取和寫入文件時,需要指定正確的字元編碼方式。例如,在使用Java讀取和寫入文本文件時,可以通過在FileInputStream和FileOutputStream上分別包裝InputStreamReader和OutputStreamWriter,並指定正確的字元編碼方式,以確保讀取和寫入的數據使用相同的編碼方式。
3. 對於Web應用程序,需要在HTTP響應中設置正確的字元編碼方式。在Java Web應用程序中,可以通過在response對象中設置Content-Type屬性,指定字元編碼方式為UTF-8,以確保瀏覽器正確顯示中文。
總之,解決Java中的中文亂碼問題需要注意源代碼文件、文件讀寫和Web應用程序等方面的編碼方式設置,確保在相同的環境中使用相同的編碼方式。
Ⅲ Java中print與println的區別是具體用法
Print與Println的區別
1、輸出方式不同。
Print在輸出完信息不換行,Println在輸出完信息自動換行。
print將它的參數顯示在命令窗口,並將輸出遊標定位在所顯示的最後一個字元之後。
println將它的參數顯示在命令窗口,並在結尾加上換行符,將輸出遊標定位在下一行的開始。
2、輸出結果不同。
print是用於格式化輸出的。
println在要輸出的內容後自動加了回車換行,這個函數不能用輸出格式。
3、具體演示不用。
演示(假設文件在E:/A文件夾下):
java文本文件抒寫如下代碼:
classA{
publicstaticvoidmain(String[]args){
System.out.print("a");
System.out.print("a");
}
}
結果如下:
aa
Println
java文本文件抒寫如下代碼:
classB{
publicstaticvoidmain(String[]args){
System.out.println("b");
System.out.println("b");
}
}
結果如下:
b
b
(3)文本java擴展閱讀:
除了所提問的print和println,java還有一種繼承自c的輸出方式---printf。
printf()函數是格式化輸出函數,一般用於向標准輸出設備按規定格式輸出信息。它的調用格式為:printf("<格式化字元串>",<參量表>)。
格式輸出,它是c語言中產生格式化輸出的函數(在stdio.h中定義)。用於向終端(顯示器、控制台等)輸出字元。格式控制由要輸出的文字和數據格式說明組成。要輸出的文字除了可以使用字母、數字、空格和一些數字元號以外,還可以使用一些轉義字元表示特殊的含義。
Printf
java文本文件抒寫如下代碼:
classC{
publicstaticvoidmain(String[]args){
inta=1;
doubleb=2;
System.out.printf("%d",a);
System.out.println();
System.out.printf("%f",b);
System.out.println();
System.out.printf("%.2f",b);
}
}
Ⅳ java編譯文本編輯器
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class EditorJFrame extends JFrame implements ActionListener, ItemListener, MouseListener
{
private JTextField text_size; //字型大小文本行
private JCheckBox checkbox_bold, checkbox_italic; //粗體、斜體復選框
private JButton button_cut, button_, button_paste; //剪切、復制、粘貼按鈕
private JTextArea textarea; //文本區
private JPopupMenu popupmenu; //快捷菜單
private JDialog dialog; //出錯提示對話框
private JLabel label_dialog; //對話框中的標簽
public EditorJFrame()
{
super("文本編輯器"); //默認BorderLayout布局
this.setSize(500,300);
this.setLocation(300,240);
this.setDefaultCloseOperation(EXIT_ON_CLOSE); //單擊窗口關閉按鈕時,結束程序運行
textarea = new JTextArea("TextArea");
textarea.addMouseListener(this); //為文本區注冊滑鼠事件監聽器
this.add(textarea); //文本區添加到框架的中部
JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT)); //面板為流布局,左對齊
this.add(panel,"North"); //面板添加到框架的北部
text_size = new JTextField("12",10);
panel.add(text_size);
text_size.addActionListener(this); //注冊文本行的單擊事件監聽器
checkbox_bold = new JCheckBox("粗體"); //復選框
panel.add(checkbox_bold);
checkbox_bold.addItemListener(this); //注冊復選框的選擇事件監聽器
checkbox_italic = new JCheckBox("斜體");
panel.add(checkbox_italic);
checkbox_italic.addItemListener(this);
this.addmyMenu(); //調用自定義方法,添加菜單
this.setVisible(true);
}
private void addmyMenu() //添加主菜單、快捷菜單、對話框
{
JMenuBar menubar = new JMenuBar(); //菜單欄
this.setJMenuBar(menubar); //框架上添加菜單欄
JMenu menu_file = new JMenu("文件"); //菜單
menubar.add(menu_file); //菜單欄中加入菜單
menu_file.add(new JMenuItem("打開")); //生成菜單項並加入到菜單
menu_file.add(new JMenuItem("保存"));
menu_file.addSeparator(); //加分隔線
JMenuItem menuitem_exit = new JMenuItem("退出");
menu_file.add(menuitem_exit);
menuitem_exit.addActionListener(this); //為菜單項注冊單擊事件監聽器
JMenu menu_edit = new JMenu("編輯");
menubar.add(menu_edit);
JMenu menu_style = new JMenu("字形");
menu_style.add(new JCheckBoxMenuItem("粗體")); //復選菜單項
menu_style.add(new JCheckBoxMenuItem("斜體"));
menu_edit.add(menu_style); //菜單加入到菜單中成為二級菜單
JMenu menu_color = new JMenu("顏色");
menu_edit.add(menu_color);
ButtonGroup buttongroup = new ButtonGroup(); //按鈕組
JRadioButtonMenuItem rbmi_red = new JRadioButtonMenuItem("紅",true); //單選菜單項
buttongroup.add(rbmi_red); //單選菜單項添加到按鈕組
menu_color.add(rbmi_red); //單選菜單項添加到菜單
JRadioButtonMenuItem rbmi_green = new JRadioButtonMenuItem("綠",true);
buttongroup.add(rbmi_green);
menu_color.add(rbmi_green);
JRadioButtonMenuItem rbmi_blue = new JRadioButtonMenuItem("藍",true);
buttongroup.add(rbmi_blue);
menu_color.add(rbmi_blue);
menubar.add(new JMenu("幫助"));
popupmenu = new JPopupMenu(); //彈出式菜單對象
JMenuItem menuitem_cut = new JMenuItem("剪切");
menuitem_cut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,InputEvent.CTRL_MASK));//設置快捷鍵Ctrl+X
popupmenu.add(menuitem_cut); //加入剪切菜單項
menuitem_cut.addActionListener(this);
JMenuItem menuitem_ = new JMenuItem("復制");
menuitem_.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK));//設置快捷鍵Ctrl+C
popupmenu.add(menuitem_);
menuitem_.addActionListener(this);
JMenuItem menuitem_paste = new JMenuItem("粘貼");
menuitem_paste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,InputEvent.CTRL_MASK));//設置快捷鍵Ctrl+V
popupmenu.add(menuitem_paste);
menuitem_paste.addActionListener(this);
textarea.add(popupmenu); //文本區添加快捷菜單
dialog = new JDialog(this,"提示");
dialog.setSize(240,80);
label_dialog = new JLabel("",JLabel.CENTER);
dialog.add(label_dialog);
dialog.setDefaultCloseOperation(HIDE_ON_CLOSE); //單擊對話框的關閉按鈕時,隱藏對話框而不結束程序運行
}
public void actionPerformed(ActionEvent e) //單擊事件處理程序
{
if(e.getActionCommand()=="退出") //不能用switch(int)語句
System.exit(0); //單擊菜單項時結束程序
if(e.getActionCommand()=="剪切")
textarea.cut(); //將選中文本剪切送系統剪貼板
if(e.getActionCommand()=="復制")
textarea.();
if(e.getActionCommand()=="粘貼")
textarea.paste();
if(e.getSource()==text_size) //單擊文本行時,改變字型大小
{
int size=0;
try
{
size = Integer.parseInt(text_size.getText());
if (size<=0 || size>72)
throw new Exception("SizeException"); //拋出異常對象
java.awt.Font font = textarea.getFont();
textarea.setFont(new Font(font.getName(),font.getStyle(),size));
}
catch(NumberFormatException nfe)
{
label_dialog.setText("\""+text_size.getText()+"\" 不能轉換成整數,請重新輸入!");
dialog.setLocation(this.getX()+100,this.getY()+100);
dialog.setVisible(true);
}
catch(Exception ex)
{
if (ex.getMessage()=="SizeException") //捕獲自己拋出的異常對象
{
label_dialog.setText(size+" 字型大小不合適,請重新輸入!");
dialog.setLocation(this.getX()+100,this.getY()+100);
dialog.setVisible(true);
}
}
finally{}
}
}
public void itemStateChanged(ItemEvent e) //復選框選擇事件處理程序
{ //實現ItemListener介面中的方法
Font font = textarea.getFont();
int style = font.getStyle();
if (e.getSource()==checkbox_bold)
style = style ^ 1; //整數的位運算,異或^
if (e.getSource()==checkbox_italic)
style = style ^ 2;
textarea.setFont(new Font(font.getName(),style,font.getSize()));
}
public void mouseClicked(MouseEvent mec) //單擊滑鼠時觸發
{ //實現MouseListener介面中的方法
if (mec.getModifiers()==mec.BUTTON3_MASK) //單擊的是滑鼠右鍵
popupmenu.show(textarea,mec.getX(),mec.getY());//在滑鼠單擊處顯示快捷菜單
}
public void mousePressed(MouseEvent mep) { }
public void mouseReleased(MouseEvent mer) { }
public void mouseEntered(MouseEvent mee) { }
public void mouseExited(MouseEvent mex) { }
public void mouseDragged(MouseEvent med) { }
public static void main(String arg[])
{
new EditorJFrame();
}
}
Ⅳ java文件格式是什麼
Java一般存在兩種文件格式,如下:
1.*.java文件是保存源代碼的文本文件
(*代表類名)
使用
javac
*.java可以編譯該文件
使用
java
*可以運行該類
2.*.class是用於保存
Java類的
二進制編碼以及Class對象,每一個
Java類都有一個解釋該類特徵的
Class對象。*.jar文件
是一種壓縮文件格式