北京总部

iOS开发菜鸟入门学习建议

iOS开发菜鸟入门学习建议

2016-12-30

作为iOS开发菜鸟入门的你,相信在未来的开发之旅中,也会经历一些困惑与喜悦。这里,先送上一句鼓励的话:“含泪播种,必将微笑收割。”当你自己精心开发的App发布到AppStore的那一天,蓦然回首,你会发现,过去付出的一切,都是值得的! 首先: 第一点:把你的obj-c语言基础打好,在学习obj-c之前最好学一下c/c++,除此之外最好各课都要设计了解些,xml,json,mysql,html,js! 第二点:对苹果产品了解些!你要开发什么东西,就要对那些东西了解!比如,苹果手机的分辨率,iPhone5以上(640*1136),iPhone4/4s(640*960)! 如果你连这些都不知道你还是别出来混了!这些都要耳熟能详,张口就来!(说得这个分辨率,我碰到好多培训出来的新手,连@2x的概念都没有,所谓的一倍图和二倍图,具体请看博客:iphone关于单倍图和二倍图(导航 背景 变高),如何让你在开发过程中少犯这种低级错误!比如你参加了工作,美工给你切好了图,你做工程的时候发现这个图被拉伸了或者压缩了,你不知道原因,以为程序写错了,就请教老员工!这时候别人会怎么看你?你懂的!)我说一下可能的原因:首先检查切图,看切图的分辨率,按我上面说得动动脑袋算一算!如果切图不合理,要求美工重新切! 第三点:经验之谈,初期多看别人写的代码,不是说要模仿(不好听的话就是抄别人的代码),从中你就可以学到很多东西!遇见不懂的多看官方文档,或者百度谷歌。多去code4app下一些源码来看!有问题多看外国网站(这个网站很强大,基本上什么问题都能搜到)和cocoaChina!(别有问题问同事,多上网查,网上什么都有,对的错的看你怎么分辨了)! 第四点:有人问用纯代码好还是xib?有人说用纯代码写效率高!请问你验证过吗?再请问你会用xib写吗?如果不会请收回那句话!因为你自己都不会写!官方的例子都还是xib呢! 有人说用xib托好,方便效率也高!那请问你会纯代码吗?你只会托不会纯代码写那就不行了!一些属性什么的不知道那程序是没法写的! 所以各有各的好处,看个人习惯,只要你能够实现效果功能,用什么都无所谓,关键是实现的方法要好要高! 第五点:代码质量,看别人代码是头疼的,尤其是注释很少的程序,如果程序需要维护,你最好注释些,好让别人知道你写的什么,不然后面人会骂死你!还有程序要遵循mvc思想,你用了就知道好处了! 第六点:写app肯定要与后台交互,前台需要什么不一定后台都能给全!要及时跟后台沟通!避免一些没必要的错误。一定要有耐心! 第七点:开发app之前你要了解各种好用的库,还有各种第三方!请参考:各种iOS开源类库 了解更多ios开发菜鸟入门学习技巧就到技术知识库!

更多>
软件开发入门:CSS中Position、Float属性深入探讨

软件开发入门:CSS中Position、Float属性深入探讨

2016-12-29

