C#转java开发注意事项

来源:互联网 发布:淘宝服装代理 编辑:程序博客网 时间:2024/05/22 07:01

最近换工作,准备C#转java了,网上看了一些文章,转载到这里,以备查询;

J2SEJava 2 PlatformStandard Edittion(Java 2 平台,标准版本),包含java核心类和GUI

J2EEJava 2 PlatformEnterprise Edition(Java 2 平台,企业版本),包含开发基于web的应用程序的类和接口,如ServletJava Server Pages以及Enterprise JavaBeans等。

J2MEJava 2 PlateformMicro Edition(Java 2 平台,微观版),包含对传呼机,移动电话,掌上电脑,汽车导航系统或其他无线设备等产品提供优化的运行时环境。

Java编译器javac.exejava解释器java.exe

1、  Java 使用 import导入命名空间。同C#using

2、  extends是用于继承的关键字,implements是用于实现接口的关键字。C#都是用冒号。

3、  Class类的访问控制符:publicprotectedprivatefriendly(默认)

默认可以称为friendly但是,java语言中是没有friendly 个修饰符的,这样称呼应该是来源于c++。默认的访问权限是包级访问权限。即如果写了一个类没有写访问权限修饰符,那么就是默认的访问权限,同一个包下的类都可以访问到,即使可以实例化该类 (当然如果这个类不具有实例化的能力除外,比如该类没有提供public的构造函数)。

public:可以供所有的类访问。

说明:

1)、每个编译单元(类文件)都仅能有一个public class 

2)public class的名称(包含大小写)必须和其类文件同名。

3)、一个类文件(*.java)中可以不存在public class。这种形式的存在的场景:如果我们在某个包内撰写一个class,仅仅是为了配合同包内的其他类工作。

4)class不可以是privateprotected

5)、如果不希望那个任何产生某个class的对象,可以将该类得所有构造函数设置成private。但是即使这样也可以生成该类的对象,就是class static的成员(属性和方法)可以办到。

protected:修饰的类为保护类,可以同包类和异包类访问。

private:修饰的类为私有类,外界无法访问。

Class的非访问控制符:abstractfinal(修饰的类又称最终类)

C#的密封类是sealed关键字。

Java 中的静态类能否实例化,参见如下代码:

public class A { public class B{}} 实例化BA a = new A(); B b = a.new B();

public class A { public static class B{}} 实例化BB b = new A.B();

4、  抽象类中不一定包含抽象方法,但是一旦某个类中说明了抽象方法,该类必须说明为抽象类。同C#一样。

5、  C#接口方法默认是public的,声明中不需要再使用public 修饰符,否则编译会报错,但是java默认也是public的,但是即使添加修饰符也不报错。

6、  类成员变量的访问权限:

public:紧接public的属性任何类都可以访问到。但是从类的封装性上来考 虑将一个类的属性定义成public一般很少使用, 在定义静态常量的时候通畅会这样定义。

如:public static final int PAGE_SIZE=10;

private:只有类本身内部的方法可以访问类的private属性,当然内部类也可以访问其外部类的private成员的。(属性和方法)

默认(friendly):包级可见,同一个包内的类可以访问到这个属性但 是从类的封装性特性来说很少这样使用类的属性的。

protected:关键字所处理的是所谓“继承”的观念。对于同一包的其他类,protected=默认,对于不同包的类,如果存在继承关系, baseClass存在protected属性,则可以被其自继承,而不同包的其他类则不能访问类的protected属性。

非访问控制符:staticfinal

使用关键字final声明的成员变量成为最终变量,更确切地说是常量。同C#const

final修饰符声明常量时,需要说明常量的数据类型并要初始化具体的数值。另外因为所有类对象的常量数据成员数值都一样,为了节省内存空间,常量通常声明为static

7、  java中没有静态构造函数,java中没有属性也没有特性,java中没有委托。

8、  类成员方法的访问权限:

访问控制符publicprotectedprivate,非访问控制符staticabstractfinalnativesynchronized

final:最终方法使得子类不能重新定义与父类同名的方法。

native:因为native方法的方法体是用其他语言在java程序外部实现的,所以native方法没有方法体,用一个分号结束。

例:public static native void nativeMessage();实际上该方法是用其他语言编写的。类似C#的是用DllImport

[DllImport("user32.dll", CharSet=CharSet.Auto)]

public static extern IntPtr CallWindowProc(IntPtr wndProc, IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam);

synchronized:该方法主要用于多线程程序中的线程协调和同步。

9、  Java的数组能够按照以下方式定义:

int[] list = new int[6];

int list[] = new int[6];

C#只能这样定义:int[] list = new int[6];

10、关于异常处理:如果一个Java方法需要抛出异常,则必须在方法声明中使用

throws关键字。其语法形式为:

ret-type methodName(parameterList) throws exceptionList{ … }

Java抛出的异常会沿着方法调用的层次结构一直传递到具备处理能力的调用方法,最高层次到main()方法为止。如果异常传递到main()方法,而main()不具备处理能力,也没有通过throws声明抛出该异常,将可能出现编译错误,或者导致程序异常终止。

C#则不用在方法声明中使用任何关键字,抛出后如果调用的方法有异常捕获则进行捕获,否则向上继续抛出。

11、关于将其他类型(非字符串类型)转化为字符串:

java使用如下静态方法:public static String valueOf(type variable)

C#则直接使用ToString()方式。

12、关于调用父类方法和构造函数:java使用superC#使用base关键字。

13java中接口的定义可以使用public abstract修饰符,如:

interface Pet {  public abstract void speak();  }

C#中不能这么定义,只能按下列方式:interface Pet{  void speak();  }

14、关于Object类:

Java包括7public类型的,2protected类型的。

Object类中的7public类型的方法分别是toString()equals()getClass()

hashCode()notify()nofifyAll()wait()方法。

2protected方法clone()finalize()方法。

转载地址:http://kenchell.blog.163.com/blog/static/2608830920129801117882
0 0