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

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();//保护方法可以访问.
	    
	    
	    
	}
  
}


分享到:
评论

相关推荐

    Learning hard C# 学习笔记

    总而言之,《Learning Hard C# 学习笔记》是一份全面的C#学习资源,它不仅覆盖了C#的基本语法和高级特性,还包含了实际开发中的应用场景,对于初学者来说是一份不可多得的参考资料。配合源码实践,相信你可以从零...

    C#编程学习笔记_C#编程学习笔记_

    1. **基础语法**:C#的基础语法类似于C++和Java,包括变量声明、数据类型(如int, string, bool等)、控制流语句(if, switch, for, while等)以及函数定义。理解这些基本元素是学习C#的第一步。 2. **面向对象编程...

    黑马程序员之C#编程学习笔记

    首先,C#的基本语法结构与C++和Java有诸多相似之处,它支持类、接口、继承等面向对象的特性。在学习笔记中,你可能会首先接触到变量、数据类型和常量的概念。变量是存储数据的容器,数据类型决定了变量可以存储的...

    经典、简单C#学习笔记

    综上所述,"经典、简单C#学习笔记"涵盖了C#语言从基础到进阶的全面内容,适合初学者入门,也对有一定经验的开发者有参考价值。通过深入理解和实践这些知识点,你将能够熟练掌握C#,并在各种应用场景中游刃有余。

    海康威视sdk_java/c#/mfc_demo实例

    通过学习和实践这些SDK示例,开发者能够快速掌握与海康威视设备交互的方法,从而构建出满足特定需求的监控系统或应用。无论是对于企业级的大型项目还是个人的小型应用,海康威视的SDK都能提供强大的技术支持。

    Visual c#学习笔记

    《Visual C#学习笔记》是一本深入探讨C#编程语言及其在ASP.NET框架下应用的专业教程。这本书旨在为想要掌握C#和ASP.NET技术的读者提供详尽的指导,无论你是初学者还是有一定开发经验的程序员,都能从中受益匪浅。 ...

    C#学习笔记(基础篇)

    以上只是C#学习笔记的基础部分,实际学习过程中还会涉及更多高级特性,如匿名方法、Lambda表达式、异步编程(async/await)、匿名类型、动态类型等。通过不断实践和学习,你可以逐步掌握C#,并运用到实际项目开发中...

    java基础学习笔记

    ### Java基础学习笔记知识点 #### 一、Java学习路线概览 Java学习通常分为几个阶段,从基础到高级,逐步深化。以下是对给定文件中提到的学习路线的详细解析: ##### 第一阶段:Java基础 - **JAVASE**:Java标准版...

    c#学习笔记.txt

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

    JAVA,C#,Delphi,系统相关技术笔记

    在本技术笔记中,我们将深入探讨JAVA、C#、Delphi这三种编程语言以及与Windows系统优化相关的主题。这些笔记是针对开发人员和系统管理员的宝贵资源,旨在提高编程效率和系统性能。 首先,让我们从JAVA开始。JAVA是...

    c#,java,html,sqlsever记笔记软件

    标题中的"C#、Java、HTML和SQL Server"代表了四个主要的IT技术领域,而"记笔记软件"则暗示这是一套用于学习和记录这些技术知识的工具或资源。描述中提到的"有我自己的一些SQL Server笔记,可自己写笔记"意味着这个...

    Axis2完美教程java c#调用.doc

    总的来说,这个“Axis2完美教程java c#调用.doc”文档是一个全面的学习资源,对想要掌握 Axis2 并实现Java和C#之间Web服务交互的开发者来说,将是一份宝贵的参考资料。通过这份文档,读者可以深入理解Axis2的工作...

    java&c#编码规范

    在编程世界中,Java 和 C# 是两种广泛应用的高级编程语言。它们各自有着明确的编码规范,以确保代码的可读性、可维护性和团队协作的高效性。本资料包聚焦于这两门语言的编码规范,旨在帮助新手快速入门,并帮助有...

    C#和java短信接口demo

    【C#和Java短信接口开发】是现代软件系统中常用的一种功能,特别是在验证用户身份、发送提醒或通知等方面。这两个编程语言提供了丰富的库和框架,使得开发者能够方便地集成短信服务。下面将详细介绍C#和Java实现短信...

    《实现领域驱动设计》中的源码(java版 & C#版)

    在Java和C#代码中,你会看到仓储接口的定义以及实现,它们通常与数据库操作结合,但抽象了数据访问细节。 5. **领域服务**:当业务逻辑无法完全归属到单个实体或值对象时,领域服务应运而生。源码中会包含领域服务...

    C#OOP上课笔记2016109.docx

    - 虽然笔记中没有直接涉及类、对象、继承、封装和多态等OOP核心概念,但这些基础知识是理解C#程序设计的基础,也是学习笔记后续章节可能会涵盖的内容。 7. **控制台交互**: - `Console.WriteLine()`和`Console....

    java学习笔记整理

    ### Java学习笔记整理 #### 1. Java简介 ##### 1.1 计算机编程和开发语言 计算机系统由硬件系统和软件系统组成。软件系统又进一步细分为系统软件和应用软件。其中,系统软件包括操作系统、编译系统、数据库系统等...

    java/c#/sql笔记

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

    海康安防系统SDK及实例源码_win64_java_海康门禁_C#_海康_海康安防系统SDK及实例源码_

    在这个压缩包中,包含的资源适用于Win64平台,且支持Java和C#两种编程语言。 1. **SDK介绍** 海康安防系统SDK(Software Development Kit)是一套用于开发海康安防产品的应用程序的工具集,它提供了丰富的API函数...

    Leaining Hard C#学习笔记.pdf

    根据提供的文件信息,我们可以推断出这是一份关于C#编程语言的学习笔记。接下来,我们将对这份学习资料涉及的关键知识点进行详细的解读与扩展。 ### C#简介 C#(读作“C sharp”)是一种现代的、面向对象的编程...

Global site tag (gtag.js) - Google Analytics