对比介绍Java和Python_第1页
对比介绍Java和Python_第2页
对比介绍Java和Python_第3页
对比介绍Java和Python_第4页
对比介绍Java和Python_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

对比介绍Java和Python,目录,简介语言特点版本介绍代码书写格式注释标识符变量定义和赋值数据类型字符串输入和输出数学运算控制流函数(方法)全局和局部变量列表元组和字典(PythonOnly)模块和包异常和文件处理面向对象编程接口和多重继承多线程编程图形用户界面编程,2013年10月编程语言排行榜,Java的特点,编译型语言:编译器会生成由字节码组成的.class文件,然后由Java虚拟机来运行静态类型语言:在编译期间就确定数据类型,即要求在使用任意变量前声明数据类型强类型语言:一旦一个变量被指定了某个数据类型,如果不经过强制转换,则它就永远是这个数据类型了面向对象语言:必须面向对象编程,Java中的所有东西都会属于某个类,Python的特点,解释型语言:解释型语言程序不需要编译,运行时才翻译成机器语言,但Python程序在运行过程中会自动生成字节码文件.pyc或.pyo,改善了Python的性能动态类型语言:使用任意变量前无需声明数据类型,确定一个变量的类型是在第一次给它赋值的时候强类型语言:同Java面向对象语言:不强求以面向对象的方式编程,可以以独立的函数模块来处理逻辑而不需要放到类中,Python的特点,HighLevelObjectOrientedScalableExtensiblePortableEasytoLearnEasytoReadEasytoMaintainRobustEffectiveasaRapidPrototypingToolAMemoryManagerInterpretedand(Byte-)Compiled,版本介绍,Java的版本顺序是Java1.02、Java1.1、Java2(1.2、1.3、1.4)、Java5.0(1.5)、Java6.0(1.6),现在已有Java7.0。这里IDE使用EclipsePython的版本分为2.x和3.x两大系列,而2008年底推出Python3.0不向下兼容2.x版本。这里使用的是ActiveState公司提供的免费Python开发集成支持包ActivePython2.7,2.x的最后一个版本,IDE使用Eclipse+Pydev,代码书写格式,Java:使用分号来分割语句,花括号来分割代码块(类似C)字符串只能用双引号(“”)括起来当一个字符串在一行表示不下,在行尾加一个加号(+),表示字符串在下一行继续Python:使用硬回车来分割语句,冒号和四个空格(Tab)缩进来分割代码块字符串用单引号、双引号或三重引号都可以括起来当表达式在一行表示不下,在行尾加一个反斜杠(),表示继续上一行分号将两个语句连接在一行中,注释,Java:/*多行注释*/inta=1;/单行注释/*文档注释*/Python:#注释1a=1#注释2注释3,标识符,Java:标识符以字母、下划线(_)或美元符($)开头标识符区分大小写,长度没有限制类和接口名的每个字的首字母大写(MyClass);变量名和方法名的首字的首字母小写其余首字母大写(myName),都限制使用下划线,变量名限制使用$;常量名全部使用大写字母(SIZE_NAME),Python中没有常量Python:标识符以字母或下划线(_)或开头标识符区分大小写以单下划线开头的表示不能直接访问的类属性(_foo),在模块或类外不可以使用,不能用fromxxximport*而导入,但可通过类提供的接口进行访问;以双下划线开头的表示类的私有属性或方法(_foo),只有类对象自己能访问,连子类对象也不能访问;以双下划线开头和结尾的表示内置属性或专用方法(_foo_),普通变量应当避免这种命名风格,变量定义和赋值,Java的变量分为primitive主数据类型和引用变量inta=1;/在栈内存(stack)中创建一个变量为a的引用,然后查找栈中是否有1这个值,如果没找到就将1存放进来,然后将a指向1。栈的存取速度比堆内存(heap)要快,仅次于寄存器,栈数据可以共享charb=“s”;booleanc=true;/boolean类型与整数类型不相容Stringstr=“shopping”;/String不是原始的数据类型,而是一个类(class),str是引用变量intnums=newint7;/nums是引用变量,创建大小为7的数组,并将它赋值给声明为int的变量numsPython的变量在使用前无需声明数据类型,变量在第一次被赋值时自动声明。赋值时不管这个对象是新建的还是已经存在的,都是将该对象的引用(并不是值)赋值给变量a=1#将变量a绑定到了值(或对象)1上面b=“shopping”或b=“shop”+“ping”c=Truex=y=z=1#多重赋值x,y,z=1,2,“Hello”#多元赋值,a=b=1,2,3#a和b都指向同一个对象a.append(4)printb1,2,3,4,数据类型,Java的primitive主数据类型分为:字符型char(16bit)布尔型boolean(true或false)数值型byte(8bit)、short(16bit)、int(32bit)、long(64bit)、float(32bit)、double(64bit)Python的数字类型分为:整型长整型布尔型(True或False)双精度浮点数复数,下列对象的布尔值是False:NoneFalse所有值为0的数“”空字符串空列表()空元组空字典,字符串,Java:使用String这个类来表示多个字符,只能用双引号(“”)括起来Stringstr=abc;/先在栈中创建一个对String类的对象引用变量str,然后查找栈中有没有存放abc,如果没有,则将abc存放进栈,并令str指向abc,如果已经有abc则直接令str指向abcStringstr=newString(abc);/用new()来新建对象,它会在存放于堆中,每调用一次就会创建一个新的对象Python:没有字符这个类型,字符串为引号之间的字符集合str=“abc”或str=“a”+“bc”str*2=“abcabc”str0=“a”#第一个字符的索引是0str-1=“c”#最后一个字符的索引是-1str:2=“ab”str1:=“bc”“bc”instr=True,输入,Java:importjava.util.Scanner;publicclasstestpublicstaticvoidmain(Stringargs)System.out.println(Enterloginname:);Scannersca=newScanner(System.in);Strings=sca.next();System.out.println(Yourloginis:+s);Python:user=raw_input(Enterloginname:)print“Yourloginis:”,user,输出,Java:system.out.println=(“helloworld”);Stringstr=“helloworld”;system.out.println=(str);intnum=1;system.out.println=(“Pythonisnumber”+num);Python:print“helloworld”str=“helloworld”;printstrnum=1print“%sisnumber%d”%(“Python”,num)print“Pythonisnumber”+str(num),数学运算,Java:/表示除法,5/3得1,-2/4得0强制转型,可能引起精度丢失Python:*表示幂符号,如x*y表示x的y次/表示地板除,即比商小的最大整数,如-2/4和-2/4都得-1,-2.0/4得-1.0,-2.0/4得-0.5,round(-0.5)得-1.0,int(-0.5)得0按位翻转,x就是-(x+1)and,or,not表示逻辑与,逻辑或,逻辑非没有自增(+)和自减(-)运算符,可以写成x+=1,控制流if,else,Java:booleanlove=false;if(love=true)System.out.println(Iloveyou);elseif(love=false)System.out.println(Idontloveyou);elseSystem.out.println(Idontknowyou);,Python:love=Falseiflove=True:printIloveyoueliflove=False:printIdontloveyouelse:printIdontknowyou,控制流程switch(JavaOnly),intresult=2;switch(result)case1:System.out.println(True);break;case2:System.out.println(False);break;default:System.out.println(Unknown);break;,控制流while,Java:intnumber=23;intguess=47;booleanrunning=true;while(running=true)if(guess=number)System.out.println(Congratulations,youguessedit.);break;if(guessnumber)System.out.println(Sorry,numberistoosmall.);guess+;continue;System.out.println(Sorry,numberistoobig.);guess-;,Python:number=23guess=0running=Truewhilerunning:ifguess=number:printCongratulations,youguessedit.breakifguessf(3)6#lambda函数,可以接收任意多个参数(包括可选参数)并且返回单个表达式的值g=lambdax:x*2g(3)6,全局变量和局部变量,Java的全局变量在类中定义,分为静态变量(类变量)和实例变量静态变量前要加static关键字。静态变量不属于某个实例对象而属于类,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间(静态区),被类的所有实例共享。静态变量可以直接通过类名进行访问实例变量前不加static关键字。实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间(堆内存heap),才能通过这个对象使用这个实例变量。不同对象的同一个实例变量是共享不同的内存空间的。实例变量有默认值Java的局部变量指在方法中定义的变量和方法的参数局部变量被声明在方法中,为于栈内存(Stack)中局部变量没有默认值,在使用前必须初始化局部变量只在定义它的方法中有效,如果局部变量名于全局变量名相同,则该全局变量在此方法中暂时失效,全局变量和局部变量,Python:Java的静态变量在Python中叫类属性,Java的实例变量在Python中叫数据属性。在Python中,类属性紧跟在类定义之后定义,数据属性定义在_init_方法中。类属性可以作为类级别的常量来使用,但是它们不是真正的常量,Python中没有常量,deffunc():globalx#全局变量的名字声明在一个函数体内时,能被局部变量给覆盖掉printxis,x#列表等复合变量设为全局变量,可以在函数内直接赋值,不需要加globalx=2printChangedlocalxto,xx=50func()printValueofxis,x,列表,Java:importjava.util.*;ArrayLista=newArrayList();a.add(1);a.add(2);a.add(3);a.add(4);a.add(apple);System.out.println(a);System.out.println(a.size();a.add(banana);System.out.println(a);a.add(0,0);System.out.println(a);System.out.println(a.indexOf(apple);a.remove(apple);System.out.println(a);a.remove(0);System.out.println(a);Objectobj=a.get(4);System.out.println(obj);,Python:a=1,2,3,4,appleprintlen(a)foriina:printia.append(banana)printaa.insert(0,0)printaprinta.index(apple)a.remove(apple)#只会删除匹配的第一个printadela0printaprinta4#序列的索引操作符printa0:3#序列的切片操作符,元组(PythonOnly),Python的元组与列表很相似,区别是元组定义好之后,就不能再改动了。元组没有方法,可以作为字典的keyzoo=(wolf,elephant,penguin)printNumberofanimalsinthezoois,len(zoo)printzoo-1#penguinname=Jamesage=22print%sis%dyearsold%(name,age),字典(PythonOnly),Email=Swaroop:,Larry:,Matsumoto:,Spammer:spammerprintEmailLarrydelEmailLarryEmailJames=James1984forname,addressinEmail.items():printContact%sat%s%(name,address),模块和包,主要是指引用JDK软件包自带的包,也可以是自己定义的类。引用之后程序体中就可以自由应用包中的类的方法和属性等。使用“import”语句可完成此功能。在Java源文件中import语句应位于package语句之后,所有类的定义之前。importjava.io.*;.*;importjava.util.*;importjavax.swing.*;,模块和包,在Python中,模块实际上就是一个包含了用户定义的函数和变量的以.py为扩展名的Python脚本文件使用时通过import命令将整个命令导入,fromimport命令则是将模块中的某一函数或名字导入#Filename:mymodule.pyif_name_=_main_:printThisprogramisbeingrunbyitselfelse:printIambeingimportedfromanothermoduledefsayhi():printHi,thisismymodulespeaking.version=0.1,#Filename:mymodule_demo.pyimportmymodulemymodule.sayhi()printVersion,mymodule.version或frommymoduleimportsayhi,versionsayhi()printVersion,version,异常和文件处理,Java:importjava.io.*;publicclasstestpublicstaticvoidmain(Stringargs)FileInputStreamin=null;tryin=newFileInputStream(c:/poem.txt);intb;b=in.read();while(b!=-1)System.out.print(char)b);b=in.read();catch(IOExceptione)System.out.println(e.getMessage();finallytryin.close();catch(IOExceptione)e.printStackTrace();/把错误的堆栈信息打印出来,系统默认也是打印误的堆栈信息,异常和文件处理,Python:poem=ifyouwannamakeyourworkalsofun:usePython!try:f=open(c:poem.txt,r)exceptIOError,e:printeprintcreatefilef=file(c:poem.txt,w)f.write(poem)printfilenameis+f=open(c:poem.txt,r)forlineinf.readlines():printline,#从文件读到的内容已经以换行符结尾,所以在print语句上使用逗号来消除自动换行else:printfilenameis+forlineinf.readlines():printline,finally:printclosefilef.close(),面向对象编程(Java),父类:publicclassSchoolMemberprivateStringcountry=USA;/私有变量,不能被继承publicStringschoolName;/实例变量,声明在类内而不是方法中staticStringschool=“BostonUniversity”;/静态变量,同一类的所有实例共享publicSchoolMember(Stringname)/有参数的构造函数schoolName=name;/构造函数没有返回类型,也不会被继承System.out.println(InitializedSchool:+schoolName);publicvoidtest()System.out.println(这是父类的方法);,子类:publicclassStudentextendsSchoolMember/Java不支持多重继承,改用接口的方式staticStringsex=Male;/静态变量privateStringstudentName;/实例变量publicStudent(Stringname1,Stringname2)super(name1);/调用父类构造函数studentName=name2;System.out.println(InitializedStudent:+studentName);publicvoiddisplay()System.out.println(Name:+studentName+School:+schoolName);super.test();privatevoidshow()/私有函数System.out.println(Country:+country);,publicclassTestpublicstaticvoidmain(Stringargs)Students=newStudent(“HarvardUniversity”,“James”);/创建对象s.test();/调用父类的方法s.display();System.out.println(s.sex);s.sex=Female;/修改静态属性sexSystem.out.println(s.sex);s.show();/调用类的私有方法,报错,面向对象编程(Python),父类:classSchoolMember:_country=USAschool=BostonUniversitydef_init_(self,school):self.school=schoolprintself._countryprintInitializedSchool:%s%self.schooldeftest(self):print这是父类的方法,#_init_方法类似于Java的构造函数,其中的self指向新创建的对象,#类属性/常量publicintgetPrice();/方法是抽象的publicclassComputerimplementsProduct/接口的实现publicintgetPrice()/实现出Product的方法return5;publicclasstestpublicstaticvoidmain(Stringargs)Computerp=newComputer();System.out.println(p.BRAND+电脑的价格:+p.getPrice()+千元);,多重继承(PythonOnly),classP1:deffoo(self):printcalledP1-foo()classP2:deffoo(self):printcalledP2-foo()classC1(P1,P2):passc=C1()c.foo()#Python2.3版本开始后采用新算法,广度优先的方式,首先查找同胞兄弟P1.foo(c)P2.foo(c)#如果想调用P2的foo()方法,多线程编程(Java),Java:线程可以看作是一个单独进程的不同部分在同时运行publicclassRunThreadsimplementsRunnablepublicstaticvoidmain(Stringargs)RunThreadsrunner=newRunThreads();Threadt1=newThread(runner);Threadt2=newThread(runner);t1.setName(thread1);t2.setName(thread2);t1.start();t2.start();publicvoidrun()StringthreadName=Thread.currentThread().getName();System.out.println(Iam+threadName);,多线程编程(Python),Python:importthreading#继承threading模块中的Thread创建类classmythread(threading.Thread):def_init_(self

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论