热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

一句java代码证明自己,一句java代码证明自己的性能

写一个程序,证明java方法调用是值传递的(要求定义两个方法,分别传递double类型和String类型,)。随便帮你写个吧!下面我用注释应该很容易看懂!代码如下:publiccl

写一个程序,证明java方法调用是值传递的(要求定义两个方法,分别传递double类型和String类型,)。

随便帮你写个吧!下面我用//注释应该很容易看懂!代码如下:public class Gequ{

public static void main(String[] args) {

String geming="忘情水"; //声明一个变量geming歌名

double pingfen=9.8; //声明一个变量pingfen评分

System.out.print("歌曲:"+geming+"\t歌手:"+Geshou(geming)+"\t歌曲热度为:"+Redu(pingfen));

}

public static double Redu(double pingfen){ //声明一个Redu()方法,代表歌曲热度,方法参数dianjilv

return pingfen; //返回评分

}

public static String Geshou(String geming){ //声明一个Geshou()方法,代表歌手,方法参数geming

String geshou="周杰伦"; //声明一个变量geshou歌手并给他初值为周杰伦

if(geming.equals("忘情水")){ //用if条件判断,equals相当于等于的意思,用来比较2个字符串。如果geming是忘情水,就返回刘德华。

geshou="刘德华";

}

return geshou;

}} 这样说应该很明白了,如果还有什么觉得不对再说吧!

找工作。怎么证明自己java的能力?

学历证书、专业技能证书、工作经验,项目经验,英语四级、日语二级或三级...(因为美国和日本是国际上比较大的发包国,要是做外包软件的公司肯定需要)其实其他说的再多最后还是看动手的时的项目经验,操作熟练让用人单位看的一目了然,还有就是人家要给你出面试题最好答的要快准,这一点在做事上没有错了,也就是能力肯定了,还有就是做人这点要给用人单位留下好的印象,事做的再好,人不行或许用人单位都不要,热情诚恳注意细节,有个故事就是招聘单位刚进门有个扫帚扔地上的来考验,这点具体点就是:小公司做事,大公司做人 凡事在于人 有时候能力不是最重要的,能力好行为偏执,人家不要更愿意找能力一般团队协作能力好为人处事好的 有句就是这样说的,: 有德有才,破格重用;有德无才,培养使用;有才无德,限制录用;无德无才,坚决不用。 回答完毕!

java项目中如何确定自己写的代码是正确的代码

这个如果你写一个项目,那个你在交给测试部门的时候尽量保证你做的已经不错了。而且如果测试部门测试的有bug了,还得给你让你修复,而且测试部大部分是女的,所以么,尽量少出些bug,不然女生会对开发人印象不好。

这个自己代码正确问题,首先你做一个项目,一定要先分析好,需求做好,在开始写,而且考虑的问题全面一些,可写做一步,自己测试验证一步,保证正确性,出问题的话好找到那里出问题解决,不好发现的问题可以debug调试找到问题。

做java软件工程师,怎样才能写出好的代码?

Java代码之于java程序员而言就是左膀右臂,java代码写的好的java程序员明显更是企业的欢迎,一个优秀的java程序员的考核标准之一也是看他的编程水平。

其实有的java程序员java代码会受到大家的追捧,是因为他在写代码时注意的细节往往多于那些不怎么关注java代码编程细节的程序员,俗话说:“细节决定成败”,那么如何写出好的java代码呢?IT培训介绍一起来讨论下:

1.重视注释

有的java程序员在写代码时,从来没有想过要在java代码后加上相关的注释,甚至是上万行的代码也没有想过加上注释,这就存在很大的问题,不说你的代码会跟其他人分享讨论,就你自己回顾你是怎么写好这篇代码的,你也是半天无法理出头绪,这就为维护和修改等等工作添加了很大的麻烦。所以,要想写出好的java代码,一定从简短的java代码编写开始注重在java代码后面加上相应的注释,养成良好的习惯。

2.重视排版整洁

看很多java程序员的排版总觉得在欣赏一幅艺术品,但是看到一些java程序员的排版却总觉得无力吐槽。同样是编写代码,但是给人的视觉体验是相当的不同,当然好的java代码给人的享受也是美的,所以要想写出好的代码,一定要重视排版整洁。

