十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
Java编译原理:
网站建设公司,为您提供网站建设,网站制作,网页设计及定制网站建设服务,专注于企业网站建设,高端网页制作,对成都茶艺设计等多个行业拥有丰富的网站建设经验的网站建设公司。专业网站设计,网站优化推广哪家好,专业成都网站推广优化,H5建站,响应式网站。
Java 虚拟机(JVM)是可运行Java 代码的假想计算机。只要根据JVM规格描述将解释器移植到特定的计算机上,就能保证经过编译的任何Java代码能够在该系统上运行。
一.Java源文件的编译、下载 、解释和执行
Java应用程序的开发周期包括编译、下载 、解释和执行几个部分。Java编译程序将Java源程序翻译为JVM可执行代码?字节码。这一编译过程同C/C++ 的编译有些不同。当C编译器编译生成一个对象的代码时,该代码是为在某一特定硬件平台运行而产生的。因此,在编译过程中,编译程序通过查表将所有对符号的引用转换为特定的内存偏移量,以保证程序运行。Java编译器却不将对变量和方法的引用编译为数值引用,也不确定程序执行过程中的内存布局,而是将这些符号引用信息保留在字节码中,由解释器在运行过程中创立内存布局,然后再通过查表来确定一个方法所在的地址。这样就有效的保证了Java的可移植性和安全 性。
运行JVM字节码的工作是由解释器来完成的。解释执行过程分三部进行:代码的装入、代码的校验和代码的执行。装入代码的工作由"类装载器"(class loader)完成。类装载器负责装入运行一个程序需要的所有代码,这也包括程序代码中的类所继承的类和被其调用的类。当类装载器装入一个类时,该类被放在自己的名字空间中。除了通过符号引用自己名字空间以外的类,类之间没有其他办法可以影响其他类。在本台计算机上的所有类都在同一地址空间内,而所有从外部引进的类,都有一个自己独立的名字空间。这使得本地类通过共享相同的名字空间获得较高的运行效率,同时又保证它们与从外部引进的类不会相互影响。当装入了运行程序需要的所有类后,解释器便可确定整个可执行程序的内存布局。解释器为符号引用同特定的地址空间建立对应关系及查询表。通过在这一阶段确定代码的内存布局,Java很好地解决了由超类改变而使子类崩溃的问题,同时也防止了代码对地址的非法访问。
随后,被装入的代码由字节码校验器进行检查。校验器可发现操作数栈溢出,非法数据类型转化等多种错误。通过校验后,代码便开始执行了。
Java字节码的执行有两种方式:
1.即时编译方式:解释器先将字节码编译成机器码,然后再执行该机器码。
2.解释执行方式:解释器通过每次解释并执行一小段代码来完成Java字节码程 序的所有操作。
通常采用的是第二种方法。由于JVM规格描述具有足够的灵活性,这使得将字节码翻译为机器代码的工作
具有较高的效率。对于那些对运行速度要求较高的应用程序,解释器可将Java字节码即时编译为机器码,从而很好地保证了Java代码的可移植性和高性能。
package com.zpp;public class Charge {
public static void main(String [] args) {
if(args.length ==0) {
System.out.println("parameter error!");
System.out.println("java com.zpp.Charge [int]");
return;
}
int min = Integer.parseInt(args[0]);
double money = 0.0;
if (min = 0) {
money =0.0;
System.out.println("not money");
} else if (min = 60) {
money = 2.0;
} else {
money = 2.0 + (min - 60) * 0.01;
}
System.out.println("please pay: " + money);
}
} 编译:javac -d . Charge.java运行:java com.zpp.Charge 111
/**
*
* @author san
*程序目的:验证3n+1猜想
*/
public class T {
public static void main(String[] args) throws Exception {
System.out.println("请输入一个测试自然数:\r\n");
Scanner scanner=new Scanner(System.in);
int i=scanner.nextInt();
long j=0;
if(i=0) {
System.out.println("请输入自然数!");
return;
}
while(i!=1) {
if(i%2==0) i/=2;
else i=3*i+1;
j++;
System.out.println("第"+j+"次转换,i="+i);
}
System.out.println("经过"+j+"次转换,得到结果!");
}
}
还是耐着性子给你做完了望采纳。。。
第七题
/**
* 动物抽象类
*/
public abstract class Animal {
//颜色
private String color;
//类别
private String type;
//吃饭
public abstract void eat();
//叫
public abstract void cry();
//get set方法省略。。。
}
/**
* 游泳的接口
*/
public interface Swimable {
//游泳
public void swim();
}
/**
* 兔子类
*/
public class Rabbit extends Animal {
@Override
public void eat() {
System.out.println("小兔几吃萝卜。。。");
}
@Override
public void cry() {
System.out.println("小兔几呵呵哒。。。");
}
}
/**
* 青蛙类
*/
public class Frog extends Animal implements Swimable {
public void swim() {
System.out.println("青蛙会蛙泳。。。");
}
@Override
public void eat() {
System.out.println("青蛙吃昆虫。。。");
}
@Override
public void cry() {
System.out.println("青蛙呱呱叫。。。");
}
}
public class Test {
public static void main(String[] args) {
//兔子
Rabbit rabbit = new Rabbit();
rabbit.eat();
rabbit.cry();
//青蛙
Frog frog = new Frog();
frog.eat();
frog.cry();
frog.swim();
}
}
第八题
/**
* 学生类
*/
public class Student {
//学号
private String id;
//姓名
private String name;
//性别
private char gender;
//年龄
private int age;
public Student(String id, String name, char gender, int age) {
this.id = id;
this.name = name;
this.gender = gender;
this.age = age;
}
//获得学号、姓名、性别、年龄
public String toString() {
return "学号:"+id +" 姓名:" + name + " 性别:" + gender + " 年龄:" + age;
}
//修改年龄
public void changeAge(int range) {
age = range;
}
//get set方法省略。。。
}
public class Test {
public static void main(String[] args) {
Student s = new Student("alibb008", "杰克马", '公', 18) ;
System.out.println(s.toString());
s.changeAge(50);
System.out.println(s.toString());
}
}
感慨啊。。。
你说的java源代码是指编译成的class文件前的java文件。
当我们运行.java文件时,它会被系统编译成.class文件,例如Test.java编译之后就是Test.class,
源文件就是指Test.java文件,
一般部署项目时,有.class文件就可以发布运行了,但是如果想修改这个系统,.class是不能修改的,要有.java文件才能修改
也可以上网去下反编译软件,就是能把.class文件大部分还原成.java文件的工具,但不是100%还原,而且如果不是正版的,小心有毒啊,什么的。
/**
* 2016年5月24日上午8:21:42
*
* @author 3306 TODO 建立甜品实体类
*
*/
public class SweetMeats {
private String name;// 名称
private String color;// 颜色
public SweetMeats() {
super();
}
public SweetMeats(String name, String color) {
super();
this.name = name;
this.color = color;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
}
/**
* 2016年5月24日上午8:23:40
*
* @author 3306 TODO 建立蛋糕类
*
*/
public class Cookies extends SweetMeats {
public Cookies() {
super();
// TODO Auto-generated constructor stub
}
public Cookies(String name, String color) {
super(name, color);
// TODO Auto-generated constructor stub
}
}
public class BananaPie extends SweetMeats {
public BananaPie() {
super();
// TODO Auto-generated constructor stub
}
public BananaPie(String name, String color) {
super(name, color);
// TODO Auto-generated constructor stub
}
}
public class PumpkinPie extends SweetMeats {
public PumpkinPie() {
super();
// TODO Auto-generated constructor stub
}
public PumpkinPie(String name, String color) {
super(name, color);
// TODO Auto-generated constructor stub
}
}
/**
* 2016年5月24日上午8:26:26
*
* @author 3306 TODO 唱歌接口
*
*/
public interface Sing {
/**
* 唱歌实现类
*/
public void sing();
}
public abstract class Microwave {
private String name;
private String brand;
private double price;
public Microwave(String name, String brand, double price) {
super();
this.name = name;
this.brand = brand;
this.price = price;
}
public Microwave() {
super();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public abstract void bakeDessert(SweetMeats sweet);
}
public class GeLanShiMicrowave extends Microwave {
public GeLanShiMicrowave() {
super();
// TODO Auto-generated constructor stub
}
public GeLanShiMicrowave(String name, String brand, double price) {
super(name, brand, price);
// TODO Auto-generated constructor stub
}
@Override
public void bakeDessert(SweetMeats sweet) {
if (sweet instanceof Cookies) {// 如果为蛋糕,则不烤
System.out.println("The GelanshiMicrowave don't bake cookies(" + getName() + ")");
} else {
System.out.println("We bake the banana or pumpkin pie for u(" + getName() + ")");
}
}
}
import java.util.Date;
public class MedilMicrowave extends Microwave implements Sing {
public MedilMicrowave() {
super();
// TODO Auto-generated constructor stub
}
public MedilMicrowave(String name, String brand, double price) {
super(name, brand, price);
// TODO Auto-generated constructor stub
}
@Override
public void sing() {
System.out.println("I'm MediMicrowave suck!");
}
@Override
public void bakeDessert(SweetMeats sweet) {
if (sweet instanceof Cookies) {
System.out.println("I don't think we can bake the cookies in my body(" + getName() + ")");
} else {
System.out.println("Let's do this!!!(" + getName() + ")");
sing();
System.out.println(showTime());
}
}
/**
* 获取当前时间
*
* @return Date
*/
public Date showTime() {
return new Date();
}
}
public class Kitchen {
/**
* 香蕉蛋糕
*/
public static SweetMeats buildBananaPie() {
return new BananaPie("banana", "yellow");
}
/**
* 蛋糕
*/
public static SweetMeats buildCookie() {
return new Cookies("cookie", "red");
}
/**
* 南瓜饼
*/
public static SweetMeats buildPumpkinPie() {
return new PumpkinPie("cookie", "red");
}
/**
* medi微波炉
*/
public static Microwave buyMedi() {
return new MedilMicrowave("myidea", "medi1", 300);
}
/**
* Gelan 微波炉
*
*/
public static Microwave buyGelan() {
return new GeLanShiMicrowave("gelan", "gelan1", 800);
}
public static void main(String[] args) {
SweetMeats cookie = buildCookie();
SweetMeats bananaPie = buildBananaPie();
SweetMeats pumpkiePie = buildPumpkinPie();
Microwave medi = buyMedi();
Microwave gelan = buyGelan();
medi.bakeDessert(cookie);
medi.bakeDessert(bananaPie);
medi.bakeDessert(pumpkiePie);
gelan.bakeDessert(cookie);
gelan.bakeDessert(bananaPie);
gelan.bakeDessert(pumpkiePie);
}
}