1.       源文件:
a)         符合Java语言命名规范是大前提
b)        一个源文件是文件文件
c)        一个源文件最多含有一个public类,可以包含不限数量的非public类。
d)        一个源文件的名必须和public类名相同,Public类不必一定有main()函数
e)         一个源文件中如果不含有public类,则可以随意命名
f)         一个源文件可以是空文件
g)        一个源文件内容可以仅仅是class classname{};
h)        一个源文件最多只能包含一个package声明语句,若没有,则在默认包中
i)          一个源文件有3种顶层元素,package,import,class,它们不必必须出现,但如果出现,则必须按上面顺序输出。
j)          Java语言的package是用来组织class的,包名是映射系统路径的,所以必须满足路径的要求,不能含有/,\,:,*,?等字符
k)        import用于引用其他包中的类,可以有多个,并用分号分隔开。
l)          如果引入了不同包中同名的类,则会产生编译错误,解决办法:使用类的全路径名
m)      Java.lang包自动引入
n)        要运行一个类,也不必必须有main()函数,可以用static代码快实现运行
o)        顶层类不能用private修饰
2.       关键字和标识符
Java语言共有51个关键字和保留字
abstract
boolean
break<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

case
catch
const
continue
Default
do
double
else
extends
false
final
finally
Float
for
goto
if
implements
instanceof
int
interface
long
native
new
null
protected
public
package
private
public
return
short
static
strictfp
super
switch
synchronized
This
throw
throws
transient
true
try
void
volatile
while
import
char
class
byte

 

 

 

 

goto constjava中未被使用,但程序员也不能使用
标识符不能用关键字和保留字,并且以字母,$_开头,随后的则可以是字母,$_和数字,构成标识符的只有这4种元素,不能有%,-,*,&,#等,最近的Java注解可以用@开头,但不能用于java变量,类名等标识符
封装类型的类名不是关键字
3.       基本数据类型
8中基本数据类型和其对应的8中封装类型
Boolean
1
int
32
byte
8
Float
32
Char
16
Long
64
short
16
double
64
      boolean型取值只能是truefalse,不能用10代替
4.       字符和字符串
Java2种字符值:基本类型字符和字符串,不能给字符赋值,只能出现在赋值表达式的左边
单字符用单引号括起来,如’a’,此类型表示由键盘输入的各类字符
\u做前缀,后跟16进制 的整数如’\u<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />1234’,可以表示键盘无法输入的字符。
整数型文字有3种表示:默认是10进制,以0作为前缀代表的是8进制,以0x0X做前缀的是16进制,16进制中的字母,大小写都可以
整型文字默认数据类型是32位,如果要声明为64位,需要加后缀lL
浮点型可以用小数表示,也可以用科学计数法,科学计数法中,E大小写都可以
浮点型默认为64位,如果要声明为32位的单精度文字,则需要加fF
虽然浮点型默认为double,也可以通过dD明确声明。
字符串是用双引号括起来的字符序列,
Java中字符串是对象类型,字符是数据类型
5.       数组
数组是一个有方法和属性的对象,而不单是一个存储器,具有相同类型元素的有序集合
使用数组的3个步骤:声明数组、创建数组、初始化数组
数组长度只能在构造时指定,不能在声明时指定
数组大小指定方式:一个是变量,一个是明确的数
指定数组长度的只能是字节型,短整型和整型,不能是长整型,更不能是浮点型
声明和构造数组可以在一条语句中完成
数组对象通过new语句实例化后,系统会各元素赋予默认值。
也可以不用new初始化,而是直接指定值int[] i = {1,2};
数组的length属性用来存储数组的长度,也是数组的个数。注意是属性,不是方法。
访问数组元素可以用下标,数组下标基于0.,=前[]可以没有顺序,但new后面的[]必须相连。
6.       main方法
main()方法只是Java Appliction的入口,main()方法的public不是必须的,但static是必须的,可以在不构造类实例的前提下,直接执行。
Mian方法返回值必须声明为void
Java应用程序执行语句分4部分组成:命令名Java,命令参数,java源文件中公共类名,用户参数――――其中命令参数为可选,用户参数可以为多个传入main()方法
main方法调用的必须是static
7.       变量
成员变量是方法体外的变量
局部变量是方法体内的变量,不能被系统自动初始化,否则有编译错误
8.       参数传递
Java中所有参数传递都是值传递方式,当传递一个参数到方法时,方法获得的是传递参数的副本。适用于基本型变量,也适合引用型变量。
如果传递的是引用型变量,即一个对象,则传递进方法中的变量内部存放的是改对象内存空间的引用,即内存地址。引用类型在进行参数传递时,是将引用拷贝给形式参数,因此在方法中决不能改变原引用变量的引用,即不能使该引用变量应用其他不同的对象,但可以改变引用变量的内容,即引用对象的属性。2个引用指向同一个对象,所以可以改变对象的属性。
9.       垃圾回收器
System.gcRuntime.getRuntime.gc()不会强制调用垃圾回收器立刻执行,只是一种建议,通知性的要求。
Finalize()方法在对象被垃圾回收器回收之前获得调用

 