Position、Float是平时使用频率非常高的两个CSS属性,对于这两个属性的使用,可能大多数人存在一些模糊与不清晰的地方。今天小卓为大家分享的文章主要是对这两个属性使用上的介绍,以及两个属性交叉使用上的一些探讨。 1.HTML布局的基本要点 如果要掌握、运用好Position、Float属性必须要对HTML的两个基本点有清晰的了解。 盒子模型(box model) HTML的普通流(normal flow) 盒子模型 在HTML中元素的盒子模型分为两种:块状元素、行内元素,请注意这里的块状元素(Block)和行内元素(Inline)与Display属性中的inline、block两个属性值并不等同。盒子模型中的Inline、Block类似于是Display属性的父类,例如:Display属性中的list-item属性值是属于块状(Block)类型的。 我们直观的上看两种盒子模型的区别: 块状(Block)类型的元素可以设置width、height属性,而行内(Inline)类型设置无效。 块状(Block)类型的元素会独占一行(直观的说就是会换行显示,无法与其他元素在同一行内显示,除非你主动修改元素的样式),而行内(Inline)类型的元素则都会在一行内显示。 块状(Block)类型的元素的width默认为100%,而行内(Inline)类型的元素则是根据自身的内容及子元素来决定宽度。 列举出一些大家常见的元素的分类: 块状元素:p、div、ul、li、dd、dt… 行内元素:a、img、span、strong… HTML的普通流 浏览器在读取HTML源代码的时候是根据元素在代码出现的顺序读取,最终元素的呈现方式是依据元素的盒子模型来决定的。行内元素是从左到右,块状元素是从上到下。(如下图) strongemspan A B C 如果你不改变元素的默认样式前提下,元素在HTML的普通流中会“占用”一个位置,而“占用”位置的大小、位置则是由元素的盒子模型来决定。因此,在后续讲的Position、Float属性是否会使元素脱离这个普通流是一个关键点。 2. Position属性 我们首先来谈谈Position属性,因为Position属性能够很好的体现HTML普通流这个特征。重点在于应用了不同的position值之后是否有脱离普通流和改变Display属性这两点。 Position的属性值 Position的属性值共有四个static、relative、absolute、fixed。 Static 所有元素在默认的情况下position属性均为static,而我们在布局上经常会用到的相对定位和绝对定位常用的属性top、bottom、left、right在position为static的情况下无效。其用法为:在改变了元素的position属性后可以将元素重置为static让其回归到页面默认的普通流中。 Relative 俗称的相对定位,重点在于对相对理解。我们此前说过每个元素在页面的普通流中会有“占用”一个位置,这个位置可以理解为默认位置,而相对定位就是将元素偏离元素的默认位置,但普通流中依然保持着原有的默认位置,并没有脱离普通流,只是视觉上发生的偏移。 我们先用块状元素来做个示例: A B C 右图中的黑色虚线部分为元素B的默认普通流位置,而黄色线则代表元素B的相对偏移量。我们可以很明显的看出在元素C依然还是保留在原位,并没有因为元素B发生了偏移而随之变化。 我们再来看看行内元素(在这里用大家最常用的span来做示例) strongemspan 请注意看,在这里我是有对span进行width属性的赋值(为100px)。但是我们可以看到span在运用了relative这个position属性值后,依然对width属性无效,换而言之,position: relative并没有改变行内元素的Display属性,这个概念非常重要(注意与接下来的absolute的区别)。 Absolute 俗称的绝对定位,绝对定位是相对而言的,怎么理解呢?应用了position: absolute的元素会循着节点树中的父(祖)元素来确定“根”,然后相对这个“根”元素来偏移。如果在其节点树中所有父(祖)元素都没有设置position属性值为relative或者absolute则该元素最终将对body进行位置偏移。应用了position: absolute的元素会脱离页面中的普通流并改变Display属性(重点)! 我们先用一个默认嵌套的div来做示例         A                              A - 1                                          A - 2                                        现在我们对A-2这个div设置绝对定位(Top: 0, Left: 0),而没有对它的父元素(A、A-1)设置任何的position值 A                 A - 1                                           A - 2 可以看到(A-2)最终是根据body来产生了位移,让我们对比分别设置一下父元素position。 从上面的图,我们可以总结以下几个结论。 1)块状元素在position(relative/static)的情况下width为100%,但是设置了position: absolute之后,会将width变成auto(会受到父元素的宽度影响)。 2)元素设置了position: absolute之后,如果没有设置top、bottom、left、right属性的话,浏览器会默认设置成auto,而auto的值则是该元素的“默认位置”。即设置position: absolute前后的offsetTop和offsetLeft属性值不变。 特殊情况: Firefox的话会直接将top、left设置成offsetTop和offsetLeft的值而非auto。 IE7下的表现更类似于float,会附加到父元素的末尾。 一些Position的小知识 1)应用了position: relative/absolute的元素,margin属性仍然有效,以position:relative来举例。如果设置了left、top、bottom、right的属性,建议大家不要设置margin数据,因为很难精确元素的定位,尽量减少干扰因素。 2)position: absolute忽略根元素的padding。 A          A - 1                  A - 2                       3)在IE6/7中设置position属性后会导致z-index属性失效   a               b          4)行内元素在应用了position:absolute之后会改变display。 我的display属性由inline变成了block 因此,要注意到relative是并没有改变行内元素的呈现模式,而absolute是会改变行内元素的呈现模式,如果设置了absolute并不需要显式的的将元素display改成block。 5)应用了position: absolute / relative之后,会覆盖其他非定位元素(即position为static的元素),如果你不想覆盖到其他元素,也可以将z-index设置成-1。 Fixed 在很长的时间里,这个属性值因为兼容性问题,并没有得到非常广泛的应用(IE6未实现该属性值)。fixed和absolute有很多共同点: n 会改变行内元素的呈现模式,使display之变更为block。 n 会让元素脱离普通流,不占据空间。 n 默认会覆盖到非定位元素上。 fixed与absolute最大的区别在于:absolute的”根元素“是可以被设置的,而fixed则其”根元素“固定为浏览器窗口。即当你滚动网页,其元素与浏览器窗口之间的距离是恒定不变的。 3. Float属性 float的属性值有none、left、right,有几个要点: 只有横向浮动,并没有纵向浮动。 当元素应用了float属性后,将会脱离普通流,其容器(父)元素将得不到脱离普通流的子元素高度。 浮动元素的后一个元素会围绕着浮动元素(典型运用是文字围绕图片),与应用了position的元素相比浮动元素并不会遮盖后一个元素。 浮动元素的前一个元素不会受到任何影响(如果你想让两个块状元素并排显示,必须让两个块状元素都应用float)。 与Position的兼容问题 1)元素同时应用了position: relative、float、(top / left / bottom / right)属性后,则元素先浮动到相应的位置,然后再根据(top / left / bottom / right)所设置的距离来发生偏移。 div 左图中的div是没有设置top、left值的,而右边则设置了50px的偏移。 2)元素同时应用了position: absolute及float属性,则float失效。 我是一个应用了position:absolute和float:left的DIV,不过我还是在浏览器的右边,没有浮动到左边。 3)第一个元素应用了position之后会覆盖着接下来的float元素(如果两个元素所处的位置相同)       我是一个应用了position:absolute的DIV。       我是float:left的DIV 回顾:如果你不将float的元素的position设置成relative的话,你想通过设置float元素的z-index来的达到覆盖position:absolute是无效的。同理,float元素下面存在position: absolute的子元素,如果你不将float的元素的position设置成relative的话,absolute元素是不会定位到float元素的。 4)同时应用position: absolute和float: left会导致清除浮动无效(position: relative则可以清除浮动)。 常用的清除浮动的方法有两种: 通过在容器中添加一个标签,设置该标签的样式为 clear: both 容器设置overflow: hidden      我是DIV      以上的知识,你是否吸收了呢?希望能对你有所帮助。欢迎进入中软国际教育集团技术知识库,这里有解决问题的钥匙哦!

