java编译出错

java编译出错,第1张

由于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编写一个程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/10136505.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存