`
javawebsoa
  • 浏览: 408350 次
社区版块
存档分类
最新评论

Java与C#的比较学习记录(4)

 
阅读更多

1、多线程
多线程模型基本相同,都有线程和线程池概念,调用方法一基本相同。线程基类都叫Thread.但由于Java不支持函数引用(delegate),因此线程代码只能以实现了Runnable或者继承Thread的对象的run方法来完成,相对C#来说不够简洁。Java中的线程组和C#中线程池概念类似,但区别还是非常大,Java中的线程组是可以自己创建自己管理的,比较灵活,可控性比较强,而C#中的线程池是由DotNet框架维护,与操作系统比较紧密,是为了减少线程创建开销,而实现的一种线程共享机制,因此性能上比较好。当然,用户的可控性就差一些。 另外Java中的线程组最终可以形成一个线程组树,而C#中的线程池则没有这种机制。
在多线程同步方便,Java提供的机制比较简单,而C#提供的控制更丰富一些。

2、类

主要不同如下:
1)默认的访问级别不同,不特别指明访问级别的情况下,Java默认是公共的(public),C#是私有的;
2)Java的继承是是用extends,实现接口是implements,而C#都是冒号(:)
3)C#提供的internel,Java没有对应的控制方式。
4) Java 不能定义静态类;
当然这都是细节上的差异,但对于嵌套类,双方的处理差别还是很大的,C# 对嵌套类的处理比较简单,嵌套类只是一种定义在类中的类类型,除了访问需要使用路径外(类A中嵌套类别B,则类B的访问是A.B),其它与正常类没什么不同。但Java的处理要复杂些,如果类B是类A中的嵌套类,Java认为类B是属于类A的实例对象的(如果在第3方使用B时,不能用A.B theB = new A.B()完成实例化,而必须类似A theA = new A();A.B theB = theA.new B() 来完成实例化。而且对B有如下限制:
1)在如果不指明B是静态类,则在B中不能定义静态方法,但这个静态指示定义的静态类跟C#有很大的差别,这里的静态指示(static)只是告诉编译器类B有静态方法。虽然类B有static修饰,类B还是可以实例化的,还是是动态类。
2)对于顶层类来说,可以定义静态方法,而嵌套类如果需要定义类方法,则必须使用static修饰符号来修饰类声明。
因此严格来说Java没有C# 那样严格意义上的静态类,Java的静态方法应该叫类方法比较好。

总体来说,Java和C#的机制和语法其实都很相似,但细节上还是有很多的差异。具体的差异可以在实践中再去学习,对于比较生僻的地方的差异也没比要都弄清楚,毕竟学习语言是用来编程解决问题的,而不是用来咬文嚼字的。

测试:

public class NestedClass {
	protected static String getName1()
	{
		return "xxxx";
	}
	public static String getName2()
	{
		return "dddd";
	}
	private static String getName3()
	{
		return "private";
	}
	protected   String getName4()
	{
		return "xxxx";
	}
	public   String getName5()
	{
		return "dddd";
	}
	private   String getName6()
	{
		return "private";
	}
	public String getName8()
	{
		return "";
	}
	public static String getName9()
	{
		class class1
		{
			public String getName()
			{
				return "ddd";
			}
			public String getName1()
			{
				return "ddd";
			}
		}
		return "";
	}
	public String getName7()
	{
		class class2
		{
			public String getName()
			{
				return "ddd";
			}
			public String getName1()
			{
				return "ddd";
			}
		}
		class2 theA = new class2();
		
		//匿名类
		Runnable theRun = new Runnable(){

			@Override
			public void run() {
				// TODO Auto-generated method stub
				getName1();
	        	getName2();
	        	getName3();
	        	getName4();
	        	getName5();
	        	getName6();
			}
			
		};
		return "ddd";
	}
    protected class InnerClass1
    {
        public  void doSomething1()
        {
        	getName1();
        	getName2();
        	getName3();
        	getName4();
        	getName5();
        	getName6();
        }
        protected  void doSomething2()
        {
        	this.doSomething3();
        }
        private  void doSomething3()
        {
        	getName1();
        	getName2();
        	getName3();
        	getName4();
        	getName5();
        	getName6();
        }
    }
    private class InnerClass2
    {
        public  void doSomething()
        {
        	getName1();
        	getName2();
        	getName3();
        	getName4();
        	getName5();
        	getName6();
        }
    }
    public class InnerClass3
    {
        public  void doSomething()
        {
        	getName1();
        	getName2();
        	getName3();
        	getName4();
        	getName5();
        	getName6();
        }
    }
    
    protected static class InnerClass4
    {
    	/**
    	 * 动态方法*/
        public  void doSomething1()
        {
        	getName1();
        	getName2();
        	getName3();
        	//静态类中不能访问外部类的非静态成员
        	//getName4();
        	//getName5();
        	//getName6();
        }
        protected  void doSomething2()
        {
        	this.doSomething3();
        }
        //静态方法
        public static void doSomething3()
        {
        	getName1();
        	getName2();
        	getName3();
        	//静态类中不能访问外部类的非静态成员
        	//getName4();
        	//getName5();
        	//getName6();
        }
    }
}


public class MyTest {

  public static void main(String[] args) 
	{
	    NestedClass theClass = new NestedClass();
	    //嵌套普通类实例化方式
	    NestedClass.InnerClass1 theInner = theClass.new InnerClass1();
	    //下面这种实例方法是错的.
	    //NestedClass.InnerClass4 theInner = new NestedClass.InnerClass4();
	    //保护方法
	    theInner.doSomething1();
	    //公用方法
	    theInner.doSomething2();
	    //静态的嵌套类实例方法
	    NestedClass.InnerClass4 theInner4 = new NestedClass.InnerClass4();
	    //静态的嵌套类不能使用如下实例方法
	    //NestedClass.InnerClass1 theInner4 = theClass.new InnerClass4();
	    NestedClass.InnerClass4.doSomething3();
	    theInner4.doSomething1();
	    NestedClass.InnerClass4 theInner5 =new NestedClass.InnerClass4();
	    
	    theInner5.doSomething1();//public
	    //从外面可以访问保护级方法.
	    theInner5.doSomething2();//protected 
	    
	    theClass.getName4();//保护方法可以访问.
	    
	    
	    
	}
  
}


分享到:
评论

相关推荐

    c#学习笔记.txt

    c#学习笔记(1) 51099在线学习网发布 文章来源:网络收集 发布时间:2006-05-25 字体: [大 中 小] 51099在线学习网 http://www.51099.com 1, 结构(struct) 与 类(class) [attributes] [modifiers] struct ...

    c#学习笔记2

    C#看起来与Java有着惊人的相似;它包括了诸如单一继承、接口、与Java几乎同样的语法和编译成中间代码再运行的过程。但是C#与Java有着明显的不同,它借鉴了Delphi的一个特点,与COM(组件对象模型)是直接集成的,...

    java/c#/sql笔记

    这里面是我学习5个月的所有总结,他能帮助没有接触过编程语言的学习着,更好的学习。

    Redis全套学习笔记 (带章节目录) 完整版pdf

    它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。 本文是一篇关于Redis全套学习笔记的文章,主要介绍了Redis的基础知识、数据结构、持久化、集群、高可用、...

    c#学习笔记——学习心得

    C#中的各种名词: 常数:声明时用const修饰,是隐式静态类型 域:一个代表和某对象或类相关的变量的成员 字段:和属性相同,是用来存储对象的值,可以直接访问数据且不能对数据添加任何限制,但是属性不能且可以对...

    c#学习笔记

    C#看起来与Java有着惊人的相似;它包括了诸如单一继承、接口、与Java几乎同样的语法和编译成中间代码再运行的过程。但是C#与Java有着明显的不同,它借鉴了Delphi的一个特点,与COM(组件对象模型)是直接集成的,...

    毕业设计、JAVA毕业设计、C#毕业设计;github 项目源码收集,包括毕业设计,课程设计目前包含java、C#、PHP项目

    为了帮助大家更好地完成毕业设计,我们特地整理了一系列Java毕业设计项目参考资源,包括源代码、MD文档、笔记等等,希望能对您的学习与研究提供有力支持。 项目源代码:涵盖了多个Java毕业设计项目的完整代码,包括...

    我的学习笔记 ,涵盖:C#,java,SqlServer,MySql,Oracle,HTML,CSS.zip

    我的学习笔记 ,涵盖:C#,java,SqlServer,MySql,Oracle,HTML,CSS

    C#OOP上课笔记2016109.docx

    本人学习C#OOP的上课笔记完整版,包括概念讲解和示例代码分析,非常适合初学者使用,觉得实用可以给个好评,毕竟整理资料不容易,O(∩_∩)O哈哈~,有问题可留言!

    Java-PHP-C#

    "^abc$": 匹配以abc开头和以abc结尾的字符串,实际上是只有abc与之匹配 "notice": 匹配包含notice的字符串 你可以看见如果你没有用我们提到的两个字符(最后一个例子),就是说 模式(正则表达式) 可以出现在被...

    C#ch03笔记3.jpg

    java面向对象学习编程笔记核心整理

    C#ch04笔记1.jpg

    java面向对象学习编程笔记核心整理

    C#ch06笔记1.jpg

    java面向对象学习编程笔记核心整理

    C#ch06笔记2.jpg

    java面向对象学习编程笔记核心整理

    C#ch03笔记1.jpg

    java面向对象学习编程笔记核心整理

    C#ch07笔记1.jpg

    java面向对象学习编程笔记核心整理

    毕设&课设&项目&实训-java学习及找工作记录.zip

    毕设&课设&项目&实训-java学习及找工作记录。包括java基础,并发,数据库,算法,网络,设计模式,spring等参考书籍,jdk1.8 【项目资源】: 包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、...

    C#学习记录

    C#是微软公司发布的一种面向对象的、运行于.NET Framework之上的高级程序设计语言。并定于在微软职业开发者论坛(PDC)上登台亮相。C#是微软公司研究员Anders ...C#看起来与Java有着惊人的相似;它包括了诸如单一继承、接

    15_王文峰C#ch09笔记2.jpg

    java面向对象学习编程笔记核心整理

    15_王文峰C#ch09笔记1.jpg

    java面向对象学习编程笔记核心整理

Global site tag (gtag.js) - Google Analytics