更多>
全面理解HTTP

全面理解HTTP

2016-12-21

引言:作为一名软件工程Web专业学生,对于HTTP的熟悉掌握是必不可少的,特此做记录,打造自己的HTTP栈。 URL与URI 我们经常接触到的就是URL了,它就是我们访问web的一个字符串地址,那么URI是什么呢?他们是什么关系呢? URL:uniform resource location 统一资源定位符 URI:uniform resource identifier 统一资源标识符 这也就是说,URI是一种资源的标识;而URL也是一种URI,也是一种资源的标识,但它也指明了如何定位Locate到这个资源。 URI是一种抽象的资源标识,既可以是绝对的,也可以是相对的。但是URL是一种URI,它指明了定位的信息,必须是绝对的。 报文-通信的桥梁 客户端和服务器端通过相互发送报文进行通信,要深刻理解HTTP协议,就需要理解报文的格式和内容。 报文的组成 无论是请求报文还是响应报文都需要有报文首部,当然报文主体并不是必需的。 一般来说,请求报文的格式如下: 看一下百度网站的请求报文: 简单的报文形式: GET / HTTP/1.1    //请求行,包含用于请求的方法,请求的URI,HTTP版本 //以下为各种首部字段 Host: www.baidu.com Connection: keep-alive Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0... Accept-Encoding: gzip, deflate, sdch Accept-Language: zh-CN,zh;q=0.8 响应报文的格式如下: 看一下百度网站的响应报文: HTTP/1.1 200 OK   //状态行,包含表明响应结果的状态码,原因短语和HTTP版本 //以下为各种首部字段 Server: bfe/1.0.8.5 Date: Tue, 06 Oct 2015 14:48:28 GMT Content-Type: text/html;charset=utf-8 Transfer-Encoding: chunked Connection: keep-alive Cache-Control: private 告知服务器意图的HTTP方法 发送HTTP的方法有许多种,最常用的便是GET和POST,下面就这两种进行详细地说明。 1、GET GET方法用来请求访问URI所指定的资源,(我想访问你的某个资源)并不对服务器上的内容产生任何作用结果;每次GET的内容都是相同的。GET方式把请求所需要的参数放到URL中,直接就可以在URL中看见,有大小限制。 2、POST POST方法用来传输实体主体,目的并不是获取响应的主体内容,(我要把这条信息告诉你),POST方式则是把内容放在报文内容中,因此只要报文的内容没有限制,它的大小就没有限制。 3、总结 GET用于获取某个内容,POST用于提交某种数据请求。 按照使用场景来说,一般用户注册的内容属于私密的,这应该使用POST方式;而针对某一内容的查询,为了快速的响应,可以使用GET方式。 无状态协议与Cookie HTTP是一种无状态协议,也就是每一次发送都是一次新的开始,服务器并不知道也没有必要知道当前连接的客户端是否之前有过交集,那么当需要进行保存用户登录状态时,则出现了麻烦,这个时候使用Cookie来保存状态。 Cookie会根据服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段,通知客户端保存Cookie(保存在自己的电脑里),当下次客户端发送请求时,Cookie值会被添加到请求报文中发送出去。 持久连接 使用浏览器浏览一个包含多张图片的HTML页面时,浏览器会发起多次请求,如图所示: 显而易见每次请求会造成无谓的TCP连接建立和断开,增加通信量的开销。 引入持久连接 持久连接的特点是,只要任意一端没有明确提出断开连接,则保持TCP连接状态。目前HTTP/1.1中默认为持久连接。 Connection:keep-alive 管线化 管线化可以同时并行发送多个请求,不需要一个一个等待响应了。 常见的状态码 确保安全的HTTPS HTTP+加密+认证+完整性保护 = HTTPS 一些登陆界面和购物结算界面使用HTTPS通信,也就是改用https://,HTTPS说简单点就是它的通信接口部分被SSL和TLS协议代替而已。 身份认证 有一些网址或者服务需要用户的身份信息,因此需要随时知道这些消息,但是肯定不能每次都让用户输入用户密码,因此关于认证就有下面几种方式: 在这里主要说一下FormBase认证,也就是表单认证。 使用Cookie来管理Session 1、客户端把用户IE和密码等登录信息放入报文的实体部分,以POST方式发送给服务器。 2、服务器进行身份认证,产生SessionID,加入到Set-Cookie内,返回给客户端。/3、客户端接收到SessionID后,将其加入Cookie,下次请求时,浏览器会自动发送Cookie。 在传输过程中,一种安全地保存密码方式是,先利用给密码加盐的方式增加额外信息,再使用散列hash函数计算出散列值后保存。 更多技术方面问题欢迎进入技术知识库~

