Java作为一门语言,必然有他的语法规则。学习编程语言的关键之一就是学好语法规则,写作合乎语法规则的语句,控制计算机完成各种任务。而按编程语言的语法规则写成的,完成某项功能的代码集合就可以叫做程序。
一、初识对象(Object):
“初识对象的时候我们还不知道什么是对象。”
Java的一个重要特点就是面向对象(Object Oriented), 面向对象是相对于面向过程(Process Oriented)来说的。
我们用一个从冰箱中取一杯牛奶的例子来说明面向过程和面向对象的区别。
先用面向过程的思路描述这个过程:
再用面向对象的思路描述这个过程:
我们把冰箱作为一个对象的时候,问题变得异常简单,冰箱有一个方法就是取牛奶的方法,你调用这个方法,这个方法的返回值就是一杯牛奶。那么现实生活中有这样智能的冰箱吗?有的,找个人站冰箱旁边就行了,把那个人和冰箱合起来包装成一个对象它就是智能冰箱对象了^_^ 。
面向对象的编程语言把所有事物都看成对象:万事万物皆对象。
Java的程序就是一些对象的集合,这些对象通过调用彼此的方法与其他对象交互。每个对象都属于某种有一个类或者接口定义的类型。
二、标识符(Indentifier)
Java语言中的类名、对象名、方法名、常量名等等这些Java组件都需要起个名字,在而这些组件的名称就被称为标识符(Indentifier)。
合法的标识符具有一些命名规则:
1.必须以字母、美元符号或下划线开头。数字不能开头
2.第一个字符之后可以是任意长度的包含数字、字母、美元符号、下划线的任意组合。
3.不能使用Java关键字和保留字做标识符
4.标识符是大小写敏感的,Z和z是两个不同的标识符。
5.Unicode字符会被视为普通字母对待。
针对最后一条,连SCJP(Sun Ceritified Java Programmer)考试也不会要求,但是你要了解,这样是可以的:
java代码:
复制内容到剪贴板
代码:
public class Lesson02{public static void main(String[] args){String 世界 = "阿凡达!";System.out.println(世界);}}三、关键字(keywords)
和所有的编程语言一样,Java具有一组内置的关键字,这些关键字绝对不能用来做为标识符。Java SE6里一共有50个关键字(keywords):
[td=128]abstract[td=128]continue[td=128]for[td=128]new[td=128]switch
[td=128]assert[td=128]default[td=128]goto[td=128]package[td=128]synchronized
[td=128]boolean[td=128]do[td=128]if[td=128]private[td=128]this
[td=128]break[td=128]double[td=128]implements[td=128]protected[td=128]throw
[td=128]byte[td=128]else[td=128]import[td=128]public[td=128]throws
[td=128]case[td=128]enum[td=128]instanceof[td=128]return[td=128]transient 瞬间
[td=128]catch[td=128]extentds[td=128]int[td=128]short[td=128]try
[td=128]char[td=128]final[td=128]interface[td=128]static[td=128]void
[td=128]class[td=128]finally[td=128]long[td=128]strictfp[td=128]volatile
[td=128]const[td=128]float[td=128]native[td=128]super[td=128]while
有三个看起来像是关键字,其实不是关键的东东,他们是字面值(literal),字面值的概念下面立刻就会讲到。
true布尔字面值
false 布尔字面值
null 空值字面值
四、变量(Variable)初识
所谓变量,就是值可以被改变的量。定义一个变量的时候不需要什么特殊的关键字修饰。
这个变量的概念很接近数学里变量的概念,举个例子
java代码:
复制内容到剪贴板
代码:
public class Lesson02{ public static void main(String[] args){ String myName ="nabula"; myName = "nebulayao"; System.out.println(myName); } }五、常量(named constant、constant)初识
所谓常量,就是它的值不允许改变的量。要声明一个常量,就要用关键字 final 修饰,常量按照Java命名规范需要用全部大写,单词之间用下划线隔开:
复制内容到剪贴板
代码:
// 游戏方向设定 北 南 东 西 final int NORTH = 1; final int SOUTH = 2; final int EAST = 3; final int WEST = 4; // 三种游戏元素 final int RED_STAR = 1; final int YELLOW_STAR = 2; final int GREEN_STAR = 3; //那么我真改了会怎么样呢?我们一起看看public class Lesson02{ public static void main(String[] args){ final int SOUTH =2; SOUTH =1; } }六、字面值(literal、literal value)
literal这个单词被翻译了好多种说法、字面值、字面量、直接量、常值、文本符等等,我们需要知道这些翻译都是一个意思,就是编程语言里一些内建数据类型的源代码表示。譬如:
1 42//整数字面值
2 false//布尔字面值
3 3.1415//double字面值
4 'b'//char字面值
七、基本数据类型(Primitive Type)
Java中数据类型(Data Type)分为基本数据类型(Primitive Type)和引用数据类型(Reference Data Type)。
Java中基本数据类型有八种:
1、整数(integer data type)
Java语言中使用3中表示整数的方法,分别是十进制、八进制和十六进制,平时我们使用10进制,有时候也会用16进制,仅仅会因为趣味才会去用八进制。下面演示一下三种整型表示法:
java代码:
复制内容到剪贴板代码:
public class Lesson02{ public static void main(String[] args){ int i=10; //十进制直接写 int j=012; //八进制前面加0,八进制用0-7表示 int k=0xa; //十六进制前面加0x或者0X,16进制用 0-9 a-f 表示,为什么用 a-f,因为我们没有发明过 10-16的数字符号,这里的a-f x大小写都可以 int cafe = 0xcafe; //你觉得这个咖啡会等于几? System.out.println(i); System.out.println(j); System.out.println(k); System.out.println(cafe); } }
[td=61]类型[td=58]字节[td=289]范围[td=232]举例
[td=61]byte[td=58]1[td=289]-128 ~ 127[td=232]125
[td=61]short[td=58]2[td=289]-32768 ~ 32767[td=232]20000
[td=61]int[td=58]4[td=289]-2147483648 ~ 2147483647[td=232]123456789,2123456789
[td=61]long[td=58]8[td=289]-9223372036854775808~9223372036854775807[td=232]9876543210L
整数里的默认类型是int,也就是说你写一个整数字面值如果不明确指定他的类型,那么他一定是int类型。
想明确声明一个整数字面值是长整型的话,需要使用l或L做后缀。
java代码:
复制内容到剪贴板
代码:
public class Lesson02{ public static void main(String[] args){ byte a= 127; short b= 128; int c=2123456789; long d=9876543210l; long e=9876543210L; System.out.println("a="+a+" b="+b +" c="+c+" d="+d+" e="+e); } }2、浮点数(floating-point data type)
[td=50]类型[td=40]字节[td=307]范围[td=243]举例
[td=50]float[td=40]4[td=307]1.4E-45 ~ 3.4028235E38[td=243]3.1415f
[td=50]double[td=40]8[td=307]4.9E-324 ~ 1.7976931348623157E308[td=243]3.1415,3.1415d
复制内容到剪贴板
代码:
public class Lesson02{ public static void main(String[] args){ float a= 3.1415926f; double b= 3.1415926; float c=2123456789; float d=9876543210L; double e=9876543210L; System.out.println("a="+a+" b="+b +" c="+c+" d="+d+" e="+e); System.out.println(Float.MIN_VALUE); System.out.println(Float.MAX_VALUE); System.out.println(Double.MIN_VALUE); System.out.println(Double.MAX_VALUE); } }如果你想定义一个单精度浮点数字面量,那么你必须加f或F做后缀。
浮点数当然也可以存整数在里面。
3、布尔型(boolean)
布尔型表达一个真或假,是或否的意思。在Java中使用boolean关键字来声明一个变量为布尔类型,在Java中布尔字面值只有2个:true 和 false。注意是全小写的。
复制内容到剪贴板
代码:
public class Lesson02{ public static void main(String[] args){ boolean flag =true; flag= false; System.out.println("flag="+flag); } }4、字符型(char)
Java里用一个单引号内的单个字符来表示一个字符字面值。
[td=160]类型[td=160]字节[td=160]范围[td=160]举例
[td=160]char[td=160]2字节,16位[td=160]‘\u0000’ ~ ‘\uFFFF’[td=160]‘犇’,'\u004e’,’n’,23002
复制内容到剪贴板代码:
public class Lesson02{ public static void main(String[] args){ char a= 'a'; //ascii字符可以 char b='1'; char c= '犇'; //汉字也可以 char d='\u004e'; //其实上所有的Unicode字符都可以 char e='\n'; //转义符表示的字符也可以 char f=65535; //也可以,因为char存储的时候占两个字节,因为他不是整数,所以不需要符号位,因此它的最大值就是65535了。 char g=23002; char h=36745; System.out.println("a="+a+" b="+b +" c="+c+" d="+d+" e="+e+" f="+f+" g="+g+" h="+h); } }
上面的例子,如果文件以utf-8编码存储,那么编译时会报错,
因为命令行方式它人默认编码集是GBK,所以编译时请特别指出编码集为utf-8,方法如下:
八、赋值(assignment)初识
“=” 是个赋值运算符,我们讲运算符之前先把赋值运算符先行提出来讲一讲。他和数学里的用法一样,都是把右侧的值赋予左侧的变量。
下面用例子演示一下三种赋值方式:
复制内容到剪贴板
代码:
public class Lesson02{ public static void main(String[] args){ int a=1; int b=1,c=1; int d=a=b=c=2; System.out.println("a="+a+" b="+b +" c="+c+" d="+d); } }九、注释(annotation)初识
程序中的注释是程序设计者与程序阅读者之间沟通的手段,是写给程序员看的代码。通常情况下编译器会忽略注释部分,不做语法检查。
好的注释可以改善软件的可读性,可以让开发人员更快理解新的代码。
好的注释可以最大限度的提高团队开发的合作效率。
长期的注释习惯可以锻炼出更加严谨的思维能力。
Java中的注释有三种:
// 注释一行
好了,本讲就到这里,下一讲我们讲基本类型的相互转换和赋值
一、基本数据类型之间的转换
所谓数据类型转换就是将变量从当前的数据类型转换为其它数据类型,类型转换在Java里是个很严肃的事情^_^ ,我们现在讲解基本数据类型之间的转换。
先搞定布尔类型,布尔类型无法和其它基本数据类型之间发生任何方式的转换。
数字型的基本数据类型之间可以通过下面两种方式实现转换。
1、自动类型转换
a、当把一个取值范围小的基本数据类型赋值给一个取值范围大的基本数据类型时,Java编译器会帮你完成类型转换。
b、还有一个秘密:“字面值的整数永远隐含着的意思是它是个int”,当把一个在byte允许的取值范围的int字面值赋予一个byte类型的变量时,编译器会自动帮你完成。
java代码
复制内容到剪贴板代码:
public class Lesson03_1{ public static void main(String[] args){ byte byte1=100; short short1=10000; char char1= 23002; int int1= 1000000; long long1= 9876543210L; float float1= 9876543210.12345f; double double1= 9876543210.123456789; short short2=byte1; // byte byte2=short1; } }
上面的例子中 byte能转换成short,short不能转换成byte,这就是自动类型转换,自动类型转换不会损失精度。那么现在的问题是上面的程序如果强行编译会怎么样,编译器说了,把short转成byte可能会损失精度!那么把10000存入byte会的确会损失精度,那么把值是100的short类型数字存入byte肯定不会损失精度,那么编译器会怎么看待这件事情?我们问去采访一下它,改程序成这样:
java代码:
复制内容到剪贴板
代码:
public class Lesson03_2{ public static void main(String[] args){ short short1=100; byte byte1=short1; } }我们看到编译器并不买账,我们看到编译器只对整数字面值的大小有感知,对这种从大到小的类型转换是坚决不允许的,那么如何解决这个问题,就要用到后面讲的强制类型转换。
2、强制类型转换
我们把上面的程序再改一下:
复制内容到剪贴板
代码:
public class Lesson03_2{我们发现这一次成功了,加一个括号,里面写一上要转换的类型,就搞定了。强制类型转换果然很强!
强制类型转换的副作用也是有的,那就是的确可能导致精度丢失(数字不准确):
java代码:
复制内容到剪贴板
代码:
public class Lesson03_2{ public static void main(String[] args){ short short1=250; byte byte1=(byte)short1; System.out.print(byte1); } }这段代码的打印值是-6,我想这是大家都不愿意看到的情形。了解了强制类型转换的特点我们使用的时候就会特别留意,自然就不会出问题^_^。
二、引用数据类型(Reference Data Type)
和基本数据类型对应的就是引用数据类型,引用数据类型包括类应用、接口引用和数组引用。因为这三个东西大家还都没有学,所以这里只是让他们和大家见个面,混个脸熟,直接上代码:
java代码:
复制内容到剪贴板代码:
import java.util.List; public class Lesson03_3{ //对象 static Object object; //接口 static List list =null; //数组 static int[] months; public static void main(String[] args){ System.out.println("object="+object); System.out.println("list="+list); System.out.println("months="+months); } }
我们看到引用数据类型中接口和对象的类型名都是首字母大写的,数组是带有方括号的。他们和基本数据类型有着明显的不同。
用一句话来说就是基本数据类型变量里存储的是数据本身,而引用数据类型变量里存储的是指向数据本身的地址。