1、编写:编写的Java代码保存在以“.java”结尾的源文件中。
2、编译:使用javac.exe命令编译java源文件,生成字节码文件。
格式:javac 源文件名.java
3、运行:使用java.exe命令解释运行字节码文件。格式:java 类名
4、在一个java源文件中可以声明多个class,但是只能最多有一个类声明为public,而且被声明为public的类的类名必须与源文件名相同。
5、java关键字中所有字母都为小写
6、Java中的名称命名规范:
包名:多单词组成时所有字母都小写:xxxyyyzzz 类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz
变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个 单词首字母大写:xxxYyyZzz
常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ
7、字符串是属于一个类,属于引用数据类型
8、在类体内,在方法体外声明的变量称为成员变量。
9、在方法体内部声明的变量称为局部变量。局部变量除形参外,需显式初始化才能使用。(形参也是局部变量)
10、java的整型常量默认为 int 型,声明long型常量须后加‘l’或‘L’。
11、Java 的浮点型常量默认为double型,声明float型常量,须后加‘f’或‘F’。
12、Java中的所有字符都使用Unicode编码,一个字符可以存储一个字母,一个汉字,所以java中char类型是两个字节。
13、boolean类型数据只允许取值true和false,无null。不可以使用0或非 0 的整数替代false和true。Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达所操作的 boolean值,在编译之后都使用java虚拟机中的int数据类型来代替:true用1表示,false 用0表示。
14、虽然long类型是8个字节,float是4个字节,但是float类型采用科学计数法存储,所以float类型的存储范围比long类型更大。
15、自动类型转换:容量小的类型自动转换为容量大的数据类型。byte,short,char之间不会相互转换,他们三者在计算时首先转换为int类型。
16、强制类型转换:将容量大的数据类型转换为容量小的数据类型,但可能造成精度降低或溢出。
17、字符串不能直接转换为基本类型,但通过基本类型对应的包装类则可以实现把字符串转换成基本类型。
18、计算机底层都以二进制补码的方式来存储数据。
19、正数(最高位是0)的原码、反码、补码都相同,负数(最高位是1)的补码是其反码+1。
20、赋值运算符:= += -= *= /= %=,运算的结果不会改变变量本身的数据类型。short i = i + 1;由于常量“1”默认是int型的,所以编译会报错,使用short i += 1,则做到了+1的作用,也没有改变数据类型。
21、&与&&、| 与 | | 的区别:&&、| | 具备短路功能,左边的条件成立或者不成立,右边的条件不用再判断,&、| 不管什么情况,都要把所有条件判断完。
22、位运算:位运算符操作的都是整型的数据。
(左移运算符)<< :在一定范围内,每向左移1位,相当于 * 2
(右移运算符)>> :在一定范围内,每向右移1位,相当于 / 2
23、流程控制:
顺序结构:程序从上到下执行。
分支结构:if - else、switch-case
循环结构:for、while、do-while
24、数组属于引用数据类型变量,但是数组的元素既可以是基本数据类型,也可以是引用数据类型。
25、数组的长度一旦确定就不能修改,初始化完成,长度就定了。
26、数组静态初始化:数组元素的初始化和数组元素的赋值同时进行。
例如:int a[ ] = new int [ ] { 1,2,3 };
27、数组动态初始化:数组元素的初始化和数组元素的赋值分开进行。
例如:int b[ ] = new int [5]; b[0] = 1 ;
28、数组元素的默认初始化值:
整型:0
浮点型:0.0
字符型:0或者’\u0000’,而非’0’
布尔类型:false
引用数据类型:null
29、关键字 break、continue 可以带标签使用(类似于C语言的goto语句)
break label;//结束指定标识的一层循环结构。
continue label;//结束指定标识的一层循环结构当次循环。
30、面向对象vs面向过程
面向过程:强调的是功能行为,以函数为最小单位,考虑怎么做。
面向对象:强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。
31、面向对象中两个重要的概念:
类:对一类事物的描述,是抽象的、概念上的定义
对象:是实际存在的该类事物的每个个体,因而也称为实例(instance)
32、虚拟机栈,即为平时提到的栈结构。局部变量存储在栈结构中;new出来的结构(比如:数组、对象)加载在堆空间中。
补充:对象的属性(非static的成员变量)也是加载在堆空间中。int arr [ ] = new arr [ ],以等号“=”为界,左边是局部变量存放在栈,右边是new 的机构,存放在堆中。
方法区:类的加载信息、常量池、静态域
33、“属性”与“变量”的区别:
① 在类中声明的位置的不同
属性:直接定义在类的一对{}内。
局部变量:声明在方法内、方法形参、代码块内、构造器形参、构造器内部的变量。
② 关于权限修饰符的不同
属性:可以在声明属性时,指明其权限,使用权限修饰符。常用的权限修饰符:private、public、缺省、protected —>体现为封装性。
局部变量:不可以使用权限修饰符。
③ 默认初始化值的情况
属性:类的属性,根据其类型,都默认初始化值。
整型(byte、short、int、long:0)、浮点型(float、double:0.0)、字符型(char:0 (或’\u0000’))、布尔型(boolean:false)、引用数据类型(类、数组、接口:null)
局部变量:没默认初始化值。意味着,我们在调用局部变量之前,一定要显式赋值。特别地:形参在调用时,我们赋值即可。
④在内存中加载的位置
属性:加载到堆空间中 (非static)。
局部变量:加载到栈空间。
34、 如果方法没返回值,“return;”表示结束此方法的意思。
35、封装性思想具体的代码体现:
36、权限修饰符的范围:
37、4种权限都可以用来修饰类的内部结构:属性、方法、构造器、内部类。修饰类的话,只能使用:缺省、public。
38、如果没显式的定义类的构造器的话,则系统默认提供一个空参的构造器。
39、一个类中定义的多个构造器,彼此构成重载。
40、一旦我们显式的定义了类的构造器之后,系统就不再提供默认的空参构造器。
41、一个类中,至少会有一个构造器。
42、this可以理解为:当前对象或当前正在创建的对象。
43、可以显式的使用"this(形参列表)"方式,调用本类中指定的其他构造器,但是构造器中不能通过"this(形参列表)"方式调用自己(死循环)。
44、规定:"this(形参列表)“必须声明在当前构造器的首行,可以推出构造器内部,最多只能声明一个"this(形参列表)”,用来调用其他的构造器。
45、如果使用的类或接口是java.lang包下定义的,则可以省略import结构。
使用"xxx.*"方式表明可以调用xxx包下的所有结构。但是如果使用的是xxx子包下的结构,则仍需要显式导入。
46、一个类可以被多个子类继承(一个爸爸可以有多个儿子),但是一个类只能有一个父类(一个儿子只能有一个亲生爸爸)
47、子类继承父类以后有哪些不同?
一旦子类A继承父类B以后,子类A中就获取了父类B中声明的所有的属性和方法。特别的,父类中声明为private的属性或方法,子类继承父类以后,仍然是获取了父类中私的结构,只因为封装性(private权限修饰符)的影响,使得子类不能直接调用父类的结构而已。
子类继承父类以后,还可以声明自己特有的属性或方法:实现功能的拓展。
48、子类直接继承的父类,称为:直接父类。间接继承的父类称为:间接父类。子类继承父类以后,就获取了直接父类以及所有间接父类中声明的属性和方法。
49、如果没有显式的声明一个类的父类的话,则此类继承于java.lang.Object类。
50、方法的重写(override 或 overwrite)。子类继承父类以后,可以对父类中同名同参数的方法,进行覆盖操作。