目录
一.标识符和关键字
1.标识符
2.关键字
二.修饰符
1.访问修饰符
2.非访问修饰符
二.数据类型
1.八种基本数据类型
2.引用数据类型
三.数组
1.数组的定义
2.访问数组
3.数组越界异常(ArrayIndexOutOfBoundsException)
四.Java内存空间堆(Heap)栈(Stack)
一.标识符和关键字
1.标识符
Java程序的组成,例如我们的类名、方法名、变量名等等
标识符可以由字母、数字、下划线、美元符组成,其他的特殊字符则不能存在,同时不能以数字开头,并且不能是关键字
2.关键字
是Java语言事先就定义好的,有时又叫保留字,关键字不能用作变量名、方法名、类名等等
下面是列举的一些关键字,并不是全部,大家以后会慢慢遇到:
boolean、byte、char、double、int、public、void、abstract、if.......
二.修饰符
1.访问修饰符
决定类、属性或者方法能否可以被程序里的其他部分进行访问或调用的修饰,用表格表示如下:
修饰符 | 当前类 | 同一包 | 不同包的子类 | 不同包的非子类 |
public | 可用 | 可用 | 可用 | 可用 |
protected | 可用 | 可用 | 可用 | 不可用 |
default | 可用 | 可用 | 不可用 | 不可用 |
private | 可用 | 不可用 | 不可用 | 不可用 |
这里我们可以看到,当变量age是用private修饰时,在Son继承Father类后,我们是无法调用age的,而我们将age的修饰符改为default后,Son类就可以成功调用变量age了。因为默认的权限修饰符是default,所以我们不需要将default明显的写上去
public和protected两个修饰符大家可以自己去尝试一下,这里就不再细讲
需要注意以下两点:
a.属性或成员变量,用private修饰,这个属于是我们日常开发中默认的约束,当然如果你一定要用别的修饰符修饰的话,我会替你祈祷你不会被同事骂
b.在一个x.java文件中,只可以有一个public class的声明,当然如果你还是执意要多写几个的话,你就慢慢改程序吧,类名称必须和文件名一致
2.非访问修饰符
用以修饰或辅助功能
例:static、final、abstract等
这里不细讲,后期会有专门专题再讲
二.数据类型
1.八种基本数据类型
• byte(8位)
-128<byte<127;默认为0
• short(16位)
-32768<short<32767;默认为0
• int(32位)
-2147483648<int<2147483647;默认为0;整数的默认类型为int类型
• long(64位)
-9223372036854774808<long<9223372036854774807;默认为0L
• float(单精度32位)
默认为0.0f
• double(双精度64位)
浮点数默认为double类型;默认为0.0
• boolean(1位)
只有true和false两个值;默认为false
• char(16位的unicode字符)
这里会涉及到一个数据类型的转换问题
• 在运算时,取值范围小的数据类型可以自动转为取值范围大的数据类型,但反过来是无法自动转换的
这里我们就可以发现小范围的byte是可以自动转为大范围的int类型,而int类型是不能转为byte类型的,那么作为新时代青年,我们当然是秉承着有问题就找到解决问题的方法,这里我们就引申出一个强制转换的方法了,如下:
这里我们就可以看到程序不会报错了,这就是强制转换,一般按照下方的写法来写
数据类型 变量名 = (数据类型)被转数据
• 这里需要注意以下两点
1.大范围强制转为小范围可能会造成数据精度的损失或数据的丢失,所需需要小心使用
2.浮点数转为整数时,是直接取消小数点后的数字,而不是我们一般理解的四舍五入
2.引用数据类型
• String(字符串对象)
通俗一点理解就是文字来的,不过要加双引号
三.数组
数组通俗理解就是一个可以存储多个相同数据类型的元素的容器,同时它会为每一个元素分配一个下标索引,从0开始,然后往后自增(这是一个比较重要的点),而一旦当我们设置好一个数组后,这个数组的长度就固定了,无法再进行改变。
1.数组的定义
数组定义的三种方法
// 方法一:数据类型 [] 数组名字 = new 数据类型[长度];
int [] arr1 = new int[5];
// 方法二:数据类型 [] 数组名字 = new 数据类型[]{元素1,元素2...}
int [] arr2 = new int[]{1,2,3,4,5};
// 方法三:数据类型 [] 数组名字 = {元素1,元素2...}
int [] arr3 ={1,2,3,4,5};
2.访问数组
当我们需要访问一个数组内的某个元素时,我们需要通过数组的索引去访问,如下:
这里我们就以数组arr2为例子
同样的,我们也可以通过索引去改变数组内某个元素的值,这里就不做展示,大家可以自己试一下
3.数组越界异常(ArrayIndexOutOfBoundsException)
当我们访问数组内一个不存在的索引时,程序就会报出数组越界的异常,如下代码:
这里我们对数组进行了一个简单的了解,更详细的内容可以前往教程4学习
四.Java内存空间堆(Heap)栈(Stack)
Java在内存中存在有堆、栈两个存储空间
• 基本的变量类型只有一块存储空间(栈)
传递时是直接对值的传递;对数据进行操作时,不会影响原先的值
• 引用数据类型则有凉快存储空间(堆、栈)
一个对象在内存中会请求一块空间来保存数据,而在访问对象时并不是直接访问该数据,而是通过引用来访问,引用存储在Stack栈中,数据储存在Heap堆中
可以通过下图来理解:
int a = 1;
boolean flag = false;
Student s = new Student();
Person p = new Person();
相信这样看大家就可以明白是怎么一回事了
大家可以看一下下面两张图的代码和输出后的结果思考一下为什么是这样
将这两张图里的代码关系弄清楚后,相信你就对堆栈的概念理解的比较透彻了