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. 正则表达式的使用(C#)

    1, C#中与正则表达式相关类. C#中与正则表达式相关类的几个常用类是Regex,Match,Group,Captrue,RegexOption首先我们看看这几个类的类图关系,如何你有正则表达式基础 ...

  2. Kettle 添加对应hadoop版本的支持

    在hdp的官网上有一个ETL工具叫做Talend Open Studio,然后我就下了,并且在群里询问了一下,突然间冒出来一群ETL高手,经高人指点认识了一款叫做Kettle的软件,经过这两天的试用, ...

  3. 【React全家桶入门之十】登录与身份认证

    细致想想,我们的后台系统还没有一个登录功能,太不靠谱,赶紧把防盗门安上! SPA的鉴权方式和传统的web应用不同:因为页面的渲染不再依赖服务端,与服务端的交互都通过接口来完毕,而REASTful风格的 ...

  4. freemarker自己定义标签报错(二)

    freemarker自己定义标签 1.错误描写叙述 freemarker.core.ParseException: Unexpected end of file reached. at freemar ...

  5. gitlab 地址https://www.gitlab.com.cn/installation/#centos-7

    https://www.gitlab.com.cn/installation/#centos-7 1.安装并配置必要的依赖关系 在CentOS 7(和RedHat / Oracle / Scienti ...

  6. Spring Cloud Config 配置中心 自动加解密功能 jasypt方式

    使用此种方式会存在一种问题:如果我配置了自动配置刷新,则刷新过后,加密过后的密文无法被解密.具体原因分析,看 SpringCloud 详解配置刷新的原理 使用  jasypt-spring-boot- ...

  7. PHP产生随机数

    PHP生成随机字符串包括大小写字母 PHP生成随机字符串包括大小写字母,这里介绍两种方法: 第一种:利用字符串函数操作 ? <?php     /**      *@blog <www.p ...

  8. Android Studio生成keystore签名文件步骤讲解

    Android App打包时要用到签名文件,Android Studio生成签名文件步骤如下: Build---Generate Signed Apk...如图: 如果你的project中有2个或者2 ...

  9. 重点:QObject 的拷贝构造和赋值操作——私有

    QObject 中没有提供一个拷贝构造函数和赋值操作符给外界使用,其实拷贝构造和赋值的操作都是已经声明了的,但是它们被使用了Q_DISABLE_COPY () 宏放在了private区域.因此所有继承 ...

  10. 7、Qt MetaObject System详解

    网上的资源比较乱,该文章整理自地址:http://www.xuebuyuan.com/735789.html Qt meta-object系统基于三个方面: 1.QObject提供一个基类,方便派生类 ...