3.注重命名规则

现在在一个团队开发中,都会提前定制一个统一的命名规则,这样利于提高工作效益。但是很多java程序员是缺乏这个意识的,每次敲代码,更喜欢按照自己惯常的方式老命名模块、函数,这样是方便了自己,但是忽视团队协作,所以在日常工作中,特别是团队工作中一定要重视命名规则。

4.养成备份习惯

备份的重要性不用小编强调,相必你也知道。但是有的java程序员就是没有养成这样的好习惯,每次敲完代码就不记得随手保存,每次等到除了事故,比如电脑出了故障,辛辛苦苦敲打的java代码没保存找不回来的情况下就开始懊恼,与其这样还不如在一开始就养成良好的备份习惯,这样也方便自己日后查找利用。

java代码解读

第一个if是判断searchkey是不是空的,如果不是空的,就追加到name字段作为查询条件,like模糊查询

接着第二个if判断如果status的值不为空,就追加到status作为条件

如果status为空,走else分支,从userContext中获取到employee对象,接着判断,如果它的角色不是manager的话

把这个对象的id拿出来,作为seller.Id的条件进行查询

如何写出优雅Java编程

如何写出好的Java代码

1.

优雅需要付出代价。从短期利益来看,对某个问题提出优雅的解决方法,似乎可能花你更多的时间。但当它终于能够正确执行并可轻易套用于新案例中,不需要花上数以时计,甚至以天计或以月计的辛苦代价时,你会看得到先前所花功夫的回报(即使没有人可以衡量这一点)。这不仅给你一个可更容易开发和调试的程序,也更易于理解和维护。这正是它在金钱上的价值所在。这一点有赖某种人生经验才能够了解,因为当你努力让某一段程序代码变得比较优雅时,你并不是处于一种具生产力的状态下。但是,请抗拒那些催促你赶工的人们,因为那么做只会减缓你的速度罢了。

2.

先求能动,再求快。即使你已确定某段程序代码极为重要,而且是系统的重要瓶颈,这个准则依然成立。尽可能简化设计,让系统能够先正确动作。如果程序的执行不够快,再量测其效能。几乎你总是会发现,你所认为的”瓶颈”其实都不是问题所在。把你的时间花在刀口上吧。3.

记住”各个击破”的原理。如果你所探讨的问题过于混杂,试着想像该问题的基本动作会是什么,并假设这一小块东西能够神奇地处理掉最难的部分。这”一小块”东西其实就是对象–请撰写运用该对象的程序代码,然后检视对象,并将其中困难的部分再包装成其他对象,依此类推。

4. 区分class开发者和class使用者(使用端程序员)。Class

使用者扮演着”客户”角色,不需要(也不知道)class的底层运作方式。Class开发者必须是class设计专家,并撰写class,使它能够尽可能被大多数新手程序员所用,而且在程序中能够稳当执行。一套程序库只有在具备通透性的情况下,使用起来才会容易。

5.当你撰写class时,试着给予明了易懂的名称,减少不必要的注解。你给客户端程序员的接口,应该保持概念上的单纯性。不了这个目的,当函数的重载(overloading)适合制作出直觉、易用的接口时,请善加使用。

6. 也必你的分析和设计必须让系统中的classes保持最少,须让其Public

interfaces保持最少,以及让这些classes和其他classes之间的关联性( 尤其是base

classes)保持最少。如果你的设计所得结果更甚于此,请问问自己,是否其中每一样东西在整个程序生命期中都饶富价值?如果并非如此,那么,维护它们会使你付出代价。开发团队的成员都有不维护”无益于生产力提升”的任何东西的倾向;这是许多设计方法无法解释的现象。

7.

让所有东西尽量自动化。先撰写测试用的程序代码(在你撰写class之前),并让它和class结合在一起。请使用makefile或类似工具,自动进行测试动作。通过这种方式,只要执行测试程序,所有的程序变动就可以自动获得验证,而且可以立即发现错误。由于你知道的测试架构所具备的安全性,所以当你发现新的需求时,你会更勇于进行全面修改。请记住,程序语言最大的改进,是来自型别检查、异常处理等机制所赋予的内置测试动作。但这些功能只能协助你到达某种程度。开发一个稳固系统时,你得自己验证自己的classes或程序的性质。

