学习一个新东西,我建议先看它的结构,这样有了整体的认知之后,再去学习细节,就能更好的认识到每个细节点在整体中的位置和作用,就可以更好的理解整体和局部之间的关系。
比如我们现在学的是 Java 程序语言设计,那它的表现形式就是 Java 代码。写一个能跑的 Java 程序,那就需要写个 class,class 里要有个 main 方法,这样就构成了一个完整的 Java 程序。
其实我们上篇提到的 HelloWorld 程序就是一个完整的 Java 程序,它由访问修饰符、类型、类命名、main 方法、执行语句、花括号和注释这几个核心要素构成。
访问修饰符决定了被修饰对象的可访问范围,被修饰对象可以是类、变量和方法,访问范围的标识有 public、protected、缺省和 private。
类类型表明当前类的类型,有 class(普通类)、enum(枚举类)、interface(接口类)和 @interface(注解类)。
类名是当前类的标识,通过它来区别其它类。命名的时候一般大写字母开头,可以是字母数字下划线的组合,不过最规范的是大写字母开头的驼峰式命名
main 方法是 Java 程序必备的一个东西,它是 Java 程序的执行入口,声明也是固定的。
执行语句就是我们要编写的程序逻辑了,每条语句都要用分号。
花括号 {} 代表了当前内容的作用域,它总是成对出现。比如 HelloWorld 后边的 {} 里的内容,就只影响到当前这个 class,main(String[] args) 后边的 {} 里的内容,就只影响到当前这个 main 方法。
注释是对代码逻辑的解释,它不是写一个 Java 程序必备的,也不会被编译到字节码文件里。但是我认为一个代码的注释是一个代码的灵魂。因为代码虽说是给机器执行的,但却是给人看的,好的代码注释,是能够提升代码的可读性和可维护性的。
注释又分为单行注释和多行注释和文档注释。
编程躲不开的一个概念就是变量。
百度上对变量的定义是:在程序运行期间,随时可能产生一些临时数据,应用程序会将这些数据保存在一些内存单元中,每个内存单元都用一个标识符来标识。这些内存单元被称为变量,定义的标识符就是变量名。在实际中我们应该尽量使用有意义的变量名。Java 变量的一个原则:先定义后使用,定义必须指定数据类型。
Java数据类型分为基本数据类型与引用数据类型。
1 基本数据类型
byte:Java中最小的数据类型,在内存中占1个字节(8 bit),取值范围-128~127,默认值0
short:短整型,2个字节(16 bit),取值范围-32768~32717,默认值0
int:整型,用于存储整数,在内存中占4个字节,取值范围-2147483648~2147483647,默认值0
long:长整型,在内存中占8个字节-2^63~2^63-1,默认值oL,注意: Java 的long 的后缀 L 可以小写成 l , 但是建议用大写 L,以免与数字 1 混淆;
float:浮点型,在内存中占4个字节,用于存储带小数点的数字(与double的区别在于float类型有效小数点只有6~7位),默认值0
double:双精度浮点型,用于存储带有小数点的数字,在内存中占8个字节,默认值0
char:字符型,用于存储单个字符,内存中占2个字节,取值范围0~65535,默认值为空
boolean:布尔类型,占1个字节,用于判断真或假(仅有两个值,即true、false),默认值false,注意:没有1和0.
2 Java中的数据类型在内存的存储原理
Java的数据类型存储原理要根据其为局部变量还是成员变量来区分,局部变量与成员变量根据定义变量的位置区分:
局部变量:方法中的变量;
成员变量:类中方法外;
3 成员变量和局部变量的简单概念
成员变量:
- 实例变量(不以static修饰)
- 类变量(以static修饰)
局部变量:
- 形参(方法签名中的变量)
- 方法局部变量(在方法内定义)
- 代码块局部变量(在代码块中定义)
对于局部变量来说,不论是基本数据类型还是引用类型,他们都会先在栈中分配一块内存,对于基本类型来说,这块区域包含的是基本类型的内容;而对于引用类型来说,这块区域包含的是指向真正内容的指针,真正的内容被手动的分配在堆上。
对于成员变量来说,不论是基本数据类型还是引用类型,他们都会存储在堆内存或者方法区中;成员变量可细分为静态成员变量和普通成员变量,静态成员变量类属于类,类可以直接访问,存储在方法区中;普通成员变量属于类对象,必须声明对象之后,通过对象才能访问,存储在堆中。
4 基本类型转换
(1)自动类型转换(隐性类型转换)
Java所有的数值类型变量都可以互相转换,如果系统把某种基本类型的值直接赋给另一种基本类型的变量,则这种方式被称为自动类型转换又称为隐性类型转换。
(2) 强制类型转换
当把一个范围大的数值或变量赋给另一个范围小的变量时,需要进行强制转换。
大范围 double 转小范围 int
double 变量名 = (int) 变量名;
注意:强制类型转换大范围的数值会丢失精度 。