Java——基础语法
【标识符】
Java对各种变量、方法和类等要素命名时使用的字符序列。
Java标识符命名规则:
<1>由字母、数字、下划线"_"和美元符"$"组成(不能有空格);
<2>以字母、下划线、$开头;
<3>对大小写敏感,长度无限制。
【关键字】
Java关键字都是小写。
goto和const虽然从未被使用,但也作为Java关键字保留。
【Java常量】
Java的常量用字符串表示,区分为不同的数据类型:
<1>整型常量:123
<2>实型常量:1.23
<3>字符常量:'a'
<4>逻辑常量:true false
<5>字符串常量:"hello"
【注意】"常量"还会用在其他语境中,表示值不可变的变量(--变量赋值后,不允许改变,例如final)。
【变量】
<1>Java变量是程序中最基本的存储单元,其要素包括变量名、变量类型和作用域。
<2>Java程序中每个变量都有特定的数据类型,在使用前必须对其声明,格式如下:
type varName = value ;
【注意】
变量实际上是内存上的一小块区域,使用变量名访问这块区域,因此,每个变量使用前必须要先申明[声明],然后必须进行赋值[填充内容],才能使用。
【分类】
局部变量:方法或语句块内部定义的变量(方法参数列表中的形参也属于局部变量)。
成员变量:方法外部、类的内部定义的变量。
【注意】
类外面(即与类对应的大括号外面)不能有变量声明,即不存在C++中的全局变量的概念,原因在于Java是纯面向对象的语言,只要出现变量,必须是在对象class内部声明。
【程序执行过程】
<1>放置在硬盘上的可执行文件只有加载到内存中才能运行(加载后存放在内存的cod segment中);
<2>实际代码的运行还需要借助于操作系统的代码(已经加载在内存中);
<3>在code segment中找到main方法开始执行程序时,需要其余三部分的支持(heap、stack、data segment);
【数据类型】
注:逻辑型--布尔型 文本型--字符型
【内存中如何区分不同数据类型】
<1>在内存中所占大小不同;
<2>在内存中占用空间相同的,通过内部01布局区分。
【布尔型】
boolean类型数据只允许取true、false,不可以以0或非0的整数替代true和false,这点和C语言不同。
【字符型】
Java字符采用Unicode编码(全球语言统一编码),每个字符占两个字节,因而可用十六进制形式表示。
char c = '\u0061'; //这里\u表示Unicode编码
char c =125;//直接给出ASCII码值也可以
【整数类型】
<1>Java各整数类型有固定的表数范围和字段长度,其不受具体操作系统的影响,以保证Java程序的可移植性。
(这也是C语言编译后不可移植的原因)
<2>Java语言整型常量有3种表示形式:
a>十进制整数;
b>八进制整数(要求以0开头);
c>十六进制整数(要求以0x或0X开头)。
<3>Java语言的整型常量默认为int型,声明long型常量可以在后面加上"l"或"L"。
int i = 88888888888888888L;
//必须加L,否则会出错
【注意】
<1>在java中没有无符号的整数(C++里面有unsigned int类型)。
<2>以byte为例,Java中byte单独拿出一位作为该数的符号(即正负数),因此表示的范围为:-128~(128-1)。
【浮点类型】
<1>Java浮点类型有固定的表数范围和字段长度,不受平台影响。
<2>有两种表示方式:
a>十进制形式:3.14
b>科学计数法形式:3.14e2
<3>浮点类型默认是double类型,如果要声明一个float类型,则需在数字后面加上f或F。
float f = 12.3f;
//必须加上F,否则出错
注:计算机中浮点数是离散的,实际中是连续的,因此由于计算机精度的问题,造成存在误差。
因此在实际程序中很少会涉及到浮点数之间的比较,而把其差作为比较对象。
【数据类型转换】
<1>boolean类型不可以转换为其他数据类型;
<2>整型、字符型、浮点型的数据在混合运算中相互转换,转换时遵循以下原则:
a>容量小的类型自动转换为容量大的类型,数据类型按照容量大小排序为:
(这里的容量大小指的是表示的数的大小,而不是在内存中所占大小,比如long和float)
byte,short,char->int->long->float->double
byte,short,char之间不会相互转换,它们三者在计算时首先会转换成int类型
举例:
byte b1 = 1;
byte b2 = 2;
byte b3 = (byte)(b1+b2);
//执行b1+b2操作时,两个byte类型数据都会转换为int类型,其结果是int类型,而不是byte类型,因此需要强制类型转换
b>容量大的类型转换为容量小的类型时,要加上强制类型转换符,但可能造成精度降低或溢出,使用时要格外注意!
c>有多种类型数据混合运算时,系统首先自动的将所有数据转换成容量最大的那一种数据类型,然后再进行计算
d>实数常量默认为double
e>整数常量默认为int
【重要区别】
(1)区别1
byte b1 = 67;
byte b2 = 89;
byte b3 = (byte)(b1+b2);
上述程序输出b3时会显示:b3=-100
分析:
b1+b2后会超出byte类型的表数范围,在内存中int类型4个字节,byte类型1个字节,要将int转换成byte只需要把多余3个字节
截去即可,剩下的那个字节是多少结果就认为是多少。
double d1 = 1e200;
float f1 = (float)d1;
上述程序输出f1时会发生溢出
分析:
浮点型数据在计算机内部用特殊的形式表示,专门在中间存储了一个小数点,来计算小数点后有几位数,所以直接截取是转换不
过来的(这样内部的格式就不对了)。
(2)区别2
float f1 = (float)0.1;
//0.1占8个字节,强制转换为4个字节
float f1= 0.1f;
//0.1f本身就是4个字节
找出是否存在错误:
<1>float f1=0.1; 出错,0.1为double
<2>long l2=88888888888L;
<3>byte b3 = 129; 出错
<4>j=j+10; j未赋值
<5>i=i/10; 计算结果为0
<6>i=i*0.1; 0.1为double类型,double赋值为int类型i会出错
<7>byte b = b1-b2; b1-b2为int类型,赋值给byte会出错
<8>char c = c1+c2-1; 出错,相当于int类型赋值给char
<9>float f4 = f1+f2*0.1; 0.1为double类型
【格式】
<1>大括号对齐;
<2>遇到"{"缩进,Tab/Shift+Tab(往回缩的时候用:Shift+Table);
<3>程序块之间加空行;
<4>并排语句之间加空格(public class HelloWorld {}--在HelloWorld后加空格);
<5>运算符两侧加空格;
<6>"{"前有空格;
<7>成对编程(防止遗漏"}")。
【运算符】
(1)自加和自减运算符
(2)逻辑运算符
(3)赋值运算符和拓展赋值运算符
(4)字符串连接符
(5)表达式
(6)三目条件运算符
【语句】
(1)条件语句
if/if...else/if...else if/if...else if...else if...else/switch
(2)循环语句
for(JDK1.5引入新语法)/while/do...while
a> for循环语句
b>while与do-while语句
c>break与continue语句
【相关程序】
d> switch语句
注:
<1>switch语句中可以是int类型的值,也可以是char、short、byte类型的值(转换成int类型);
<2>不要忘记使用break语句。
【方法】
C/C++中称为函数,Java中称为方法。