更多>
无需内测账号,带你体验微信小程序完整开发

无需内测账号,带你体验微信小程序完整开发

2016-12-21

前一阵子的微信小程序火爆了网络与朋友圈,迅速成为讨论焦点,大家可能觉得只有收到内测邀请才能体验小程序的开发流程,其实不然,每个人都可以体验,下面就请跟着小卓一起去了解下吧。 一、下载微信Web开发工具 首先,微信给我们提供了它自己的小程序集成开发工具,只需要到这个页面下载即可:https://mp.weixin.qq.com/debug/wxadoc/dev/devtools/download.html?t=1474644089359 下载完成后,打开开发者工具,会有一个扫码登录界面。 用你的微信扫码就可以登录进来了, 然后开发者工具会帮我们创建一个默认工程,项目的文件结构如下: 所有的代码编辑以及运行预览都可以在这个开发者工具中进行。接下来咱们看看微信小程序的项目结构。 二、项目结构 如上图,首先在根目录中有三个文件 app.js, app.json, app.wxss。 其中 app.js 是程序主入口的脚本文件, app.json 是全局配置文件, app.wxss 是小程序的样式表文件。 先来看看 app.json : 这个配置文件中定义了两个节点, pages 是小程序的所有页面对应的路径, window 是小程序窗口的配置信息。 再来看看样式文件 app.wxss : 咱们先不用深究它具体定义了什么样式,只需要先了解项目结构即可。接下来再来看看程序的主入口 app.js: 这里初始化了一个 App 对象,并且定义了三个方法 onLaunch,getUserInfo 和 globalData。先来看看 onLaunch: 首先 wx.getStorageSync 方法会获得本地的一个以 logs 为 key 的缓存数据。 传入这个方法的 logs 本身没有任何特殊含义,只是用于表示我们使用的缓存数据。 这个机制可以理解为和 iOS 的 NSUserDefaults 类似。 然后,我们想这个缓存数组中插入当前的日期 logs.unshift(Date.now())。 最后再调用 setStorageSync 方法将我们新的缓存内容写入到本地缓存中。 因为 onLaunch 方法是小程序的生命周期方法,所以在小程序启动的时候就会调用它,并将当前启动的日期记录并写入本地缓存中。 没错 onLaunch 整个方法就干了这件事儿。 我们再来看下 getUserInfo 方法,它通过调用 wx.login 和 wx.getUserInfo 两个微信平台的函数获取当前用户登录信息,并传会给回调函数 cb: 至于最开始的 if 判断 if(this.globalData.userInfo) 咱们暂时不用深究,只看 else 部分即可。 三、页面结构 了解完根目录的几个文件, 咱们再来看看页面文件, 正如咱们刚开始截图中看到的项目结构: 所有的页面都在 pages 文件夹中。 我们这个示例工程中有两个页面 index 和 logs。 还记得我们前面在 app.json 看到的页面配置吗: 正好对应上咱们现在看到的两个目录, 还要记得一点, pages 数组中的第一个元素会作为我们小程序的主页。 切记,index 页面之所以是首页,是因为它是 pages 里面的第一个元素, 而不是因为它的名称是 index。 我们来看看 index 页面的构成, index.js, index.wxml, index.wxss。 index.js 是页面的脚本文件, index.wxml 是页面的 UI 文件, index.wxss 是页面的样式文件。 先看一下 index.js: getApp() 方法获取我们的 app 实例。 然后在看 onLoad 方法, 使用我们刚才提到的 getUserInfo 方法获取用户信息,并设置到 data 属性中。 bindViewTap 方法会绑定一个事件,这个事件调用 wx.navigateTo 方法。 这个方法其实就是页面跳转,从代码中也不难看出,跳转到了 logs 页面。 脚本文件就这些内容了,咱们继续再来看看 UI 文件, index.wxml: 这个就是小程序 index 页面的 UI 文件了,其实就是微信平台定义了一系列组件,最外层是  还记得 container 么? 我们在最外层的 app.wxss 定义了它的样式。 它里面包含了两个 View。 先来看看第一个: 首先 bindtap="bindViewTap" 给这个 View 绑定了一个点击事件,也就是我们前面 index.js 对应的这个方法,用户点击这个 View 就会跳转到 logs 页面上。 然后这个 View 里面包含了一个 Image 和 Text, Image 的 src 属性设置为userInfo.avatarUrl, 代表当前用户的头像, Text 中使用 userInfo.nickName, 代表当前用户的昵称。 这样, index 页面的整体逻辑就都完成了, 还有一个 index.wxss 样式文件,这个咱们就先略过。 再来看看第二个视图: motto 其实就是我们在 index.js 中定义的一个属性: 它会在页面上显示一个 Hello World。 现在,我们切换到调试界面, 就可以看到小程序的主页了, 和我们刚刚描述的 UI 完全一样吧: 这里的用户头像和昵称是动态从你的登录状态中取到的。 然后我们在这里点击用户的头像,就会跳转到 logs 页面, 列出你每次登录小程序的时间点。 四、上传小程序 现在微信小程序的基本开发流程就给大家介绍完了,还有一个 logs 页面没介绍,但它和 index 的页面的基本思路都是一样的,咱们就不多赘述了。 开发完小程序后,我们需要把它部署到哪里呢? 相信大家也有同样的问题。 答案也很简单,切换到项目选项卡,然后点击上传按钮即可: 由于笔者的环境没有内测账号,所以在上传区域显示的是项目未关联 AppID, 如果有了测试账号,就会显示你的 AppID 了。 目前只有内测账号才能够上传小程序。这就是唯一的差别了。没有内测账号只是不能上传,但完全可以在本地开发和测试。 小程序的这种上传方式可能会让大家觉得有些不同吧。 大家平常理解的 Web app 一般都需要自己搭建服务端,并且维护。 而小程序的这种托管方式,其实已经和我们开发一个原生 App 差不多了。 虽然前端上使用的是 js 这些看起来像是 web 的技术,但它核心思路跟传统的 web app 已经不太一样。 更像一种类似 React Native 的实现。 五、结尾 这次和大家一起,从头到尾完整的体验了一个最简单的小程序的整体结构以及开发思路。如果能找到合适的切入点,小程序这个平台还是能找到一些不错的机会的。但不要认为小程序的出现就会马上颠覆谁,也不需要听到网上有人说小程序难成大事就觉得它没机会。 找到自己擅长的,以及用户需要的,没准就会创造出一些不错的产品。 这次也是帮大家做一个基本的技术梳理,希望能够对大家有所帮助。