10.   运算符
单目运算符>双目运算符>三目运算符> 赋值运算符(=)
7中单目操作符
~是按位取反运算符,
移位运算符
基本类型的封装类型比较也需要用equals
11.   修饰符
Java10中修饰符:public,protected,(default),private
                   Final,abstract
                   Static,navite,transient,synchronized,volatile
修饰符出现顺序可以任意排列,如果是修饰方法,则必须在返回类型前。
Default不是java合法修饰符
Finalabstract二者不能连用,staticabstract也不能连用
Native方法使用非java的其他语言实现,代码体位于本地机上
Private方法表明只能被自身成员访问。
Transientvolatile只能修饰变量,不能修饰类和方法
12.   Final关键字用于类,方法,变量前,类被final后,所有方法也被final,所以无法被继承。Final类型变量可在在声明时不初始化,拖延到构造函数中也可以。
13.   abstract只修饰类和方法,表明未实现的含义。抽象方法不能有方法体,是指不能有{},而不是有{},但方法体为空。
当类中存在一个以上抽象方法时,类必须为抽象类,否则发生编译错误。所以如果继承了一个抽象类,就必须实现其所有方法,否则也要声明为抽象类。
当实现一个接口时,但没有实现该接口所有方法,该类必须被声明为抽象类。
一个抽象类,表明是未完全实现的概念,所以不能实例化。
14.   static只能修饰方法,变量和一段代码块,表明所修饰的属于类本身,而不是附属于各个类实例
方法内的变量不能被修饰为static的,非static可以调用static的,但不允许static调用非static的,除非通过类实例和自己内部变量
static在运行期决定,static在编译期决定。
一个static不能被重载为一个非静态的,但可以被过载为一个非静态的
重载的含义是只有一种定义,只是原先的被后来的含义取代了,即形式不能变
过载是指一样东西有多种含义。
Static不是一个方法,是static后跟一个方法主体,主要用来初始化,即首次装在类时被执行。
15.   native只能用于修饰方法,不能用于修饰类和属性,方法前加上native为本地方法,主要是利用本地资源扩展java功能,而与java本身无关
本地方法如同一个抽象方法,并没有实际方法体
   本地方法依赖本地平台其他语言编写的位于javaVM之外的函数库,用System.loadLibrary()方法装入。
   本地方法的实现对调用者是透明的。Objectclonenotify方法就是本地方法
本地方法可以被private修饰
16.   transient只能用于修饰变量,本地变量也不能被transient修饰,
transient修饰的不能被序列化,一旦被transient被修饰,该变量不在是对象持久状态的一部分,该变量内容在序列化后无法获得。
Transient的左右是保证变量的安全性。即是是私有变量,已经序列化处理,就可以用过读取一个文件,或拦截网络传输得到。
17.   synchronized只能修饰方法,或方法的一部分,但不能修饰构造方法
synchronzied用于在两个线程试图访问同一数据时避免毁损。
18.   类型转换和造型
对于基本数据类型,对于二元运算符,如果一个操作数float,longdouble则另一个操作数被转换为float,longdouble,否则全部转换为int
强制类型转换不会发生编译错误,但有可能会发生数据截取,数据丢失现象。
19.   引用类型转换
Java中有3中引用类型:类,接口和数组
类可以被转换为类和接口,但不能转换为数组
接口可以转换为类和接口,但不能转换为数组
数组可以转换为类,接口和数组,如果转换为类,则转换的目标类必须是object,如果转换为接口,则目标接口必须是cloneableSerializable接口,如果转换为数组,则被转换数组元素类型必须可以被转换为目标数组的元素类型。