8. 在你撰写class之前先写测试码,以便验证你的class 是否设计完备。如果你无法撰写测试码,你便无法知道你的class

的可能长相。撰写测试码通常能够显现出额外的特性(features)或限制 (

constraints)__它们并不一定总是能够在分析和设计过程中出现。测试码也可做为展示class 用法的示例程序。

9. 所有软件设计上的问题,都可以通过”引入额外的概念性间接层(conceptual

indirection)”加以简化。这个软件工程上的基础法则是抽象化概念的根据,而抽象化概念正是面向对象程序设计的主要性质。10.

间接层(indirection)应该要有意义(和准则-9致)。这里所指的意义可以像”将共用程序代码置于惟一函数”这么简单。如果你加入的间接层(或抽象化、或封装等等)不具意义,它可能就和没有适当的间接层一样糟糕。

11.

让class尽可能微小而无法切割(atomic)。赋予每个class单一而清楚的用途。如果你的classes或你的系统成长得过于复杂,请将复杂的classes切割成比较简单的几个classes。最明显的一个判断指针就是class的大小:如果它很大,那么它工作量过多的机会就可能很高,那就应该被切割。重新设计class的建议线索是:

1) 复杂的switch语句:请考虑运用多态(Polymorphism)。 2)

许多函数各自处理类型极为不同的动作:请考虑切割为多个不同的(classes)。

12. 小心冗长的引数列(argument

lists)。冗长的引数列会使函数的调用动作不易撰写、阅读、维护。你应该试着将函数搬移到更适当的class中,并尽量以对象为引数。

13. 不要一再重复。如果某段程序代码不断出现于许多derived class函数中,请将该段程序代码置于某个base class

函数内,然后在derived

class函数中调用。这么做不仅可以省下程序代码空间,也可以让修改该段程序代码动作更易于进行。有时候找出此种共通程序代码还可以为接口增加实用功能。

14. 小心switch语句或成串的if-else 子句。通常这种情况代表所谓的”type-check

coding”。也就是说究竟会执行哪一段程序代码,乃是依据某种型别信息来做抉择(最初,确切型别可能不十分明显)。你通常可以使用继承和多态来取代此类程序代码;Polymorphical

method (多态函数)的调用会自动执行此类型别检验,并提供更可靠更容易的扩充性。

15. 从设计观点来看,请找出变动的事物,并使它和不变的事物分离。也就是说,找出系统中可能被你改变的元素,将它们封装于classes中。

16. 不要利用subclassing来扩充基础功能。如果某个接口元素对class而言极重要,它应该被放在base class

里头,而不是直到衍生(derivation)时才被加入。如果你在继承过程中加入了函数,或许你应该重新思考整个设计。

17. 少就是多。从class

的最小接口开始妨展,尽可能在解决问题的前提下让它保持既小又单纯。不要预先考量你的class被使用的所有可能方式。一旦class被实际运用,你自然会知道你得如何扩充接口。不过,一旦class被使用后,你就无法在不影响客户程序代码的情况下缩减其接口。如果你要加入更多函数倒是没有问题–不会影响既有的客户程序代码,它们只需重新编译即可。但即使新函数取代了旧函数的功能,也请你保留既有接口。如果你得通过”加入更多引数”的方式来扩充既有函数的接口,请你以新引数写出一个重载化的函数;通过

这种方式就不会影响既有函数的任何客户了。

18. 大声念出你的classes,确认它们符合逻辑。请base class和derived class

之间的关系是”is-a”(是一种),让class和成员对象之间的关系是”has-a”(有一个)。

19.

当你犹豫不决于继承(inheritance)或合成(组合,composition)时,请你问问自己,是否需要向上转型(upcast)为基础型别。如果不需要,请优先选择合成(也就是是使用成员对象)。这种作法可以消除”过多基础型别”。如果你采用继承,使用者会认为他们应该可以向上转型。