更多>
郭老师说:专业UI设计师需要注意什么

郭老师说:专业UI设计师需要注意什么

2016-12-14

       今天,小卓请到了中软卓越大连ETC郭毓舒老师为大家带来APP界面和UI设计界面的知识。郭老师毕业于吉林艺术学院的视觉传达设计专业,具有10多年的从业经验,是一名资深设计师哦。快跟小卓一起涨姿势吧! UI设计普遍存在的问题: ·缺乏对细节的注意,图形和配色风格前后的统一性不够。 ·图标内容的大小和配色颜色的选择范围的匹配度不高。 ·界面设计视觉动点视觉交点界面风格混乱,乱用色彩搭配。 ·人机交互设计不能充分了解用户的心理需求和感觉规律。 ·背景的层次感形态统一性不强,缺少简洁精致的舒适美。 ·原创性差,可以借鉴其他的设计,但是不能直接抄,注意版权问题。 科学合理的设计流程 Step1:确定意向        确定风格,根据APP的主题确定设计风格,达到突出主题的目的。 环保可以采用蓝色的和绿色的清新风格,也可以选择警醒的灰色风格。 Step2:找到参考        可以到知名设计网站,观察研习国内外知名大师的设计作品,确定APP风格与控件元素的匹配度。 Step3:整体设计        要考虑到设计的人机交互,考虑到整套风格的色系,注重用户的使用感觉,根据APP的功能和之前设定的风格出整体的草图。 Step4:电脑绘图        开始在电脑上绘图,绘图过程中当调整某一模块和控件的风格及配色时也要考虑到整体风格和色彩的匹配度和融合度。 可借鉴素材网站:        Dribble、UI中国、站酷、UI设计、花瓣网等。

