一、Java的优点:
(1)可移植性好
(2)垃圾收集
(3)支持多线程
(4)没有麻烦的指针
(5)支持分布式开发
(6)面向对象
(7)安全、简单
Java与C#对比的好处:
(1)c#中有static constructor(静态构造函数),而java中包含静态块。
详细介绍一下:在java中使用“{}”称为代码块,根据代码块的定义位置及声明的关键字不同,代码块可以分成以下四部分:
a.普通块;b.构造块;c.静态块;d.同步块;
a.普通块:一个方法中出现的"{}",如:
public static void main(String args[]){
//普通代码块
{
.....
}
}
b.构造块:直接在类中定义的代码块,构造块优于构造方法先执行,如:
class Demo{
//构造块
{
......
}
public Demo(){//构造方法
}
}
c.静态块:关键字 static声明的代码块,用来静态属性初始化,静态块用于主方法执行,静态块优于构造块执行,并且只执行一次,如:
public class CodeDemo{
static{
//静态块
}
public static void main(String args[]){
}
}
d.同步块:介绍一下,java同步的实现有两种:d1.同步代码块块(就是我们要讲的同步块);d2.同步方法
d1.同步代码块:使用synchronized关键字进行同步代码块的声明,但是在使用此操作时必须明确的指出到底要锁定的是哪个对象,一般都是以当前对象为主:synchronized(对象this或者类.class){//需要同步的代码,一般是将this锁定},保证在synchronized(this)控制的这一段代码中只有一个线程在执行,不会有多个线程同时执行。如:
for(int i=0;i<50;i++){
synchronized(this){
if(this.ticket>0)
{
try{
Thread.sleep(10000);
}catch(InterruptedException e)
{
e.printStackTrace();
}
}
}
}
d2.同步方法:
public void run(){
for(int i=0;i<50;i++)
{
this.sale();//调用的同步方法
}
}
public synchronized void sale(){
if(this.ticket>0){
try{}
catch(){}//同上
}
}
(2)java中的main函数时必须是public static void main(String args[]){},否则JVM拒绝运;在C#中,main函数可以是private类型,protected也可以,可以没有参数,返回值int类型。
(3)java在继承、多态方面比C#强,java默认多态,而C#要求加上virtual(在父类上)和override(在子类上),而且C#要求不能改变原来的访问修饰符。
(4)c#中防止一个类被继承,要用到关键字sealed,而定义一个变量要用const;java则统一使用final.
(5)c#中要比较两个引用变量是否指向同一个对象,不能用java中的==,而要用object里的ReferenceEquals方法。如下:
a1==a2;object.RefereceEquals(a1,a2)。
(6)C#中没有原始类型的包装类,但是C#提供了自动装箱,拆箱需要强制转换。而java在jdk1.5以后就完全是自动拆装箱了。
java和C#还有很多区别,我只是列举了其中的一小部分,仅供大家参考。