20. 运用数据成员来表示数值的变化,运用经过覆写的函数(overrided method)来代表行为的变化 。也就是说,如果你找到了某个

class, 带有一些状态变量,而其函数会依据这些变量值切换不同的行为,那么你或许就应该重新设计,在subclasses 和覆写后的函数(overrided

methods)中展现行为止的差异。

21.

小心重载(overloading)。函数不应该依据引数值条件式地选择执行某一段程序代码。这种情况下你应该撰写两个或更多个重载函数(overloaded

methods)22. 使用异常体系(exception hierarchies)最好是从Java标准异常体系中衍生特定的classes,

那么,捕捉异常的人便可以捕捉特定异常,之后才捕捉基本异常。如果你加入新的衍生异常,原有的客户端程序仍能通过其基础型别来捕捉它。

23.

有时候简单的聚合(aggregation)就够了。飞机上的”旅客舒适系统”包括数个分离的元素:座椅、空调、视讯设备等等,你会需要在飞机上产生许多这样的东西。你会将它们声明为Private成员并开发出一个全新的接口吗?不会的,在这个例子中,元素也是Public接口的一部分,所以仍然是安全的。当然啦,简单聚合并不是一个常被运用的解法,但有时候的确是。

24. 试着从客户程序员和程序维护的角度思考。你的class应该设计得尽可能容易使用。你应该预先考量可能性有的变动,并针对这些

可能的变动进行设计,使这些变动日后可轻易完成。

25.

小心”巨大对象并发症”。这往往是刚踏OOP领域的过程式(procedural)程序员的一个苦恼,因为他们往往最终还是写出一个过程式程序,并将它们摆放到一个或两个巨大对象中。注意,除了application

framework (应用程序框架,译注:一种很特殊的、大型OO程序库,帮你架构程序本体)之外,对象代表的是程序中的观念,而不是程序本身。

26. 如果你得用某种丑陋的方式来达成某个动作,请将丑陋的部分局限在某个class里头。

27.

如果你得用某种不可移植方式来达成某个动作,请将它抽象化并局限于某个class里头。这样一个”额外间接层”能够防止不可移植的部分扩散到整个程序。这种作法的具体呈现便是Bridge设计模式(design

pattern)。28.

对象不应仅仅只用来持有数据。对象也应该具有定义明确界限清楚的行为。有时候使用”数据对象”是适当的,但只有在通用形容器不适用时,才适合刻意以数据对象来包装、传输一群数据项。

29.

欲从既有的classes身上产生新的classes时,请以组合(composition)为优先考量。你应该只在必要时才使用继承。如果在组合适用之处你却选择了继承,你的设计就渗杂了非必要的复杂性。

30.

运用继承和函数覆写机制来展现行为上的差异,运用fields(数据成员)来展现状态上的差异。这句话的极端例子,就是继承出不同的classes表现各种不同的颜色,而不使用”color”field.31.

当心变异性(variance)。语意相异的两个对象拥有相同的动作(或说责任)是可能的。OO世界中存在着一种天生的引诱,让人想要从某个class继承出另一个subclass,为的是获得继承带来的福利。这便是所谓”变异性”。但是,没有任何正当理由足以让我们强迫制造出某个其实并不存在的superclass/subclass关系。比较好的解决方式是写出一个共用的base

class,它为两个derived

classes制作出共用接口–这种方式会耗用更多空间,但你可以如你所盼望地从继承机制获得好处,而且或许能够在设计上获得重大发现。

32.

注意继承上的限制。最清晰易懂的设计是将功能加到继承得来的class里头;继承过程中拿掉旧功能(而非增加新功能)则是一种可疑的设计。不过,规则可以打破。如果你所处理的是旧有的class程序库,那么在某个class的subclass限制功能,可能会比重新制定整个结构(俾使新class得以良好地相称于旧

class)有效率得多。

33. 使用设计模式(design patterns)来减少”赤裸裸无加掩饰的机能(naked

functionality)”。举个例子,如果你的class只应该产出惟一一个对象,那么请不要以加思索毫无设计的手法来完成它,然后撰写”只该产生一份对象”这样的注解就拍拍屁股走人。请将它包装成singleton(译注:一个有名的设计模式,可译为”单件”)。如果主程序中有多而混乱的”用以产生对象”的程序代码,请找出类似

