1、因为工作的原因,最近使用了三个多月的java作为主力语言。很早之前在菜鸟教程也看过java文档两遍,但实践少,处于能看懂写出来不流畅的状态(对于java必须要略懂,不能能看到就头疼跳过,因为现在百度随便搜个解决方案,大部分是java的文章,如果不能看懂,就没办法把它翻译成自己的python来实现了)。后来花大精力专门学习python的oop和设计模式,再来使用java,就更流畅了,主要注重掌握一些思想,遇到具体的解决问题方案,可以百度复制现成的东西来用很方便,java的网上文章比python多得多的多。通过使用java后,反过来对python程序编写也有一些帮助和影响。

以下是python和java的一些对比。

java的static属性    --->  py的类属性

java的static方法    --->  py的类方法    py需要加入@classmethd,   staticmehod和classmethod都差不多,在classmethod中访问A的类属性用cls.xx ,staticmethod中一般不访问类属性才使用staticmethod,如果staticmethod方法还非要用类属性可以用A.xx。

java的public方法    --> py的 func()

java的protected方法 --> py的 _func()

java的private方法   ---> py的 __func()

java的abstract抽象类 抽象方法  --->     from abc import ABCMeta, abstractmethod

                                 __metaclass__ = ABCMeta
@abstractmethod
def _getBaiduHeaders(self):pass

java的interface   ---> py没有,py用鸭子类,  要想规范 ,需要使用 zope.interface包。

java的this ---> py的self,但有点不同的是 ,表示实例属性/方法时候python必须写self,java在少数情况下才必须用this,所以python代码中的self明显比java的this出现多的多,java中除了声明为static属性/方法的是属于类属性/方法,没被static修饰的属性都是默认带this的实例属/方法。

java的变量和方法会有很多前缀,我的一些只学python朋友,非常的排斥java,觉得加这么多前缀太罗嗦了,但这样好处是所有意图都是显式的,人人都注重这些用途,想无视都没办法。py是隐式的,如果一意孤行不学习优秀的写法长期埋头自己搞自己的,会出一些问题,看见一个笨瓜写的python所有类的代码就是全部都是公有实例方法,这样造成理解和ide补全都很差劲。其实python也有静态方法/属性 公有、私有、保护这些概念的,比较隐式。如果不理解java什么时候加static、 final 、private、protected、public那写python也会很糊涂,造成写的python类里面全都都是公有实例方法和属性。

2、另外关于python java整体的区别,我的一些感受是:

1、java更易理解,所有变量声明都有类型,python的如果自定义类的对象时由函数深层次返回的,返回对象的函数中如果没有写注释rtype,需要一级一级的去找,才能确定对象的类型。另外就是,如果变量命名不规范,阅读时候难以看清楚类型,比如有人喜欢把变量命名为xx_json,但让它表示的却是一个字典,初看起来会造成误会。

2、java性能好一些,只要是静态语言都比动态语言性能好,这不用说了。

3、java强制oop,团队风格会比较统一,团队写的东西复用性更强。py的风格比较自由一些,团队协作起来比java差一些。

4、java比python的有些地方复杂一些,比如简单的读写文件比python的步骤和代码多多了。但复杂业务,注重的解决流程,其实都还差不多,python也节约不了太多的思考。

5、idea对java的支持比pycahrm对py的支持更加完美,由于是动态语言很灵活,对于python,ide也没办法完全知道我们的想法和意图。

6、java有编译过程,低级错误会直接报错,不会等到程序运行到那一行才会报错,节约了很多时间。python没有编译过程,运行时确定,如果项目太长很耗时,发现一些很明显的低级错误就要花更长的时间了。好在python在pycahrm中可以使用inspectcode功能来进行静态检查,可以提前发现一些错误,但与java的编译来检查错误,还是有差距。

7、java一切以类为基本单元,最简单的打印helloworld都需要写类,有时候对某个问题只需要做个简单的测试验证,java起手式太多,没有python便捷。

3、总体java比python好,话不能说的太死太绝对留下把柄,所以结论是 二者各有优点。

