符合中小企业对网站设计、功能常规化式的企业展示型网站建设
本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...
商城网站建设因基本功能的需求不同费用上面也有很大的差别...
手机微信网站开发、微信官网、微信商城网站...
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代码的可移植性和高性能。
import java.util.Arrays;
import java.util.Collection;
public class Demo2 {
public static void main(String[] args) {
// 这是你的三个数
int[] arr = { 12, 32, 18 };
// 两层嵌套循环
for (int i = 0; i arr.length; i++) {
for (int j = 0; j i; j++) {
// 如果后者小于前者,让他们交换位置,一直循环
// 直到每个数字都从头到尾跟数组里的每个数字比较一次
if (arr[i] arr[j]) {
// 这三步就是交换位置,相信聪明的你一定看得懂了
arr[i] = arr[i] + arr[j];
arr[j] = arr[i] - arr[j];
arr[i] = arr[i] - arr[j];
}
}
}
//最后打印出来
for (int i = 0; i arr.length; i++) {
System.out.println(arr[i]);
}
}
}
资料拓展:
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论
虚拟机是遇到哪个类不认识了,就去加载哪个!
先运行语句①还是方法init(),其实是先运行 Class1 的 public Class1(),后运行 Book book1;
下面是依据
public class Test {
C c= new C();
public Test() {
System.out.println("hah");
}
C d= new C();
public static void main(String[] args) {
Test s = new Test();
}
}
class C{
public C(){
System.out.println( "c");
}
}
下面是结果
c
c
hah
为什么先运行class C却后输出结果呢
因为虚拟机是用栈来解释的,先进去的后出去!
先解释 Test ,可是这个时候需要解释掉C,所以当把 C完全初始化后,才能初始化 Test,所以先打出的 是“c”,但是先运行的的确是 class Test
写代码的顺序最好和实际操作的逻辑一样,先做什么后做什么,这样能最大程度的保证逻辑不会出什么问题。前提是你要熟悉业务逻辑。
还有开发的时候不要局限于一个方法的实现代码逻辑,先从整体上把方法都写出来,比如这个方法要做什么,只管写一个方法就行,具体怎么做可以在框架都搭完了再写,更好的就是全部用接口,接口全部写好了之后再写实现类,这样更好。
还有一个方法里面的代码最好不要太长,最好不要超过一个屏幕,不然看起来很累的,可以把一个方法分成好几个方法来写,那样BUG也会减少很多,逻辑性强。还有就是最好不要循环嵌套,嵌套个两三层后出问题就麻烦了,如果一定要嵌套就分出去一个方法就好。
还有就是要多集成,能通用的方法就通用写掉,写成工具类,如果有框架了,多多熟悉原本就有的工具类,都自己写的话代码多不说,还很容易出错,要学会活用别人的代码。
最后:多多交流,自己蒙头写只能一事无成。
最最后:手打真累...
呵呵 跟放在前后没有关系的,
你写这部分代码叫做 源代码,计算机执行的其实不是源代码,而是字节码。
因此当你执行时,计算机要先做处理,把源代码转换为字节码。
“ 难道java代码的执行顺序不是自上而下吗? 初学,见笑了! ”
java代码执行的确是自上而下,呵呵 但是指的是函数内部代码,也就是从main函数的第一句开始执行 以此类推 到最后一句 当然了,有些代码是执行不到的因为有分支结构和循环结构
比如
if(true)
{
//A
}else
{
//B
}
这里B代码就执行不到
不是类代码也是自上而下运行的,嘿嘿
java代码执行顺序一般按照以下规则:
1.
从上往下,从左往右。
2.
如果是在
if
表达式中,且有多个表达式,中间是(并去)关联的,那么,第一个不符合,那么右边的表达式都不会去比或计算了。同理,如果是多个表达式,但用
||(或者)
关联的,那么第一个表达式符号条件的话,就直接进入if
了,右边的表达式就不会再去计算了。