一、 学习语法之前的提醒
1) C语言属于一门高级语言,其实,所有高级语言的基本语法组成部分都是一样的,只是表现形式不太一样
2) 就好像亚洲人和非洲人,大家都有人类的结构:2只手、2只脚、1个头,只是他们外表不太一样,比如肤色、脸型
3) 因此,你掌握好了一门高级语言,再去学习其他高级语言,那是相当快的
4) 而且,很多其他高级语言,比如后面要学习的Objective-C,都是基于C语言、从C语言衍生出来的,好好学习C语言吧,绝对不吃亏
面向对象编程术语
类(class):类是构造面向对象系统的基本构筑块,它是现实世界中某一类实体的抽象。它是构建对象的蓝图。
对象(object):也称为实例(instance),是类的具体存在。
属性(attribute):也称为成员变量、实例变量(instance variable)、字段(field),表示一个对象所具有的状态。本书中,通常使用变量或者属性来称呼它。
方法(method):用于表示对象可以执行的动作,它包括名称、参数、返回类型以及方法体等内容。
构造器(constructor):也称为“构造方法”。用于创建和初始化一个实例的特殊方法,包括名称、参数以及“方法体”等,需要注意的是,它的名称必须和类名一致。
包(package):可以使用它来组织编写的类,使得类的组织更加有序。
二、 关键字
1. 什么是关键字
1> 关键字就是C语言提供的有特殊含义的符号,也叫做“保留字”
2> C语言一共提供了32个关键字,这些关键字都被C语言赋予了特殊含义
autodoubleintstructbreakelselongswitch
caseenumregistertypedefcharexternreturnunion
constfloatshortunsignedcontinueforsignedvoid
defaultgotosizeofvolatiledoifwhilestatic
大致浏览一遍即可,不用去百度每个关键字的作用,这些关键字以后会经常用到的,到时候你想不记住都难
2. 关键字的特征
1> 全部都是小写
2> 在开发工具或者智能文本编辑工具中会显示特殊颜色。默认情况下,C语言中的所有关键字在Xcode中都会显示紫褐色
3. main函数中哪些是关键字
int、return
在说Java标识符的时候,提到了关键字,指出Java标识符起名的时候,是不允许和Java的关键字重名的。
那么,现在就来说说Java关键字。
Java中一些赋以特定的含义、并用做专门用途的单词称为关键字(keyword)。在定义自己的标识符的时候,不要和这些关键字重名,否则是不会通过编译的。
在用IDE进行Java开发的时候,基本上这些工具都会对Java关键字进行高亮特殊处理,和普通的Java标识符进行区分。一旦发现你起得标识符颜色和其他普通标识符不一样,并且出现错误提示,大部分情况就是你起的名字和Java关键字重名了。
Java是对大小写敏感的编程语言,要注意所有Java关键字都是小写的,TURE、FALSE、NULL等都不是Java关键字。
Java的关键字在以后的说明中会陆续学习到,没必要专门去研究。当遇到相应的的内容时,在学习与其相关的Java关键字内容即可。
我们接触到的java关键字已经有不少了:public private void int double class static if else 等。这里很多刚开始接触Java的人,容易将String也认为是关键字,其实从关键字全部是小写即可看出它不是,String是一个特殊的Java类,在后面会有专门的说明。
最后再说说保留字。首先保留字就是关键字,这点是要明确。其次,保留字是特殊的关键字。保留字因为“无为”而特殊。相比于其他的关键字,各有各的用途,保留字就是典型的占着** 不 ** 的典型代表,因为这个语言,Java中保留字也只有两个:goto 和 const。
为什么保留字明明没用,却在Java语言中占据着关键字这么重要的位置。准确说来,有点历史渊源。前面已经说到了,Java很多内容来源于C++,并且在最开始将适用人群定位为C++程序员阵营。因为Java和C++的很多相似性,为了不要让C++程序员在Java中误用goto和const,就将这两项设置为关键字,但不为它们赋予实际的作用,这样即使Java中没有goto和const的具体应用,程序员也无法使用goto和const进行相应的扩展,保证Java设计初衷不被破坏。(但是为了照顾大家的情绪,goto和const在Java中都有相应的替代实现)。
abstract | assert | boolean | break | byte | continue |
case | catch | char | class | const | double |
default | do | extends | else | final | float |
for | goto | long | if | implements | import |
native | new | null | instanceof | int | interface |
package | private | protected | public | return | short |
static | strictfp | super | switch | synchronized | this |
while | void | throw | throws | transient | try |
volatile |
|
|
|
三、 标识符
1. 什么是标识符
标识符就是在程序中自定义的一些符号和名称。要跟关键字区分开来:关键字是C语言默认提供的符号,标识符是程序员自定义的
2. 标识符的作用
1) 标识符,从字面上理解就是用来标识某些东西的符号,标识的目的就是为了将这些东西区分开来
2) 其实,标识符的作用就跟人类的名字差不多,为了区分每个人,就在每个人出生的时候起了个名字
3) C语言是由函数构成的,一个C程序中可能会有多个函数,为了区分这些函数,就给每一个函数都起了个名称。函数的名称就是标识符的一种。除了函数,以后还会学到“变量”这个概念,变量的名称也是标识符
3. 命名
1> 命名规则(一定要遵守)
l 只能由26个英文字母的大小写、10个阿拉伯数字0~9、下划线_组成
l 严格区分大小写,比如test和Test是2个不同的标识符
l 不能以数字开头
l 不可以使用关键字作为标识符
2> 命名规范(最好遵守)
l 尽量起个有意义的名称,比如一个完整的英文单词,别人一看这个名称就能才能这个标识符的作用。如果不懂英文,你也可以用拼音,尽量不要起像abcde、sfsdfsdf等这类看起来没有意义的名称
l 如果标识符中含有多个单词,可以使用驼峰标识(除开第一个单词,后面每个单词的首字母都是大写):firstName、myFirstName,或者使用下划线_来连接:first_name、my_first_name
4. 常见的标识符命名错误
合法标识符 | 非法标识符 | 注释 |
fromNo12 | from#12 | 标识符中不能使用#符号 |
my_Boolean | my-Boolean | 标识符中不能使用“-”符号,应使用下划线“_”代替 |
Obj2 | 2ndObj | 标识符不能使用数字开头 |
myInt | int | “int”是内建关键字 |
jack_rose | jack&rose | 符号“&”不能出现在标识符中 |
GUI | G.U.I | 标识符内部需要出现“.”分隔符 |
在各种编程语言中,通常要为程序中处理的各种变量、方法、函数、对象和类等起个名字作为标记,以后就可以通过名字来对访问或修改某个数据的值,这些名字称为标识符。
简单来说,Java标识符就是我们给代码中各类内容起的名字。不需要对标识符的具体概念太过于分析。这里主要要了解的Java语言中,标识符有哪些要求。就像是我们起名字,都得有一定的规则和范围。
Java的标识符必须以字母、下划线(_)或美元符($)开头,后面可以跟任意数目的字母、数字、下划线(_)或美元符($)。
只要你起的标识符名字符合以上的规则,Java编译器就认可,进行编译通过,生成字节码代码。
这里要注意的是,字母的范围并不局限于26个英文字母,而是包括任何一门语言中的表示字母的任何Unicode字符。标识符不能包含空格,也不能使用java关键字。标识符的长度没有限制。后面会有相关的说明。Java编程语言是基于Unicode编码的,可接受几乎所有的语言字符。
同时在定义和使用标识符时需要注意,Java语言是大小写敏感的。比如,“abc”和“Abc”是两个不同的标识符。
在定义标识符的时候,需要注意以下一些问题:
1. 标识符不能有空格;
2. 标识符不能以数字开头;
3. 标识符不能是java关键字;(Java关键字下篇来说)
4. 不能有@、#等符号。
之所以强调这么几点,是因为在别的编程语言中,以上的标识符命名是允许的,需要特殊注意。
另外,虽然,可以使用中文名称作为标识符,但是并不建议这么做。因为在Java中,使用中文容易引起一些编码方面的问题。
5. 习题
指出标识符的正确性
test1Mike2jack My_tExt _test
test!32 haha(da)tt 哈哈_text 123haha
78text a _123 _
四、 注释
1. 什么是注释
1) 注释是在所有计算机语言中都非常重要的一个概念,从字面上看,就是注解、解释的意思
2) 注释可以用来解释某一段程序或者某一行代码是什么意思,方便程序员之间的交流。假如我写完一行代码后,加上相应的注释,那么别人看到这个注释就知道我的这行代码是做什么用的
3) 注释可以是任何文字,也就是说可以写中文
4) 在开发工具中注释一般是豆沙绿色
2. 单行注释
1) 单行注释以两个正斜杠开头,也就是以//开头,只能注释一行,从//开始到这行的结尾都是注释的内容
2) 任何地方都可以写注释:函数外面、里面,每一条语句后面
3. 多行注释
多行注释以/*开头,以*/结尾,/*和*/中间的内容都是注释
4. 注释的作用
1> 被注释的代码不会参与编译
l 注释是写给人看的,不是给计算机看的。计算机怎么可能看得我们写的中文嘛。因此,当编译程序的时候,并不会将注释编译到.o目标文件中
l 从.o文件的大小可以间接看出注释后的代码并没有被编译
2> 检查代码的作用
3> 排除错误
5. 注释的嵌套现象
1) 单行注释可以嵌套单行注释、多行注释
// 哇哈哈 // 呵呵呵
// /* fsdfsdf */ // sdfsdfsd
2) 多行注释可以嵌套单行注释
/*
// 作者:MJ
// 描述:第一个C语言程序
作用:这是一个主函数,C程序的入口点
*/
3) 多行注释不能嵌套多行注释
/* 哈哈哈
/*嘻嘻嘻*/
呵呵呵 */
4) 下面的写法是错误的
// /*
哈哈哈
*/
6. 注释的重要性
l 要养成写注释的良好习惯。绝大部分项目经理检查下属代码的第一件事就是看有没有写注释,也有很多公司的机试也会检查注释(机试就是给你一道编程题、一台电脑,在规定时间内解题)
l 今天,你写了几百行代码,很高兴,做出了一个非常不错的功能,但是,忘了写注释。一个星期过后,你再回去看那一段代码,你可能完全看不懂了,这是很正常的事。如果你写了注释,那情况就不一样了,注释可以帮助你回顾代码的作用。
l 你在某家公司待了1年多,写了10几万行代码,但是你不写一点注释。有一天你离职了,新的员工接手你做的项目,他首先要做的事情肯定是要读懂你写的代码。可是你一点注释都没写,10万行代码,全部都是英文,这会让这位新员工非常地蛋疼。每个人都有自己的思想,写代码的思路肯定是不一样的,看别人写的代码是件非常痛苦的事情,特别是没有注释的代码。你不写注释的做法会大大降低公司的开发效率。因此,所有的正规公司都非常重视注释。
7. 习题
看看下列程序能否运行成功,如果能,说出运行结果:
1> 程序1
//主函数
int main(){
printf("itcast\n");
return 0;
}
2> 程序2
//主函数
int main(){
printf("//itcast\n");
return 0;
}
3> 程序3
主函数
int main(){
printf("itcast\n");
return 0;
}
4> 程序4
int main()
{
printf(//"itcast\n");
return 0;
}
5> 程序5
int main()//主函数{
//printf("itcast\n");
return 0;
}
接着说Java注释的写法。这个就很简单了。
在Java中,提供了三种方式的注释方式:单行、多行以及文档注释。
单行和多行注释很容易理解,就是将注释符之间的内容当作注释,在编译和运行时将这部分内容忽略。
在java中,比较特殊的是javadoc注释,包含在这部分里的注释可以通过javadoc命令来自动生成API文档。通过javadoc工具,可以保证程序代码和技术文档的同步。在修改了程序中的注释后,只需要通过javadoc,就可以方便的生成相应的技术文档。
事实上,Java的API文档均是由Java JDK源码中的Java文档注释中,通过javadoc工具生成的。
单行注释就是在程序中注释一行代码,在Java中,将“//”放在需要注释的内容之前就可以了
多行注释是指一次将程序中的多行注释掉,在Java中,使用“/*”和“*/”来将程序中需要注释的内容包含起来,“/*”表示注释部分开始,而“*/”表示注释部分结束
这是一个java注释示例:
CommentTest.java
//这是一个单行注释
/*
这是一个
多行注释
*/
public class CommentTest {
public static void main(String[] args) {
System.out.println("打印输出");
// System.out.println("这行将不会被编译、执行");
}
}
从这个示例中,可以看出,不用担心源码中的注释的增加会影响Java代码的运行。在进行编译后,java字节码中,已经看不到Java注释的影子了。
Java注释只存在于源码中,是帮助人来更好的阅读理解Java源码的。
在Java中,还有一种特别的注释方式:文档注释。
利用这种注释,可以从java源文件中提取这些注释的内容,来产生HTML格式的API文档。文档注释的基本格式如下:
/**
文档注释内容
*/
可以看出,文档注释和多行注释的方式有点类似,主要的区别在于,文档注释的开始标记是“/**”,而多行注释标记的开始标记是“/*”。
因为文档注释最重要的一个功能就是用它来生成HTML格式的API文档,因此,很多的用于HTML格式化的HTML标记也可以用在文档注释中,在从这些注释中提取注释生成HTML文件的时候,在生成的HTML文件中,将使用这些HTML标记来格式化HTML文件内容。
和多行注释不同的另一个地方是,文档注释并不是可以放在java代码的任何地方,javadoc工具在从Java代码中提取注释生成API文档的时候,主要从以下几项内容中提取信息:
包;
公有(public)类与接口;
公有(public)方法和受保护(protected)方法;
公有(public)属性和受保护(protected)属性。
文档注释位置有:
类注释
类注释用于说明整个类的功能、特性等,它应该放在所有的“import”语句之后,在class定义之前。
这个规则也适用于接口(interface)注释。
方法注释
方法注释用来说明方法的定义,比如,方法的参数、返回值以及说明方法的作用等。方法注释应该放在它所描述的方法定义前面,紧靠着这个方法。
属性注释
默认情况下,javadoc只对公有(public)属性和受保护属性(protected)产生文档----通常是静态常量(关于“静态”、“公有”、“受保护”的概念,请看后续章节内容)。
包注释
类、方法、属性的注释都直接放到java的源文件中,而对于包的注释,无法放到java文件中去,只能通过在包对应的目录中添加一个package.html的文件来达到这个目的。当生成HTML文件时,package.html文件的<BODY>和</BODY>部分的内容将会被提取出来当作包的说明。关于包注释,后面还会有更进一步的解释。
概要注释
除了包注释外,还有一种类型的文档无法从java源文件中提取,那就是对所有类文件提供概要说明的文件。同样的,也可以为这类注释单独新建一个HTML文件,这个文件的名字为“overview.html”,它得<BODY>和</BODY>标记之间的内容都会被提取。
在javadoc注释中,常用@来表示一个javadoc标记,常用的javadoc标记如下:
@author:作者
@version:版本
@docroot:表示产生文档的根路径
@deprecated:不推荐使用的方法
@param:方法的参数类型
@return:方法的返回类型
@see:”参见”,用于指定参考的内容
@exception:抛出的异常
@throws:抛出的异常,和exception同义
在写好文档注释后,就可以利用javadoc命令工具生产该类的Java文档注释了,格式为html格式文档。
如果使用eclipse等IDE工具开发的话,都有相应的功能,可以为整个Java工程的全部源代码生成html格式的api文档。
这里来说说Java分隔符。
很多人说写程序就像是完成一篇文章。那么一篇好的文章自然少不了标点符号了。Java分隔符就是Java代码里面的分隔符。
Java中,具有代码分割作用的符号就是分隔符。圆点“.”、分号“;”、花括号“{}”和空格具有特殊的分隔作用,我们将其统称为分隔符。
1.分号
在Java中语句的分隔不是依靠回车来完成的,一条Java语句必须以分号(;)作为结束标记。因此,一行中可以写多条语句(语句之间用分号隔开即可)、一条语句也可以跨多行,只要在最后结束的地方加上分号表示此语句的结束。这个和很多的编程语言是一致的,比如C、C++、Javascript等。
2.块({})
所谓“块”,就是用“{”和“}”所包含的一段代码,它们在逻辑上常常是一个整体。
在Java程序中,类的代码必须放在一个“块”中,方法的代码也必须放在一个“块”中,而在条件语句、循环语句中的代码,也常常放在一个“块”中。{}就好像是一条边境线,将代码划分到相应的范围内。在Java代码中,{}数量必须匹配。不然就会出现没有结束范围的代码了。
3.空格(空白符)
就如同在英语中,使用空格来分隔单词一样,在程序语言中,也使用空格来分隔一条语句的不同部分,比如,在变量类型和变量名称之间,就必须使用空格来分隔开来。
在这边的空格包含如下一些主要的类型:空格符(space)、制表符(Tab)、回车(Return)等。
基本上来说,空格可以放在Java程序的任何地方,除了用于分隔一条语句外,空格还广泛地用于源代码的缩排,使得代码具有更高的可读性。
在写程序的时候,一定要灵活的使用空格来分隔语句或者做格式上的缩排等。但是,也要小心不要滥用它,比如,Java中规定,变量名、方法名等标识符不能包含空格,所以,不要定义包含有空格的标识符。
换句话说,空格符要用好,但不要滥用。除了必要的空格分隔(不然就无法区分不同的变量、名词了),空格更重要的作用是用来对源代码进行排版。源代码是给人来阅读的,良好地格式是顺畅阅读的前提。Java自有一套默认的代码编码排版规范。大部分的IDE都支持代码格式模版和自动格式化。所以对代码排版不用太担心。
4.圆点
圆点“.”用于类/对象和它的属性或者方法之间的分隔。在调用一个类/对象的属性或者方法的时候,必须使用如下的方式来完成。
在这里,圆点“.”就起到了分隔类/对象和它的方法或者属性的作用。这种用法在面向对象语言中很常见了。比如C++中、Ruby中等,有的语言是用其他符号来实现,比如php。