factory method这样的生成模式(creational patterns),使价钱可用以封装生成动作减少”赤裸裸无加掩饰的机能”(naked

functionality)不仅可以让你的程序更易理解和维护,也可以阻止出于好意却带来意外的维护者。

34. 当心”因分析而导致的瘫痪(analysis

paralysis)”。请记住,你往往必须在获得所有信息之前让项目继续前进。而且理解未知部分的最好也最快的方式,通常就是实际前进一步而不只是纸上谈兵。除非找到解决办法,否则无法知道解决办法。Java拥有内置的防火墙,请让它们发挥作用。你在单一class或一组classes中所犯的错误,并不会伤害整个系统的完整性。

35.

当你认为你已经获得一份优秀的分析、设计或实现时,请试着加以演练。将团队以外的某些人带进来-他不必非得是个顾问不可,他可以是公司其他团队的成员。请那个人以新鲜的姿态审视你们的成果,这样可以在尚可轻易修改的阶段找出问题,其收获会比因演练而付出的时间和金钱代价来得高。实现

(Implementation)

36. 一般来说,请遵守Sun的程序编写习惯。

37.

无论使用何种编写风格,如果你的团队(或整个公司,那就更好了)能够加以标准化,那么的确会带来显著效果。这代表每个人都可以在其他人不遵守编写风格修改其作品,这是个公平的游戏。标准化的价值在于,分析程序代码时所花的脑力较小,因而可以专心于程序代码的实质意义。

38. 遵守标准的大小写规范。将

class名称的第一个字母应为大写。数据成员、函数、对象(references)的第一个字母应为小写。所有识别名称的每个字都应该连在一块儿,所有非首字的第一个字母都应该大写。例如:

ThisIsAClassName thisIsAMethodOrFieldName 如果你在static final

基本型别的定义处指定了常量初始式(constant initializers),那么该识别名称应该全为大写,代表一个编译期常量。

Packages是个特例,其名称皆为小写,即使非首字的字母亦是如此。域名(org, net, edu 等等)皆应为小写。(这是Java 1.1迁移至Java

2时的一项改变) 。

39、不要自己发明”装饰用的”Private数据成员名称。通常这种的形式是在最前端加上底线和其他字符,匈牙利命名法(Hungarian

notation)是其中最差的示范。在这种命名法中,你得加入额外字符来表示数据的型别、用途、位置等等。仿佛你用的是汇编语言(assembly

language)而编译器没有提供任何协肋似的。这样的命名方式容易让人混淆又难以阅读,也不易推行和维护。就让classes和packages来进行”名称上的范围制定(name

scoping)”吧。

40、当你拟定通用性的class时,请遵守正规形式(canonical form)。包括equals( )、hashCode( )、clone( )

( 实现出Cloneable),并实现出Comparable和Serialiable等等。

41、对于那些”取得或改变Private数据值”的函数,请使用Java Beans

的”get”、”set”、”is”等命名习惯,即使你当时不认为自己正在撰写Java

Bean。这么做不仅可以轻易以Bean的运用方式来运用你的class,也是对此类函数的一种标准命名方式,使读者更易于理解。

42、对于你所拟定的每一个class,请考虑为它加入static public test(

),其中含有class功能测试码。你不需要移除该测试就可将程序纳入项目。而且如果有所变动,你可以轻易重新执行测试。这段程序代码也可以做为class的使用示例。

43、有时候你需要通过继承,才得以访问base class的protected成员。这可能会引发对多重基类(multiple base

types)的认识需求。如果你不需要向上转型,你可以先衍生新的class发便执行protected访问动作,然后在”需要用到上述

protected成员”的所有classes中,将新class声明为成员对象,而非直接继承。

44、避免纯粹为了效率考量而使用final函数。只有在程序能动但执行不够快时,而且效能量测工具(profiler)显示某个函数的调用动作成为瓶颈时,才使用final函数。

45、如果两个classes因某种功能性原因而产生了关联(例如容器containers和迭代器iterators),那么请试着让其中某个class成为另一个class

