.NET码农学Java - 1. 起步

因为各种原因,计划学习Java。自己已经做.NET开发几乎10年了,把语言级别的东西撸一遍估计不难。由于.NET和Java的相似性,准备比较着.NET/C#来学,一来自己容易理解,同时也巩固下.NET的知识。选择的参考书是《Java核心技术》。

第一个程序

第一个程序,hello world,代码很简单,更重要的是看清楚代码执行的原理。

先从C#开始,创建文件FirstSample.cs,写入以下代码并保存:

using System;

public class FirstSample
{
  public static void Main(string[] args)
  {
    Console.WriteLine("Hello C# World!");
  }
}

  

HelloWorld的代码总是很简单的,接下去可以编译了。打开一个shell窗口,定位到FirstSample.cs的同级目录,敲入

csc FirstSample.cs

同级目录下会生成一个新的文件,FirstSample.exe,直接执行,就可以在shell窗口看到“Hello C# World!”字样了。

Java的Hello World会非常类似,首先,创建文件FirstSample.java,写入代码:

public class FirstSample
{
    public static void main(String[] args)
    {
        System.out.println("Hello Java World!");
    }
}

接下去同样是编译。打开shell窗口,定位到FirstSample.java的同级目录,敲入

javac FirstSample.java

同级目录下同样生成一个新的文件,FirstSample.class。跟C#不一样,这个不能直接执行,继续在shell窗口敲入

java FirstSample

成功执行后,在shell窗口看到“Hello Java World!”

发生了什么?

Java和.NET的工作原理,都是把源代码编译成中间语言(bytecode和IL),然后由虚拟机(JVM和CLR)编译为native code。老生常谈的内容,这里不多说。这里想谈谈我对Java和.NET工作原理的理解。

想要执行中间语言,首先得启动JVM/CLR,所谓的启动,实际上是在OS上创建进程,然后把JVM/CLR host到该进程上。

回顾两个hello world,C#编译成的exe,执行的时候实际上做了这么些事情:创建一个新的进程,在进程上host一个CLR实例,把IL code加载到CLR里,然后开始由执行IL code。

Java的其实类似,只不过host JVM的进程是有java.exe(而不是FirstSample.class)创建。

到这里第一天的学习结束,接下去准备看数据类型。

时间: 2024-12-17 09:43:40

.NET码农学Java - 1. 起步的相关文章

.Net码农学Android---系统架构和基本概念

至此,你应该已经完成以下前期准备事情: 1.安装完JDK 2.安装完SDK(并在Manager中进行相关版本的更新) 3.相关IDE(如eclipse) 4.安装完ADT 5.安装完AVD(如果你是真机模拟的话也可以不安装) 前期环境搭建基本完成,并按照网上的教程可以运行出HelloWorld,确保可以流程走的通. 所谓会当凌绝顶,一览众山小.我学习新东西时总会从系统或全局的角度对它进行一个总览,这样才能从更高的角度去把握它,而且你对接下来的学习也会有一个系统的认知会让之后的学习更有条理和针对性

源码(03) -- java.util.Collection<E>

 java.util.Collection<E> 源码分析 --------------------------------------------------------------------------------- java.util.Collection<E>是一个接口,它的定义如下: 1 public interface Collection<E> extends Iterable<E> { 2 // Query Operations 3 //

微信公众账号第三方平台全网发布源码(java)- 实战测试通过

(更多资料,关注论坛:www.jeecg.org) package org.jeecgframework.web.rest.controller; import java.io.BufferedReader; import java.io.IOException; import java.io.PrintWriter; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import

非专业码农 JAVA学习笔记 6java工具类和算法-string

续<非专业码农 JAVA学习笔记 5 java工具类和算法> 五.字符串string 字符串和字符的差别:字符串双引号括起来”n”,字符用单引号括起来,表示一种符号’\n’ 1.string的主要方法和属性 类 方法或者属性 备注 定义string Stirng s=new string(“值”),string s=”值” 属性 string.length:string的长度为字节 方法startswith,endswith s.startwith(“值”)-以值为开头,s.endswith(

非专业码农 JAVA学习笔记 3 抽象、封装和类(2)

(2).静态域-放在内存公共存储单元,不放在特定的对象,用static修饰 (续上一篇<非专业码农 JAVA学习笔记 3 抽象.封装和类(1)>...) (3).静态初始器-由static引导的一对大括号括起来的语句组,作用跟构造函数相似 (4).最终域-final引导的,值在整个过程都不发生改变的 5.方法 (1)方法的定义:修饰词1 修饰词2…返回值类型 方法名(参数) throw[异常列表] 这里个人经验就是注意定义了返回值的方法,要在方法体里面增加return 该类型变量:此外遇到if

【java项目实践】详解Ajax工作原理以及实现异步验证用户名是否存在+源码下载(java版)

一年前,从不知道Ajax是什么,伴随着不断的积累,到现在经常使用,逐渐有了深入的认识.今天,如果想开发一个更加人性化,友好,无刷新,交互性更强的网页,那您的目标一定是Ajax. 介绍 在详细讨论Ajax是什么之前,先让我们花一分钟了解一下Ajax做什么.如图所示: 如上图展示给我们的就是使用Ajax技术实现的效果.伴随着web应用的越来越强大而出现的是等待,等待服务器响应,等待浏览器刷新,等待请求返回和生成新的页面成为了程序员们的最最头疼的难题.随着Ajax的出现使web应用程序变得更完善,更友

【源码】java包装类总结

1.包装类除了Void和Character,其他六个全部都继承自Number.Number是一个抽象类.如下: public abstract class Number implements java.io.Serializable { public abstract int intValue(); public abstract long longValue(); public abstract float floatValue(); public abstract double double

.Net码农学Android---五分钟了解布局

在android中应用的界面是以xml来组织的,这一点和WPF相似,通过配置xml文件我们可以灵活的构建出你自己想要的界面. 而在所有的xml界面文件中,根节点必须是布局,即先有布局,然后在布局中组织控件或嵌套布局,android中的布局有5种,熟悉各种布局的使用对我们以后开发中更好的组织界面大有益处,以下简单介绍. TableLayout 表格布局,就是类似我们在网页中以表格来组织控件的布局.以N行N列的形式排列出相应的控件. 1 <TableLayout 2 android:layout_w

从Java源码到Java字节码

Java最主流的源码编译器,javac,基本上不对代码做优化,只会做少量由Java语言规范要求或推荐的优化:也不做任何混淆,包括名字混淆或控制流混淆这些都不做.这使得javac生成的代码能很好的维持与原本的源码/AST之间的对应关系.换句话说就是javac生成的代码容易反编译. Java Class文件含有丰富的符号信息.而且javac默认的编译参数会让编译器生成行号表,这些都有助于了解对应关系. 关于Java语法结构如何对应到Java字节码,在JVM规范里有相当好的例子:Chapter 3.