Java学习之三-Java基本数据类型及修饰符
概述
java作为一种面向对象的语言,支持一下概念:多态、继承、封装、抽象、类、对象、实例、方法、重载。
Java对象与类
对象:对象是类的一个实例,(声明,实例化,初始化)
类:类是一个模板,它描述一类对象的行为和状态。(局部变量、成员变量、类变量(静态变量static)、构造方法(如果没有显示定义,编译器会提供一个默认的构造防范))
源文件声明规则
当一个源文件中定义多个类,并且还有import语句和package语句时,要特别注意以下规则:
- 一个源文件只能有一个public类
- 可以有多个非public类
- 源文件名称应该和public类名保持一致
- 如果一个类定义在某个包中,那么package语句应该在源文件的首行
- 如果源文件含有import语句,那么应该放在package语句和类定义之间。如果没有package语句,那么import语句应该放在源文件的最前面。
- import语句和package语句对源文件中定义的所有类都有效。在同一个源文件中,不能给不同的类不同的包声明。
Java包
包主要用来对类和接口进行分类,当开发Java程序时,可能编写成百上千的类,因此很有必要对类和接口进行分类。
Import语句
Import语句用来提供一个合理的路径,使编译器可以找到某个类。
Java基本数据类型
8种内置数据类型:
byte (8位) 、short (16位)、int( 32位)、long (64位)、float (32位)、double( 64位)、boolean (1位)、char (16位 unicode)
引用类型:
对象、数组。所有引用类型的默认值都是null
Java常量
常量在程序运行时是不能被修改的,Java用final关键字来修饰常量。常量通常用大写字母表示。
如: final double PI=3.1415937;
Java 特殊的转义字符序列
符号 | 字符含义 |
---|---|
\n | 换行0x0a |
\r | 回车0x0d |
\f | 换页符0x0c |
\b | 退格0x08 |
\0 | 空字符0x20 |
\s | 字符串 |
\t | 制表符 |
\“ | 双引号 |
’ | 单引号 |
\ | 反斜杠 |
\ddd八进制字符ddd | |
\uxxxx | 16进制unicode字符 xxxx |
自动类型转换
byte,short,char->int->long->float->double
数据类型转换必须满足如下规则:
- 不能对boolean类型进行转换
- 不能把对象类型转换成不相关类的对象
- 在把容量大的类型转换为容量小的类型时必须使用强制类型转换
- 转换过程中可能导致溢出或损失精度
- 浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入
修饰符
- default(缺省,什么也不写):同一包内可见
- private:同一类内可见
- public:对所有类可见
- protected:对同一包内的类和所有子类可见
- static:静态变量与静态方法
- final 通常与static修饰符一起使用创建类常量,final方法可以被继承不能被修改,final类不能被继承
- abstract 抽象类,不能同时用abstract 与final修饰。抽象方法
- synchronized 声明的方法同一时间只能被一个线程访问。
- transient序列化的对象包含transient修饰的实例变量时,java虚拟机跳过该特定的变量。该修饰符包含在定义变量的语句中,用来预处理类和变量的数据类型。
(public transient int limit=55;//不会持久化) - volatile修饰的成员变量在每次被线程访问是,都强制从共享内存中重新读取该成员变量的值。而且,当成员变量发生变化时。会强制线程将变化值写回到共享内存。这样在任何时刻。两个不同的线程总是看到某个成员变量的同一个值。
一个volatile对象引用可能是null
public class MyRunnableTest implements Runnable
{
private volatile boolean active;
public void run()
{
active=true;
while(active)//第一行
{
//代码
}
}
public void stop()
{
active = false;//第二行
}
}
通常情况下 一个线程调用run()方法,另一个线程调用stop()方法。如果第一行中缓冲区的active值被使用,那么第二行的active值为false时,循环也不会停止。但是上面的示例中,我们使用了volatile修饰了active ,所以该循环会停止