菜鸟教程:https://www.runoob.com/java/java-tutorial.html
1.创建文件HelloWorld.java(文件名需与类名一致)
2.注:String args[] 与String[] args 都可以执行,但推荐使用String[] args,
这样可以避免歧义和误读。
3.
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
4.Java是Java面向对象程序设计语言和Java平台的总称
5.
JavaSE(J2SE),java平台标准版
JavaEE(J2EE),java平台企业版
JavaME(J2ME),java平台微型版
6.Java语言是简单的:
Java丢弃了C++中很少使用,很难理解,令人迷惑的那些特性,如操作符重载,
多继承,自动的强制类型转换。特别地,Java语言不适用指针,而是引用。并提供
了自动分配和回收内存空间,使得程序员不必为内存管理而担忧
Java语言是面向对象的:
Java语言提供类,接口和继承等面向对象的特性,为了简单起见,只支持类之间
的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为
implements)。Java语言全面支持动态绑定,而C++语言只对虚函数使用动态绑定。
总之,Java语言是一个纯的面向对象程序设计语言
Java语言是分布式的:
Java语言支持internet应用的开发
Java语言是健壮的:
Java的强类型机制,异常处理,垃圾的自动收集等是Java程序健壮性的重要保证
。对指针的丢弃是Java的明智选择。Java的安全检查机制使得Java更具健壮性
Java语言是安全的:
Java通常被用在网络环境中,为此,Java提供了一个安全机制以防恶意代码的攻
击。处理Java语言具有的许多安全特性以外,Java对通过网络下载的类具有一个安
全防范机制(类ClassLoader).如分配不同的名字空间以防替代本地的同名类,字
节代码检查,并提供安全管理机制(类SecurityManager)让Java应用设置安全哨兵
Java语言是体系结构中立的:
Java程序(后缀为java的文件)在Java平台上被编译为体系结构中立的字节码格
式(后缀为class的文件),然后可以在实现这个Java平台的任何系统中运行。这
种途径适合于异构的网络环境和软件的分发
Java语言是可移植的:
这种可移植性来源于体系结构中立性,另外,Java还严格规定了各个基本数据类
型的长度。Java系统本身也具有很强的可移植性,Java编译器是用Java实现的,
Java的运行环境是用ANSI C实现的
Java语言是解释型的:
如前所述,Java程序在Java平台上被编译为字节码格式,然后可以在实现这个
Java平台的任何系统中运行。在运行时,Java平台中的Java解释器对这些字节码进
行解释执行,执行过程中需要的类在联接阶段被载入到运行环境中
Java是高性能的
与那些解释型的高级脚本语言相比,Java的确是高性能的。事实上,Java的运行
速度随着JIT编译器技术的发展越来越接近于C++
Java语言是多线程的:
在Java语言中,线程是一种特殊的对象,它必须由Thread类或其子(孙)类来创
建。通常有两种方法来创建线程:其一,使用型构为Thread(Runnable)的构造子类
将一个实现了Runnable接口的对象包装成一个线程,其二,从Thread类派生出子类
并重写run方法,使用该子类创建的对象即为线程。值得注意的是Thread类已经实
现了Runnable接口,因此,任何一个线程均有它的run方法,而run方法中包含了线
程所要运行的代码。线程的活动由一组方法来控制。Java语言支持多个线程的同时
执行,并提供多线程之前的同步机制(关键字为synchronized)
Java语言是动态的:
Java语言的设计目标之一是适应于动态变化的环境。Java程序需要的类能够动态
地被载入到运行环境,也可以通过网络来载入所需要的类。这于有利于软件的升级
。另外,Java中的类有一个运行时刻的表示,能进行运行时刻的类型检查。
7.类是对象的抽象,对象是类的一个实例
8.
对象:对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状
态有:颜色,名字,品种;行为有:摇尾巴,叫,吃等。
类:类是一个模板,它描述一类对象的行为和状态
方法:方法就是行为,一个类可以有很多方法。逻辑运算、数据修改以及所有动
作都是在方法中完成的。
实例变量:每个变量都有独特的实例变量,对象的状态由这些实例变量的值决定
9.
puclic static void main (String[] args)
访问修饰符 关键字 返回类型 方法名 String类 字符串数组
10.基本语法:
1.大小写敏感
2.类名的首字母应该大写
3.方法名应以小写字母开头
4.源文件名和类名相同
5.主方法入口:所有的java程序由public static void main(String[] args)方
法开始执行
11.Java修饰符:
访问控制修饰符:default,public,protected,private
非访问控制修饰符:final,abstract,static,synchronized
12.Java变量:局部变量,类变量(静态变量),成员变量(非静态变量)
13.Java数组:数组是储存在堆上的对象,可以保存多个同类型变量。
14.Java枚举:枚举限制变量只能是预先设定好的值。使用枚举可以减少代码中的
bug
15.空白行或者有注释的行,Java编译器都会忽略掉
16.继承:在Java中,一个类可以由其他类派生。
利用继承的方法,可以重用已存在类的方法和属性,而不用重写这些代码。被
继承的类称为超类(super class),派生类称为子类(subclass)
17.接口:在Java中,接口可理解为对象间相互通信的协议。接口只定义派生要用
到的方法,但是方法的具体实现完全取决于派生类。
18.Java源程序(.java)经过编译编程字节码程序(.class),然后解释执行,到解释
器→操作系统→裸机
19.Java中的对象:软件对象的状态就是属性,行为通过方法体现。在软件开发中
,方法操作对象内部状态的改变,对象的相互调用也是通过方法来完成。
20.一个类可以包含以下类型变量:
局部变量:在方法,构造方法或者语句块中定义的变量被称为局部变量。变量
声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象
的时候实例化。成员变量可以被类中方法,构造方法和特定类的语句块访问。
类变量:类变量也声明在类中,方法体之外,但必须声明为static类型
21.构造方法:每个类都有构造方法。如果没有显式地为类定义构造方法,Java编
译器将会为该类提供一个默认构造方法。
在创建一个对象的时候,至少要调用一个构造方法。构造方法的名称必须与类
同名,一个类可以有多个构造方法。
22.创建对象需要以下三步:
一,声明:声明一个对象,包括对象名称和对象类型
二,实例化:使用关键字new来创建一个对象
三,初始化:使用new创建对象时,会调用构造方法初始化对象。
23.源文件声明规则:
·一个源文件中只能有一个public类
·一个源文件可以有多个非public类
源文件的名称应该和public类的类名保持一致。
如果一个类定义在某个包中,那么package语句应该在源文件的首行
import语句和package语句对源文件中定义的所有类都有效。在同一源文件中
,不能给不同的类不同的包声明
24.Java包:包主要用来对类和接口进行分类。
25.import语句:在Java中,如果给出一个完整的限定名,包括包名,类名,那么
Java编译器就可以很容易地定位到源文件或者类。import语句就是用来提供一个合
理的路径,使得编译器可以找到某个类。
26.Java基本数据类型:
变量就是申请内存来存储值。也就是说,当创建变量的时候,需要在内存中申
请空间
内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存
该类型数据
因此,通过定义不同类型的变量,可以在内存中存储整数,小树或者字符。
Java的两大数据类型:内置数据类型,引用数据类型
27.内置数据类型:Java语言提供了八种基本类型。六种数字类型(四个整数型,
两个浮点型),一种字符类型,还有一种布尔型:
byte,short,int,long,float,double,boolean,char
28.科学计数法,E+数字:表示E之前的数字要乘以10的多少次方。比如3.14E3就是
3.14*(10的三次方)
实际上,JAVA中还存在另外一种基本类型void,它也有对应的包装类
java.lang.Void,不过我们无法直接对它们进行操作
29.String( or any object)默认值为null,boolean默认值为false
30.引用类型:
·在Java中,引用类型的变量非常类似于C/C++的指针。引用类型指向一个对象
·指向对象的变量是引用变量。这些变量在声明时被指定为一个特定的类型,比
如Employee,Puppy等。变量一旦声明后,类型就不能被改变了
·对象,数组都是引用数据类型
·所有引用类型的默认值都是null
·一个引用变量可以用来引用任何与之兼容的类型
31.Java常量:常量在程序运行时是不能被修改的
虽然常量名可以用小写,但为了便于识别,通常使用大写字母表示常量
32.自动类型转换:
整型,实型(常量—),字符串数据可以混合运算。运算中,不同类型的数据
先转化为同一类型,然后进行运算
转换从低级到高级:byte,short,chat→int→long→float→double
33.数据类型转换必须满足以下规则:
一,不能对boolean类型进行类型转换
二,不能把对象类型转换成不相关类的对象
三,在把容量大的类型转换为容量小的类型时必须使用强制类型转换
四,转换过程中可能导致溢出或损失精度
五,浮点数到整数的转换是通过舍弃小数得到的,而不是四舍五入
34.自动类型转换:必须满足转换前的数据类型的位数要低于转换后的数据类型,
例如:short数据类型的位数为16位,就可以自动转换位数为32的int类型,同样
float数据类型的位数为32,可以自动转换为64位的double类型
35.强制类型转换:条件是转换的数据类型必须是兼容的
36.隐含强制类型转换:①,整数的默认类型是int ②,小数默认是double类型浮
点型,在定义float类型时必须在数字后面跟上F或者f
37.Java局部变量:
访问修饰符不能用于局部变量
局部变量是在栈上分配的
局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用
38.实例变量:
实例变量对于类中的方法,构造方法或者语句块是可见的。一般情况下应该把
实例变量设为私有。通过使用访问修饰符可以使实例变量对子类可见
实例变量可以直接通过变量名访问。但在静态方法以及其他类中,就应该使用
完全限定名:OblectReference.VariableName
39.类变量(静态变量):
类变量也称为静态变量,在类中以static关键字声明,但必须在方法之外
无论一个类创建了多少个对象,类只拥有类变量的一份拷贝
静态变量除了被声明为常量外很少使用,静态变量是指声明为
public/private,final和static类型的变量。静态变量初始化后不可改变。
静态变量储存在静态存储区。经常被声明为常量,很少单独使用static声明变
量
静态变量在第一次被访问时创建,在程序结束时销毁
静态变量可以通过:ClassName.VariableName的方式访问
类变量被声明为public static final类型时,类变量名称一般建议使用大写字
母。如果静态变量不是public和final类型,其命名方式与实例变量以及局部变量
的命名方式一致。
40.访问控制修饰符:Java中,可以使用访问控制符来保护对类,变量,方法和构
造方法的访问。Java支持4种不同的访问权限。
·default(即默认,什么都不写):在同一包内可见,不使用任何修饰符。使
用对象:类,接口,变量,方法
·private:在同一类内可见。使用对象:变量,方法。注意:不能修饰类(外
部类)
·protected:对同一包内的类和所有子类可见。使用对象:变量,方法。注意
:不能修饰类(外部类)
41.接口的方法默认情况下访问权限为public
42.私有访问修饰符是最严格的的访问级别,所以被声明为private的方法,变量和
构造方法只能被所属类访问,并且类和接口不能声明为private。声明为私有访问
类型的变量只能通过类中公共的getter方法被外部类访问
private访问修饰符的使用主要用来隐藏类的实现细节和保护类的数据
43.Java程序的main()方法必须设置成公有的,否则,Java解释器将不能运行该类
44.受保护的访问修饰符protected:
·子类与基类在同一包中:被声明为protected的变量,方法和构造器能被同一
个包中的任何其他类访问
·子类与基类不在同一包中:那么在子类中,子类实例可以访问其从基类继承
而来的protected方法,而不能访问基类实例的protected方法
protected可以修饰数据成员,构造方法,方法成员,不能修饰类(内部类除外
)
45.继承的规则:
父类中声明为public的方法在子类中也必须为public
父类中声明为protected的方法在子类中要么声明为protected,要么声明为
public,不能声明为private
父类中声明为private的方法,不能够被继承
46.静态方法:
static关键字用来声明独立于对象的静态方法。静态方法不能使用类的非静态
变量。静态方法从参数列表得到数据,然后计算这些数据。
47.final修饰符
final变量:
final表示“最后的,最终的”含义,变量一旦赋值后,不能被重新赋值。被
final修饰的实例变量必须显式指定初始值
final修饰符通常和static修饰符一起使用来创建类常量
final方法:
父类中的final方法可以被子类继承,但是不能被子类重写
声明final方法的主要目的是防止该方法的内容被修改
final类:
final类不能被继承,没有类能够继承final类的任何特性。
48.abstract修饰符:
抽象类:
抽象类不能用来实例化对象,声明抽象类的唯一目的是为了将来对该类进行扩充
一个类不能同时被abstract和final修饰。如果一个类包含抽象方法,那么该类
一定要声明为抽象类,否则将出现编译错误
抽象类可以包含抽象方法和非抽象方法
49.抽象方法:
抽象方法是一种没有任何实现的方法,该方法的具体实现由子类提供
抽象方法不能被声明成final和static
任何继承抽象类的子类必须实现父类的所有抽象方法,除非该子类也是抽象类
如果一个类包含若干个抽象方法,那么该类必须声明为抽象类。抽象类可以不包
含抽象方法。
抽象方法的声明以分号结尾,例如:public abstract sample();
50.synchronized修饰符
synchronized关键字声明的方法同一时间只能被一个线程访问。synchronized修
饰符可以应用于四个访问修饰符
51.transient修饰符:
序列化的对象包含被transient修饰的实例变量时,java虚拟机(JVM)跳过gia
特定的变量
该修饰符包含在定义变量的语句中,用来预处理类和变量的数据类型
52.volatile修饰符:
volatile修饰的成员变量在每次被线程访问时,都强制从共享内存中重新读取该
成员变量的值。而且,当成员变量发生变化时,会强制线程将变化值写到共享内存
。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。
一个volatile对象引用可能是null
53.Java运算符:算数运算符,关系运算符,位运算符,逻辑运算符,赋值运算符
,其他运算符
54.短路逻辑运算符,与运算符
55.条件运算符也被称为三元运算符
56.instanceof运算符:该运算符用于操作对象示例,检查该对象是否是一个特定
类型(类类型或接口类型)
57.Java增强for循环
for(声明语句:表达式) { //代码句子 {
58.break关键字:
break主要用在循环语句或者switch语句中,用来跳出整个语句块
break跳出最里层的循环,并且继续执行该循环下面的语句
59.continue关键字
continue适用于任何循环控制结构中,作用是让程序立刻跳转到下一次循环的
迭代。
在for循环中,continue语句使程序立即跳转到更新语句
在while或者do..while循环中,程序立即跳转到布尔表达式的判断语句
60.switch case语句:
当变量的值与case语句的值相等时,那么case语句之后的语句开始执行,直到
break语句出现才会跳出switch语句
当遇到break语句时,switch语句终止。程序跳转到switch语句后面的语句执行
。case语句不必须要包含break语句。如果没有break语句出现,程序会继续执行下
一条case语句,直到出现break语句
switch语句可以包含一个default分支,该分支一般是switch语句的最后一个分
支(可以在任何位置,但建议在最后一个)。default在没有case语句的值和变量
值相等的时候执行,default分支不需要break语句。
61.这种由编译器特别支持的包装称为装箱,所以当内助数据类型被当做对象使用
的时候,编译器会把内置类型装箱为包装类。相似的,编译器也可以把一个对象拆
箱为内置类型。Number类属于java.lang包
62.Java的Math包含了用于执行基本数学运算的属性和方法,如初等指数,对数,
平方根和三角函数。
Math的方法都被定义为static形式,通过Math类可以在主函数中直接调用
63.Number & Math 类方法:
abs():返回参数的绝对值
ceil():返回大于等于(>=)给定参数的最小整数,类型为双精度浮点型
floor():返回小于等于(<=)给定参数的最大整数
rint():返回与参数最接近的整数。返回类型为double
round():它表示四舍五入,算法为Math.floor(x + 0.5),即将原来的数字加上
0.5后再向下取整,所以,Math.round(11.5)的结果为12,Math.round(-11.5)的结
果为-11
64.Java Character类:
Character类用于对单个字符进行操作
Character类在对象中包装一个基本类型char的值
65.在实际开发过程中,我们经常会遇到需要使用对象,而不是内置数据类型的情
况。为了解决这个问题,java语言为内置数据类型char提供了包装类Character类
66.在某些情况下,Java编译器会自动创建一个Character对象
例如,讲一个char类型的参数传递给需要一个Character类型参数的方法时,那
么编译器会自动地将char类型参数转换为Character对象。这种特征称为装箱,反
过来称为拆箱。
67.转义序列:
\t插入一个tab键 \b后退键 \n换行 \r回车 \f换页 \' \" \\
68.Java String类:
字符串广泛应用在Java编程中,在Java中字符串属于对象,Java提供了String
类来创建和操作字符串
String str = "Runoob";
String str2 = new String("Runoob");构造函数创建字符串
!String创建的字符串存储在公共池中,而new创建的字符串对象在堆上
69.String类有11中构造方法,这些方法提供不同的参数来初始化字符串,比如提
供一个字符数组参数
!String类是不可改变的,所以你一旦创建了String对象,那它的值就无法改
变了
70.字符串长度:
用于获取有关对象的信息的方法称为访问器方法
String类的一个访问器方法是length()方法,它返回字符串对象包含的字符数
71.创建格式化字符串:可以使用printf()和format()方法
String类使用静态方法format()返回一个String对象而不是PrintStream对象
String类的静态方法format()能用来创建可复用的格式化字符串,而不仅仅是
用于一次打印输出
System.out.printf();
String fs;
fs = String.format();
72.当对字符串进行修改的时候,需要使用StringBuffer和StringBuilder类
和String类不同的是,StringBuffer和StringBuilder类的对象能够被多次的修
改,并且不产生新的未使用对象
在使用StringBuffer类时,每次都会对StringBuffer对象本身进行操作,而不
是生成新的对象,所以如果需要对字符串进行修改推荐使用StringBuffer
StringBuilder类和StringBuffer之间的最大不同在于StringBuilder的方法不
是线程安全的(不能同步访问)
由于StringBuilder相较于StringBuffer有速度优势,所以多数情况下建议使用
StringBuilder类。
73.Java数组:
Java语言中提供的数组是用来存储固定大小的同类型元素
74.double[] myList 首选的方法
double myList[] c/c++
75.数组变量的声明,和创建数组可以用一条语句完成
dataType[] arrayRefVar = new dataType[arraySize];
76.For-Each循环
JDK1.5引进了一种新的循环类型,被称为For-Each循环或者加强型循环,它能
在不适用下标的情况下遍历数组
语法格式如下:
for(type element: array)
{
System.out.println(element);}
77.最高维分配引用空间,也就是为最高维限制其能保存数据的最长的长度,然后
再为其每个数组元素单独分配空间
78.Arrays类:
java.util.Arrays类能方便地操作数组,它提供的所有方法都是静态的
具有以下功能:
给数组赋值:通过fill方法
对数组排序:通过sort方法,按升序
比较数组:通过equals方法比较数组中元素值是否相等
查找数组元素:通过binarySearch方法能对排序好的数组进行二分查找法操作
79.Java日期时间:
java.util包提供了Date类来封装当前的日期和事件。Date类提供两个构造函数来实例化Date对象
80.SimpleDateFormat类有一些附加的方法,特别是parse(),它试图按照给定的SimpleDateFormat对象的格式化存储来解析字符串
81.Java休眠(sleep)
sleep()使当前线程进入停滞状态(阻塞当前线程),让出CPU的使用、目的是不让当前线程独自霸占该进程所获的CPU资源,以留一定时间给其他线程执行的机会。
你可以让程序休眠一毫秒的时间或者到您的计算机的寿命长的任意段时间。
82.Thread.sleep(1000*3); //休眠3秒
83.Calendar类:
Calendar类的功能要比Date类强大很多,而且在实现方式上也比Date类更复杂一些
Calendar类是一个抽象类,在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用getlnstance方法创建即可
84.GregorianCalendar类
Calendar类实现了公历日历,GregorianCalendar是Calendar类的一个具体实现
85.Calendar的月份是从0开始的,但日期和年份是从1开始的
86.Java正则表达式:
正则表达式定义了字符串的模式
正则表达式可以用来搜索、编辑或处理文本
正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别
一个字符串其实就是一个简单的正则表达式,.(垫好)也是一个正则表达式
87.捕获组:
可以通过matcher对象的groupCount方法来查看表达式有多少个分组 m.group
88.matches和lookingAt方法都用来尝试匹配一个输入序列模式。它们的不同是matches要求整个序列都匹配,而lookingAt不要求
lookingAt方法虽然不需要整句都匹配,但是需要从第一个字符开始匹配
89.变量作用域:
变量的范围是程序中该变量可以被引用的部分
方法内定义的变量被称为局部变量
局部变量的作用范围从声明开始,直到包含它的块结束
局部变量必须声明才可以使用
方法的参数范围覆盖整个方法。参数实际上是一个局部变量
for循环的初始化本分声明的变量,其作用范围在整个循环
但循环体内声明的变量其使用范围是从声明到循环体结束
90.Java异常处理:
·用户输入了非法数据
·要打开的文件不存在
·网络通信时链接中断,或者JVM内存溢出
91.代码少了一个分号,运行出来结果是提示是错误java lang Error
如果用System.out.println(11/0),那么是因为用0做了除数,会抛出java.lang.ArithmeticException的异常
92.要理解Java异常处理是如何工作的,需要掌握以下三种类型的异常:
检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略
运行时异常:运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略
错误:错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的
93.Java继承
集成的概念:继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为
94.Java不支持多继承
95.继承的特性:
子类拥有父类非private的属性,方法
子类可以拥有自己的属性和方法,即子类可以对父类进行扩展
子类可以用自己的方式实现父类的方法
Java的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如B类继承A类,C类继承B类,所以按照关系就是B类是C类的父类,A类是B类的父类,这是Java继承区别于C++继承的一个特性
提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系越紧密,代码独立性越差)
96.重写:是子类对父类的允许访问的方法的实现过程进行重新编写,返回值和形参都不能改变。即外壳不变核心重写
重载:是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同
97.Java多态:
多态是同一个行为具有多个不同表现形式或形态的能力
98.多态存在的三个必要条件:继承,重写,父类引用指向子类对象:Parent p = new Child();
99.多态的好处:可以使程序有良好的扩展,并可以对类的对象进行通用处理
100.虚函数:
虚函数的存在是为了多态
Java中其实没有虚函数的概念,它的普通函数就相当于C++的虚函数,动态绑定是Java的默认行为。如果Java中不希望某个函数具有虚函数特性,可以加上final关键字变成非虚函数
101.多态的实现方式:重写,接口,抽象类和抽象方法
102.Java抽象类:
由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类
在Java中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口
103.Java封装:
在面向对象程式设计方法中,封装(Encapsulation)是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法
封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段
适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性
104.封装的优点
一,良好的封装能够减少耦合
二,类内部的结构可以自由修改
三,可以对成员变量进行更精确的控制
四,隐藏信息,实现细节
105.Java接口:
接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法
除非实现接口的类是抽象类,否则该类要定义接口中的所有方法
接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内描述的所有方法,否则就必须声明为抽象类。另外,在Java中,接口类型可用来声明一个变量,它们可以成为一个空指针,或是被绑定在一个以此接口实现的对象
106.Java包(package):
为了更好地组织类,Java提供了包机制,用于区别类名的命名空间
107.Java使用包这种机制是为了防止命名冲突,访问控制,提供搜索和定位类,接口,枚举和注释等。