Java基础语法和基本数据类型
Java基础语法
一个Java程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作。
- 对象:对象是类的一个实例,有状态(属性)和行为(方法)。
- 类:类是一个模板,他描述一类对象的行为和状态。
- 方法:方法就是行为,一个类可以有很多方法。逻辑运算、数据修改以及所有动作都是在方法中完成的。
- 实例变量:每个对象都有独特的实例变量,对象的状态由这些实例变量的值决定。
基本语法
编写Java程序时,应注意以下几点:
- 大小写敏感:Java是大小写敏感的,这就意味着标识符Hello和hello是不同的。
- 类名:对于所有的类来说,类名的首字母应该大写。例如MyFirstJavaClass。
- 方法名:所有的方法都应该以小写字母开头。如果方法名含有若干单词,则后面的每个单词名大写。例如deleteMyWord。
- 源文件名:源文件名必须和类名相同。
- 主方法入口:所有的Java程序由public static void main(String []args)方法开始执行。
Java标识符
- 所有的标识符都应该以字母(A-Z 或者 a-z),美元符($)、或者下划线(_)开始
- 首字符之后可以是字母(A-Z 或者 a-z),美元符($)、下划线(_)或数字的任何字符组合
- 关键字不能用作标识符
- 标识符是大小写敏感的
- 合法标识符举例:age、$salary、_value、__1_value
- 非法标识符举例:123abc、-salary
Java修饰符
和其他语言一样,Java可以用修饰符来修饰类中的方法(行为)和属性(状态)。主要有两类修饰符:
- 访问控制修饰符:default,public,protected,private
- 非访问控制修饰符:final,abstract,static,synchronized
在后面的章节中我们会深入讨论Java修饰符。
Java变量
Java中主要有如下几种类型的变量:
- 局部变量
- 类变量(静态变量static)
- 成员变量(非静态变量)
Java数组
数组是储存在堆上的对象,可以保存多个同类型变量。在后面的章节中,我们将会学到如何声明、构造以及初始化一个数组。
Java枚举
Java5.0引入了枚举,枚举限制变量只能是预先设定好的值。使用枚举可以减少代码中的bug。
例如,我们为果汁店设计一个程序,它将限制果汁为小杯、中杯、大杯。这就意味着它不允许顾客点除了这三种尺寸外的果汁。
实例
1 class FreshJuice{ 2 enum FreshJuiceSize{small,medium,large}; 3 FreshJuiceSize size; 4 } 5 6 public class FreshJuiceTest{ 7 public static void main(String []args){ 8 FreshJuice juice=new FreshJuice(); 9 juice.size=FreshJuice.FreshiJuiceSize.medium; 10 } 11 }
注意:枚举可以单独声明或者声明在类里面。方法、变量、构造函数也可以在枚举中定义。
Java关键字
Java注释
类似于C/C++、Java也支持单行以及多行注释。注释中的字符将被Java编译器忽略。
继承
在Java中,一个类可以由其他类派生。如果你要创建一个类,而且已经存在一个类具有你所需要的属性或方法,那么你可以将新创建的类继承该类。
利用继承的方法,可以重用已存在类的方法和属性,而不用重写这些代码。被继承的类称为超类(super class),派生类称为子类(subclass)。
接口
在Java中,接口可以理解为对象间相互通信的协议。接口在继承中扮演着很重要的角色。
接口只定义派生要用到的方法,但是方法的具体实现完全取决于派生类(子类subclass)。
Java源程序与编译型运行区别
Java基本数据类型
变量就是申请内存来存储值。也就是说,当创建变量的时候,需要在内存中申请空间。
内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据。
因此,通过定义不同类型的变量,可以在内存中储存整数、小数或者字符。
Java的两大数据类型:
- 内置数据类型
- 引用数据类型
内置数据类型
Java语言提供了八种基本类型。六种数字类型(4个整数型,2个浮点型),一种字符类型,还有一种布尔型。
实例
1 public class PrimitiveTypeTest { 2 public static void main(String[] args) { 3 // byte 4 System.out.println("基本类型:byte 二进制位数:" + Byte.SIZE); 5 System.out.println("包装类:java.lang.Byte"); 6 System.out.println("最小值:Byte.MIN_VALUE=" + Byte.MIN_VALUE); 7 System.out.println("最大值:Byte.MAX_VALUE=" + Byte.MAX_VALUE); 8 System.out.println(); 9 10 // short 11 System.out.println("基本类型:short 二进制位数:" + Short.SIZE); 12 System.out.println("包装类:java.lang.Short"); 13 System.out.println("最小值:Short.MIN_VALUE=" + Short.MIN_VALUE); 14 System.out.println("最大值:Short.MAX_VALUE=" + Short.MAX_VALUE); 15 System.out.println(); 16 17 // int 18 System.out.println("基本类型:int 二进制位数:" + Integer.SIZE); 19 System.out.println("包装类:java.lang.Integer"); 20 System.out.println("最小值:Integer.MIN_VALUE=" + Integer.MIN_VALUE); 21 System.out.println("最大值:Integer.MAX_VALUE=" + Integer.MAX_VALUE); 22 System.out.println(); 23 24 // long 25 System.out.println("基本类型:long 二进制位数:" + Long.SIZE); 26 System.out.println("包装类:java.lang.Long"); 27 System.out.println("最小值:Long.MIN_VALUE=" + Long.MIN_VALUE); 28 System.out.println("最大值:Long.MAX_VALUE=" + Long.MAX_VALUE); 29 System.out.println(); 30 31 // float 32 System.out.println("基本类型:float 二进制位数:" + Float.SIZE); 33 System.out.println("包装类:java.lang.Float"); 34 System.out.println("最小值:Float.MIN_VALUE=" + Float.MIN_VALUE); 35 System.out.println("最大值:Float.MAX_VALUE=" + Float.MAX_VALUE); 36 System.out.println(); 37 38 // double 39 System.out.println("基本类型:double 二进制位数:" + Double.SIZE); 40 System.out.println("包装类:java.lang.Double"); 41 System.out.println("最小值:Double.MIN_VALUE=" + Double.MIN_VALUE); 42 System.out.println("最大值:Double.MAX_VALUE=" + Double.MAX_VALUE); 43 System.out.println(); 44 45 // char 46 System.out.println("基本类型:char 二进制位数:" + Character.SIZE); 47 System.out.println("包装类:java.lang.Character"); 48 // 以数值形式而不是字符形式将Character.MIN_VALUE输出到控制台 49 System.out.println("最小值:Character.MIN_VALUE=" 50 + (int) Character.MIN_VALUE); 51 // 以数值形式而不是字符形式将Character.MAX_VALUE输出到控制台 52 System.out.println("最大值:Character.MAX_VALUE=" 53 + (int) Character.MAX_VALUE); 54 } 55 }
编译以上代码输出结果如下所示:
Float和Double的最小值和最大值都是以科学计数法的形式输出的,结尾的“E+数字”表示E之前的数字要乘以10的多少次方。比如3.14E3就是3.14*103,3.14E-3就是3.14*10-3。
实际上,Java中还存在另外一种基本类型void,它也有对应的包装类java.lang.void,不过我们无法直接对它们进行操作。
类型默认值
引用类型
- 在Java中,引用类型的变量非常类似于C/C++的指针。引用类型指向一个对象,指向对象的变量是引用变量。这些变量在声明时被指定为一个特定的类型,比如Employee、Puppy等。变量一旦被声明后,类型就不能被改变了。
- 对象、数组都是引用数据类型。
- 所有引用类型的默认值都是null。
- 一个引用变量可以用来引用任何与之兼容的类型。
- 例子:Site site=new Site("Runoob")。
Java常量
常量在程序运行时是不能被修改的。
在Java中使用final关键字来修饰常量,声明方式和变量类似:
final double PI =3.1415927;
虽然常量名也可以用小写,但是为了便于识别,通常使用大写字母表示常量。
字面量可以赋给任何内置类型的变量。例如:
byte a=68; char a='A';
byte、short、int、long都可以用十进制、十六进制以及八进制表示。
前缀0表示八进制;
前缀0x表示十六进制。
1 int decimal=100; 2 int octal=0144; 3 int hexa=0x64;
字符串常量和字符常量都可以包含任何Unicode字符。例如:
1 char a='\u0001'; 2 String a="\u0001";
Java语言支持一些特殊的转义字符序列。
类型转换
整型、实型(常量)、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算。
转换从低级到高级:
数据类型转换必须满足如下规则:
- 1.不能对boolean类型进行类型转换。
- 2.不能把对象类型转换成不相关类的对象。
- 3.在把容量大的类型转换为容量小的类型时必须使用强制类型转换。
- 4.转换过程中可能导致溢出或者损失精度,例如:
int i=128; byte b=(byte)i;
因为byte类型是8位,(-128——+127),所以当int强制转换为byte类型时,值128就会导致溢出。
- 5.浮点数到整数的转换是通过舍弃小数得到的,而不是四舍五入,例如:
(int)23.7==23; (int)-45.89f==-45
自动类型转换
必须满足转换前的数据类型的位数要低于转换后的数据类型,例如:short数据类型的位数为16位,就可以自动转换位数为32的int类型,同样float数据类型的位数为32,可以自动转换为64位的double类型。
1 public class ZiDongLeiZhuan{ 2 public static void main(String[] args){ 3 char c1='a'; 4 int i1=c1; 5 System.out.println("char自动类型转换为int后的值为“+i1); 6 char c2='A'; 7 int i2=c2+1; 8 System.out.println("char类型和int计算后大的值等于”+i2); 9 } 10 }
强制类型转换
- 条件是转换的数据类型必须是兼容的。
- 格式:(type)value type是要强制类型转换后大的数据类型
1 public class QiangZhiZhuanHuan{ 2 public static void main(String[] args){ 3 int i1=123; 4 byte b=(byte)i1; 5 System.out.print("int强制类型转换为byte型后的值等于"+b); 6 } 7 }
隐含强制类型转换
- 整数的默认类型是int。
- 浮点型不存在这种情况,因为在定义float类型时必须在数字后面跟上F/f。