更多>
每个程序员都需要了解的一个SQL技巧

每个程序员都需要了解的一个SQL技巧

2016-12-14

 对于数据过滤而言CHECK约束已经算是相当不错了。然而它仍存在一些缺陷,比如说它们是应用到表上面的,但有的时候你可能希望指定一条约束,而它只在特定条件下才生效。使用SQL标准的WITH CHECK OPTION子句就能完成这点,至少Oracle和SQL Server都实现了这个功能。下面是实现方式:       CREATE TABLE books (           id      NUMBER(10)              NOT NULL,           title     VARCHAR2(100 CHAR)     NOT NULL,           price    NUMBER(10, 2)            NOT NULL,           CONSTRAINT pk_book PRIMARY KEY (id)  ); / CREATE VIEW expensive_books AS SELECT id, title, price FROM books WHERE price > 100 WITH CHECK OPTION;  / INSERT INTO books VALUES (1, '1984', 35.90);   INSERT INTO books VALUES(      2,     'The Answer to Life, the Universe, and Everything',      999.90 );       正如你看到的那样,expensive_books 是那些价格大于100块的书。这个视图只会返回第二本书:       SELECT * FROM expensive_books;       上述查询的输出是:        ID   TITLE                                    PRICE --   --------------------------------------------   -------        2    The Answer to Life, the Universe, and ...    999.9       不过由于我们使用了CHECK OPTION,我们还能防止用户往”昂贵的书籍”中插入那些廉价的。比如说,我们运行下这个查询:        INSERT INTO expensive_books VALUES (        3,        '10 Reasons why jOOQ is Awesome',        9.99 ); 更多信息知识库内容请点击:信息知识库