的内隐类(inner class)。这不仅强调二者间的关联,也是通过”将class名称嵌套置于另一个class 内”而使同一个class

名称在单一Package中可被重复使用。Java 容器库在每个容器类中都定义了一个内隐的(inner)Iterator

class,因而能够提供容器一份共通接口。运用内隐类的另一个原因是让它成为private实现物的一部分。在这里,内隐类会为信息隐藏带来好处,而不是对上述的class关联性提供肋益,也不是为了防止命名空间污染问题(namespace

pollution)。

46、任何时候你都要注意那些高度耦合(coupling)的 classes.请考虑内隐类(inner

classes)为程序拟定和维护带来的好处。内隐类的使用并不是要去除classes间的耦合,而是要让耦合关系更明显也更便利。

47、不要成为”过早最佳化”的牺牲品。那会让人神经错乱。尤其在系统建构初期,先别烦恼究竟要不要撰写(或避免)原生函数(native

methods)、要不要将某些数声明为final、要不要调校程序代码效率等等。你的主要问题应该是先证明设计的正确性,除非设计本身需要某种程度的效率。


推荐阅读
  • 深入理解Java泛型:JDK 5的新特性
    本文详细介绍了Java泛型的概念及其在JDK 5中的应用,通过具体代码示例解释了泛型的引入、作用和优势。同时,探讨了泛型类、泛型方法和泛型接口的实现,并深入讲解了通配符的使用。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • 本文介绍如何使用阿里云的fastjson库解析包含时间戳、IP地址和参数等信息的JSON格式文本,并进行数据处理和保存。 ... [详细]
  • 并发编程:深入理解设计原理与优化
    本文探讨了并发编程中的关键设计原则,特别是Java内存模型(JMM)的happens-before规则及其对多线程编程的影响。文章详细介绍了DCL双重检查锁定模式的问题及解决方案,并总结了不同处理器和内存模型之间的关系,旨在为程序员提供更深入的理解和最佳实践。 ... [详细]
  • 扫描线三巨头 hdu1928hdu 1255  hdu 1542 [POJ 1151]
    学习链接:http:blog.csdn.netlwt36articledetails48908031学习扫描线主要学习的是一种扫描的思想,后期可以求解很 ... [详细]
  • 本文详细介绍了Java中的访问器(getter)和修改器(setter),探讨了它们在保护数据完整性、增强代码可维护性方面的重要作用。通过具体示例,展示了如何正确使用这些方法来控制类属性的访问和更新。 ... [详细]
  • SQLite 动态创建多个表的需求在网络上有不少讨论,但很少有详细的解决方案。本文将介绍如何在 Qt 环境中使用 QString 类轻松实现 SQLite 表的动态创建,并提供详细的步骤和示例代码。 ... [详细]
  • andr ... [详细]
  • 本文详细探讨了VxWorks操作系统中双向链表和环形缓冲区的实现原理及使用方法,通过具体示例代码加深理解。 ... [详细]
  • 本文介绍了两种方法,用于检测 Android 设备是否开启了开发者模式。第一种方法通过检查 USB 调试模式的状态,第二种方法则直接判断开发者选项是否启用。这两种方法均提供了代码示例和详细解释。 ... [详细]
  • 本文介绍如何在Java项目中使用Log4j库进行日志记录。我们将详细说明Log4j库的引入、配置及简单应用,帮助开发者快速上手。 ... [详细]
  • 本文提供了使用Java实现Bellman-Ford算法解决POJ 3259问题的代码示例,详细解释了如何通过该算法检测负权环来判断时间旅行的可能性。 ... [详细]
  • 本文详细探讨了JDBC(Java数据库连接)的内部机制,重点分析其作为服务提供者接口(SPI)框架的应用。通过类图和代码示例,展示了JDBC如何注册驱动程序、建立数据库连接以及执行SQL查询的过程。 ... [详细]
  • Java编程实践:深入理解方法重载
    本文介绍了Java中方法重载的概念及其应用。通过多个示例,详细讲解了如何在同一类中定义具有相同名称但不同参数列表的方法,以实现更灵活的功能调用。 ... [详细]
author-avatar
mobiledu2502926403
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有