java的this static public protected private abstract interface 在python的对应,java python一些区别的更多相关文章

  1. JAVA修饰符类型(public,protected,private,friendly)

    转自:http://www.cnblogs.com/webapplee/p/3771708.html JAVA修饰符类型(public,protected,private,friendly) publ ...

  2. JAVA类型修饰符(public,protected,private,friendly)

    JAVA类型修饰符(public,protected,private,friendly) public的类.类属变量及方法.包内及包外的不论什么类均能够訪问:protected的类.类属变量及方法,包 ...

  3. [学习笔记]Java的public,protected,private,缺省的作用域

    0.引言 Java的访问指示符public,protected,private,缺省可以用来修饰类和方法. 1.作用域如下 具体如下: 作用域       当前类    同一package   子孙类 ...

  4. Java学习笔记(4)----Public,Protected,Package,Private修饰符可见性

    Java修饰符类型(public,protected,private,friendly) public的类.类属变量及方法,包内及包外的任何类均可以访问:protected的类.类属变量及方法,包内的 ...

  5. C++中public,protected,private派生类继承问题和访问权限问题

    C++中public,protected,private派生类继承问题和访问权限问题 当一个子类从父类继承时,父类的所有成员成为子类的成员,此时对父类成员的访问状态由继承时使用的继承限定符决定. 1. ...

  6. 【转载】C++中public,protected,private访问

    第一:private, public, protected 访问标号的访问范围. 假如我们约定: 类内部-----指的是当前类类型的定义中,以及其成员函数的声明和定义中: 类外部-----指的是不在当 ...

  7. php public protected private属性实例详解

    php 类中函数和类变量都有三个属性:public protected private,具体什么时候使用什么属性好纠结,特意找了个实例,这样看起来更清晰. public 表示全局,类内部外部子类都可以 ...

  8. C++ 类访问控制(public/protected/private)

    第一:private, public, protected 访问标号的访问范围. private:只能由1.该类中的函数.2.其友元函数访问. 不能被任何其他访问,该类的对象也不能访问. protec ...

  9. 【转】C++易混知识点5:实例讲解Public Protected Private作用域,继承的区别和用意

    大学生涯,涉及到类的作用域,继承都是用的public 共有继承,当时也没想那么多,觉得共有继承多方便,多简单,反正没有太多的限制,不管是类的成员或者是基类的成员函数都可以访问.没有深究.其实这里面真是 ...

随机推荐

  1. python文件编码及执行

    兼容中文编码 由于Python源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为UTF-8编码. 当Python解释器读取源代码时,为了让它按UTF-8编 ...

  2. require.js+knockout.js+.underscore模板引擎的使用

    第一种使用方式: HTML: <ul data-bind="template: { name: 'peopleList' }"></ul> <scri ...

  3. SparkSQL---实战应用

    SparkSQL---实战应用 数据集 :http://grouplens.org/datasets/movielens/ MovieLens 1M Datase 相关数据文件 : users.dat ...

  4. 多线程三:Task

    Task是.NET 3.0中推出的,是基于ThreadPool封装的,里面的线程都是来自于ThreadPool. 1.使用Run()方法启动线程 F12查看Run()方法的定义: 发现Run()方法的 ...

  5. Spring Cloud Eureka 服务关闭但是未从注册中心删除 自我保护机制

    自我保护背景 首先对Eureka注册中心需要了解的是Eureka各个节点都是平等的,没有ZK中角色的概念, 即使N-1个节点挂掉也不会影响其他节点的正常运行. 默认情况下,如果Eureka Serve ...

  6. 【转】常用 Microsoft .NET Framework 各版本下載網址列表

    研究] 常用 Microsoft .NET Framework 各版本下載網址列表 2014-05-23 僅列常用的 (IA64, Beta, hotfix, ... 不列) Microsoft .N ...

  7. [Python学习]Iterator 和 Generator的学习心得

    [Python学习]Iterator 和 Generator的学习心得 Iterator是迭代器的意思,它的作用是一次产生一个数据项,直到没有为止.这样在 for 循环中就可以对它进行循环处理了.那么 ...

  8. 启动另一个app

    (一) 通过包名.类名 开发有时需要在一个应用中启动另一个应用,比如Launcher加载所有的已安装的程序的列表,当点击图标时可以启动另一个应用.一般我们知道了另一个应用的包名和MainActivit ...

  9. Windows IOT 开发入门(硬件入门)

    接上文,在准备工作完成之后.接下来应该要熟悉硬件和架构了. 以下是一个简易物联网架构设计图 关于微软云这里就不说太多了.有兴趣的朋友可以去这里了解更多https://www.azure.cn/. 在上 ...

  10. php 统计一维数组中重复的元素个数

    <?php echo "<pre>"; $array = array(1, 1, 1, 54, 3,4, 3,4, 3, 14, 3,4, 3,7,8,9,12, ...