Java学习
Java基础(2)—-基本语法一
目录
正文
关键字
知识点总结:
- 定义:关键字是电脑语言里事先定义的,有特别意义的标识符,有时又叫保留字,还有特别意义的变量。
- Java的关键字对Java的编译器有特殊的意义,他们用来表示一种数据类型,或者表示程序的结构等。
- 关键字不能用作变量名、方法名、类名、包名和参数。
- java中包含50个关键,关键字中所有字母都为小写。
- 分类:
用于定义数据类型的关键字:
class interface enum byte short int long float double char boolean void
用于定义数据类型值的关键字:
true false null
用于定义流程控制的关键字:
if else switch case default while do for break continue return
用于定义访问权限修饰符的关键字
private protected public
用于定义类,函数,变量修饰符的关键字
abstract final static synchronized
用于定义类与类之间关系的关键字
extends implements
用于定义建立实例及引用实例,判断实例的关键字
new this super instanceof
用于异常处理的关键字
try catch finally throw throws
用于包的关键字
package import
其他修饰符关键字
native strictfp transient volatile assert - Java保留字:现有Java版本尚未使用,但以后版本可能会作为关键字使用。自己命名标记符时要避免使用这些保留字 byValue、cast、future、 generic、 inner、 operator、 outer、 rest、 var 、 goto 、const
- 重点关键字详解:
abstract
(1)abstract关键字可以修饰类或方法。
(2)采用abstract方法的类本来就是抽象类,并且必须声明为abstract。
(3)abstract类不能实例化。
(4)仅当abstract类的子类实现其超类的所有abstract方法时,才能实例化abstract类的子类。这种类称为具体类,以区别于abstract类。
(5)abstract关键字不能应用于static、private或final方法,因为这些方法不能被重写,因此,不能在子类中实现。
(6)final类的方法都不能是abstract,因为final类不能有子类。
extends
extends关键字用在类或接口的继承。
implements
implements关键字在class声明中使用,以指示所声明的类提供了在implements关键字后面的名称所指定的接口中所声明的所有方法的实现。
import
(1)目的:
为使用定义在不同包中的Java类,需用import语句来引入指定包层次下所需要的类或全部类(.*)。import语句告诉编译器到哪里去寻找类。
(2)格式:
import 包名[.子包名].类名[.*];
(3)注意:
若引入的包为:java.lang,则编译器默认可获取此包下的类,不需要再显示声明。
import语句出现在package语句之后、类定义之前
一个源文件中可包含多个import语句
可以使用import zb.* ;语句,表明导入zb包下的所有类。而zb包下sub子包内的类则不会被导入。import lee.sub.*;
import语句不是必需的,可坚持在类里使用其它类的全名
JDK 1.5加入import static语句
(4)JDK中主要的包介绍:
java.lang—-包含一些Java语言的核心类,如String、Math、Integer、System和Thread,提供常用功能。
java.net—-包含执行与网络相关的操作的类和接口。
java.io —-包含能提供多种输入/输出功能的类。
java.util—-包含一些实用工具类,如定义系统特性、接口的集合框架类、使用与日期日历相关的函数。
java.text—-包含了一些java格式化相关的类
java.sql—-包含了java进行JDBC数据库编程的相关类/接口
java.awt—-包含了构成抽象窗口工具集(abstract window toolkits)多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)。
java.applet—-包含applet运行所需的一些类。
package
(1)package关键字指定在Java源文件中声明的类所驻留的Java包。
(2)package语句(如果出现)必须是Java源文件中的第一个非-注释-性文本。
(3)如果Java源文件不包含package语句,在该文件中定义的类将位于“默认包”中。
(4)不能从非默认包中的类引用默认包中的类。
static
(1)static关键字可修饰内部类、方法或成员变量,普通类是不允许声明为静态的。
(2)“static” 关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问。
(3)Java 中 static 方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而 static 方法是编译时静态绑定的。static 方法跟类的任何实例都不相关,所以概念上不适用。
(4)是否可以在 static 环境中访问非 static 变量?
static 变量在 Java 中是属于类的,它在所有的实例中的值是一样的。当类被Java虚拟机载入的时候,会对 static 变量进行初始化。如果你的代码尝试不用实例来访问非 static 的变量,编译器会报错,因为这些变量还没有被创建出来,还没有跟任何实例关联上。
this
(1)它在方法内部使用,即这个方法所属对象的引用;
(2)它在构造器内部使用,表示该构造器正在初始化的对象。
(3)this表示当前对象,可以调用类的属性、方法和构造器。
(4)什么时候使用this?
当在方法内需要用到调用该方法的对象时,就用this。
当形参与成员变量重名时,如果在方法内部需要使用成员变量,必须添加this来表明该变量是类成员。
在任意方法内,如果使用当前类的成员变量或成员方法可以在其前面添加this,增强程序的阅读性。
使用this调用本类的构造器,this();
(5)使用this()必须放在构造器的首行;
(6)使用this调用本类中其他的构造器,保证至少有一个构造器是不用this的。
supper
(1)含义:
在Java类中使用super来调用父类中的指定操作:
super可用于访问父类中定义的属性
super可用于调用父类中定义的成员方法
super可用于在子类构造方法中调用父类的构造器,super(参数);
(2)注意:
尤其当子父类出现同名成员时,可以用super进行区分
super的追溯不仅限于直接父类
super和this的用法相像,this代表本类对象的引用,super代表父类的内存空间的标识
(3)调用父类构造器:
子类中所有的构造器默认都会访问父类中空参数的构造器
当父类中没有空参数的构造器时,子类的构造器必须通过this(参数列表)或者super(参数列表)
语句指定调用本类或者父类中相应的构造器.
必须放在构造器的第一行.
如果子类构造器中既未显式调用父类或本类的构造器,且父类中又没有无参的构造器,则编译
出错。
super(…)和this(…)调用语句不能同时在一个构造器中出现.
instanceof
instanceof关键字用来确定对象所属的类。
native
native关键字可以应用于方法,以指示该方法是用Java以外的语言实现的。
return
(1)return:并非专门用于结束循环的,它的功能是结束一个方法。当一个方法执行到一个return语句时,这个方法将被结束。
(2)与break和continue不同的是,return直接结束整个方法,不管这
个return处于多少层循环之内。
synchronized
(1)synchronized关键字可以应用于方法或语句块,并为一次只应由一个线程执行的关键代码段提供保护。
(2)synchronized关键字可防止代码的关键代码段一次被多个线程执行。
(3)如果应用于静态方法那么,当该方法一次由一个线程执行时,整个类将被锁定。
(4)如果应用于实例方法那么,当该方法一次由一个线程访问时,该实例将被锁定。
(5)如果应用于对象或数组,当关联的代码块一次由一个线程执行时,对象或数组将被锁定。
transient
transient关键字可以应用于类的成员变量,以便指出该成员变量不应在包含它的类实例已序列化时被序列化。
volatile
(1)volatile关键字用于表示可以被多个线程异步修改的成员变量。
(2)volatile关键字是否能保证线程安全?
不能
volatile 关键字用在多线程同步中,可保证读取的可见性,JVM只是保证从主内存加载到线程工作内存的值是最新的读取值,而非 cache 中。但多个线程对 volatile 的写操作,无法保证线程安全。例如假如线程 1,线程 2 在进行 read,load 操作中,发现主内存中 count 的值都是 5,那么都会加载这个最新的值,在线程 1 堆 count 进行修改之后,会 write 到主内存中,主内存中的 count 变量就会变为 6;线程 2 由于已经进行 read,load 操作,在进行运算之后,也会更新主内存 count 的变量值为 6;导致两个线程及时用 volatile 关键字修改之后,还是会存在并发的情况。
标识符
知识点总结:
- 标识符:
(1)Java 对各种变量、方法和类等要素命名时使用的字符序列称为标识符
(2)凡是自己可以起名字的地方都叫标识符。 - 定义合法标识符规则:
(1)由26个英文字母大小写,0-9 ,_或 $ 组成
(2)数字不可以开头。
(3)不可以使用关键字和保留字,但能包含关键字和保留字。
(4)Java中严格区分大小写,长度无限制。
(5)标识符不能包含空格。
3.注意:在起名字时,为了提高阅读性,要尽量有意义,“见名知意”。
- Java中的名称命名规范:
(1)包名:多单词组成时所有字母都小写:abc
(2)类名、接口名:多单词组成时,所有单词的首字母大写:AaBbCc
(3)变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:aaBbCc
(4)常量名:所有字母都大写。多单词时每个单词用下划线连接:AA_BB_CC
- Java中的名称命名规范:
变量
基本知识点:
- 变量的概念:
(1)内存中的一个存储区域;
(2)该区域有自己的名称(变量名)和类型(数据类型)
(3)该区域的数据可以在同一类型范围内不断变化 - Java中每个变量必须先声明,后使用;
- 定义变量的格式:数据类型 变量名 = 初始化值;
- 变量是通过使用变量名来访问这块区域的;
变量的分类
1) 按数据类型:注:对于每一种数据都定义了明确的具体数据类型,在内存中分配了不同大小的内存空间。
2) 按按声明的位置:
注:1.在方法体外,类体内声明的变量称为成员变量。
在方法体内部声明的变量称为局部变量。
2.二者在初始化值方面的异同:
同:都有生命周期 异:局部变量除形参外,需显式初始化。
基本数据类型
Java各整数类型有固定的表数范围和字段长度,不受具体OS的影响,以保证java程序的可移植性。
- 整数类型:byte、short、int、long
(1)Java各整数类型有固定的表数范围和字段长度,不受具体OS的影响,以保证java程序的可移植性。
(2)java的整型常量默认为 int 型,声明long型常量须后加‘l’或‘L’
类 型 | 占用存储空间 | 表数范围 |
---|---|---|
byte | 1字节=8bit | -128 ~ 127 |
short | 2字节 | -215 ~215-1 |
int | 4字节 | -231 ~ 231-1 |
long | 8字节 | -263 ~ 263-1 |
1. 浮点类型:float、double
(1)Java各整数类型有固定的表数范围和字段长度,不受具体OS的影响,以保证java程序的可移植性。
(2)java的整型常量默认为 int 型,声明long型常量须后加‘l’或‘L’
类 型 | 占用存储空间 | 表数范围 |
---|---|---|
单精度float | 4字节 | -3.403E38 ~ 3.403E38 |
双精度double | 8字节 | -1.798E308 ~ 1.798E308 |
1. 字符类型:char
(1)char 型数据用来表示通常意义上“字符”(2字节)
(2)字符型常量的三种表现形式:
字符常量是用单引号(‘ ’)括起来的单个字符,涵盖世界上所有书面语的字符。例如:char c1 = ‘a’; char c2 = ‘你’; char c3 = ‘0’;
Java中还允许使用转义字符‘\’来将其后的字符转变为特殊字符型常量。
(3)char类型是可以进行运算的。因为它都对应有Unicode码
1. 布尔类型:boolean
(1)boolean 类型适于逻辑运算,一般用于程序流程控制。
(2)boolean类型数据只允许取值true和false,无null。
(3)不可以0或非 0 的整数替代false和true,这点和C语言不同。
基本数据类型转换
- 自动类型转换:
(1)容量小的类型自动转换为容量大的数据类型。
(2)数据类型按容量大小排序为:char、byte、short、int、long、float、double;
(3)有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算。
(4)byte,short,char之间不会相互转换,他们三者在计算时首先转换为int类型。
(5)当把任何基本类型的值和字符串值进行连接运算时(+),基本类型的值将自动转化为字符串类型。 - 强制类型转换:
(1)自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转换符(()),但可能造成精度降低或溢出,格外要注意。
(2 )通常,字符串不能直接转换为基本类型,但通过基本类型对应的包装类则可以实现把字符串转换成基本类型。
如: String a = “43”; int i = Integer.parseInt(a);
boolean类型不可以转换为其它的数据类型。 String 和包装类的转换:
http://blog.youkuaiyun.com/yajing8/article/details/54579891
一起奔跑吧!
每天积累一点点,每天进步一点点!