更多>
Java中的main()方法详解

Java中的main()方法详解

2016-11-21

在Java中,main()方法是Java应用程序的入口方法,也就是说,程序在运行的时候,第一个执行的方法就是main()方法,这个方法和其他的方法有很大的不同,比如方法的名字必须是main,方法必须是public static void 类型的,方法必须接收一个字符串数组的参数等等。 在看Java中的main()方法之前,先看一个最简单的Java应用程序HelloWorld,我将通过这个例子说明Java类中main()方法的奥秘,程序的代码如下:   public class HelloWorld { public static void main(String args[]) { System.out.println("Hello World!"); } }   一、先说类: HelloWorld 类中有main()方法,说明这是个java应用程序,通过JVM(java虚拟机)直接启动运行的程序。 既然是类,java允许类不加public关键字约束,当然类的定义只能限制为public或者无限制关键字(默认的)。 二、再说main()方法 main()方法的声明为:public staticvoid main(String args[])。必须这么定义,这是Java的规范。 为什么要这么定义,和JVM的运行有关系。 当一个类中有main()方法,执行命令“java 类名”则会启动虚拟机执行该类中的main方法。 由于JVM在运行这个Java应用程序的时候,首先会调用main方法,调用时不实例化这个类的对象,而是 通过类名直接调用因此需要是限制为publicstatic。 对于java中的main方法,JVM有限制,不能有返回值,因此返回值类型为void。 main方法中还有一个输入参数,类型为String[],这个也是java的规范,main()方法中必须有一个入参,类细必须String[],至于字符串数组的名字,这个是可以自己设定的,根据习惯,这个字符串数组的名字一般和Sun Java规范范例中mian参数名保持一致,取名为args。 因此,main()方法定义必须是:“public static voidmain(String[] args)”

更多>
关于Python,你需要了解的一些优雅技

关于Python,你需要了解的一些优雅技

2016-11-16

Python具有丰富和强大的库。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。Python让代码具备高度的可阅读性且看起来整洁美观。它不像其他的静态语言如C、Pascal那样需要重复书写声明语句,也不像它们的语法那样经常有特殊情况和惊喜。下面就来一起了解下Python的优雅技巧。

更多>

推荐阅读

更多

中软卓越java培训地址:北京市海淀区科学院南路2号融科资讯中心C座北楼12层 联系电话:400-666-3775 邮箱账号:etc-marketing@chinasofti.com

©2008-2016 北京中软国际教育科技股份有限公司 京ICP备14058756号-2