由于JDK是国际版的,在编译的时候,如果我们没有用-encoding参数指定我们的JAVA源程序的编码格式,则javacexe首先获得我们 *** 作系统默认采用的编码格式。
在编译java程序时,若我们不指定源程序文件的编码格式
JDK首先获得 *** 作系统的fileencoding参数(它保存的就是 *** 作系统默认的编码格式,如WIN2k,它的值为GBK)
然后JDK就把我们的java源程序从fileencoding编码格式转化为JAVA内部默认的UNICODE格式放入内存中。
然后,javac把转换后的unicode格式的文件进行编译成class类文件,此时class文件是UNICODE编码的,它暂放在内存中
对我们来说,我们最终获得的class文件是内容以UNICODE编码格式保存的类文件,它内部包含我们源程序中的中文字符串,只不过此时它己经由fileencoding格式转化为UNICODE格式了。当我们不加设置就编译时,相当于使用了参数:javac -encoding gbk xxjava,当然就会出现不兼容的情况。
解决方法
1使用-encoding 指定字符集
javac -encoding utf-8 xxjava
2把源文件编码修改成ASCII
先编译,利用java编译器(JDK自带的工具)把java文件转换成字节码文件(class文件)
这个时候生成的字节码也不是计算机能识别的,还要让jvm也就是java虚拟机解读,java虚拟机首先读入字节码、对字节码进行正确性检查,针对客户计算机平台生成对应的机器指令,由客户机器执行机器指令。
希望对你有帮助
通过Eclipse运行程序
启动Eclipse,在菜单中选择“文件 --> 新建 --> Java项目”,d出对话框:
图1 新建项目
填入项目名称,点击“完成”,创建项目成功,可以看到在 E:\java\workspace 目录下多出了一个Demo文件夹。在菜单中选择“文件 --> 新建 --> 类”,d出对话框:
图2 创建类
输入类名称,点击“完成”,成功创建一个HelloWorld类:
图3 新创建的类文件
将下面的代码输入到源文件,注意Java是大小写敏感的:public class HelloWorld {public static void main(String[] args){Systemoutprintln("Hello World!");}}点击运行按钮 ,或者在菜单中选择“运行 --> 运行”,就可以看到下方控制台输出了“Hello World!”:
图4 控制台输出
恭喜你,你成功编写并运行了第一个Java程序。打开Demo文件夹下的bin目录,出现了一个 HelloWorldclass 文件,这就是编译生成的字节码。与C、C++不同,Java编译的结果不是可执行文件,而是字节码文件。字节码文件不能直接运行,必须由JVM翻译成机器码才能运行,这就是为什么运行Java程序必须安装JVM的原因。
通过命令行运行程序
当然,你也可以直接输入命令来编译和运行Java。打开CMD,cd 到源文件所在目录,通过 javac filename 命令完成编译,通过 java classname 命令来运行程序,如下所示:
图5 通过命令编译并运行Java程序
在Eclipse中运行程序,实际上也是执行这些命令,并将输出结果显示到控制台。有了Eclipse,编程更加方便。
HelloWorld程序分析
分析上述代码,从程序开始处介绍。public class HelloWorld定义了一个类,类是 “public” 公共类型的,类名为“HelloWorld”。另外,Java 中主类名应该和要保存的 Java 文件名相同,也就是说,这里定义的类名是“HelloWorld”,则文件应该保存为“HelloWorldjava”。public static void main(String[] args)Java 中的主运行方法,它和 C/C++中的main()作用是一样的,就是所有的程序都从“main()”中开始执行。要执行 Java 程序,必须有一个包括主运行方法的类。至于“public static void”的含义,读者可以尝试着去掉,看看编译器会提示什么错误。Systemoutprintln("Hello world");“Systemoutprintln()”是 Javalang 包的一个方法,用来将字串“Hello world”输出到命令行窗口。
java编译后的是字节码。
字节码,为java源代码编译完成后,由JVM转换成的文件,可以在任何装有JVM的系统上,转化相应的机器语言。
机器码:即机器语言,表示的就是运行字节码文件后的二进制序列。
MusicPlayerjava
[java] view plain copy
package musicplayer;
import javaawtBorderLayout;
import javaawtContainer;
import javaawtToolkit;
import javaawteventActionEvent;
import javaawteventActionListener;
import javaxswingJButton;
import javaxswingJFrame;
import javaxswingWindowConstants;
/
@author Chandler
/
public class MusicPlayer extends JFrame{
private Container container;
private JButton playbutton;
private PlayBackThread playbackthread;
//默认构造函数
public MusicPlayer(String title){
super(title);
container = thisgetContentPane();
playbutton = new JButton("播放");
playbuttonsetSize(50,20);
playbuttonaddActionListener(new PlayActionListener());
thissetLayout(new BorderLayout());
thissetSize(500,400);
containeradd(playbutton,BorderLayoutCENTER);
Toolkit toolkit = ToolkitgetDefaultToolkit();
int x = (int)(toolkitgetScreenSize()getWidth()-thisgetWidth())/2;
int y = (int)(toolkitgetScreenSize()getHeight()-thisgetHeight())/2;
thissetLocation(x,y);
thissetVisible(true);
thissetDefaultCloseOperation(WindowConstantsEXIT_ON_CLOSE);
}
/
@param args the command line arguments
/
public static void main(String[] args) {
// TODO code application logic here
MusicPlayer musicplayer = new MusicPlayer("MusicPlayer");
}
class PlayActionListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
Systemoutprintln(egetActionCommand());
playbackthread = new PlayBackThread();
playbackthreadstart();
}
}
}
PlayBackThreadjava
[java] view plain copy
package musicplayer;
import javaxsoundsampledAudioFormat;
import javaxsoundsampledAudioSystem;
import javaxsoundsampledSourceDataLine;
import javaxsoundsampledLineUnavailableException;
import javaioRandomAccessFile;
import javautilScanner;
/
@author Chandler
/
public class PlayBackThread extends Thread{
private SourceDataLine dataline;
private final int dataOffset = 0x2e;
public PlayBackThread(){
super("playbackthread");
}
@Override
public void run(){
try{
RandomAccessFile raf = new RandomAccessFile("C:\\Users\\Chandler\\Documents\\NetBeansProjects\\MusicPlayer\\src\\musicplayer\\John Denver - Country Roadswav","r");
AudioFormat af;
af = new AudioFormat(44100,16,2,true,false);
dataline = (SourceDataLine)AudioSystemgetSourceDataLine(af);
datalineopen(af);
rafseek(dataOffset);
int hasRead=0;
datalinestart();
byte[] buff=new byte[4096];
Scanner input = new Scanner(Systemin);
while((hasRead=rafread(buff))>0){
// print(rafgetFilePointer(),buff);
datalinewrite(buff, 0, hasRead);
}
datalinestop();
} catch(Exception e){
eprintStackTrace();
}
}
public static void print(long pointer, byte[] buff){
Systemoutformat("%x: " ,pointer);
Systemoutformat("%x ", buff[0]);
Systemoutformat("%x ", buff[1]);
Systemoutformat("%x ", buff[2]);
Systemoutformat("%x ", buff[3]);
Systemoutprintln();
}
}
以上就是关于java编译出错全部的内容,包括:java编译出错、java程序运行原理、java编写一个程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)