Java的基本特性. 1.若类变量没有初始化,并且直接在后面的代码中使用,那么系统会自动识别其数据类型,并且为他赋初值。而局部变量则不行,会直接报错。
2.访问修饰符:
public 工程
producted 本包+ 外包子类
默认 本包(默认叫做包权限修饰符)
private 本类(可以被继承,但是继承后无使用的权利)
————————————————————————————–
直观图:

3.多肽
Animal tuzi = new EatGrassAnimal();
父类 子类
只可调用父类Animal中的方法,但走到子类的对象。
子类方法引用可调用的方法,由引用类型决定,不是该引用指向的对象类型决定。
多态在运行时动态绑定,原本指向的是父类Animal,但是在运行的时候,开始改变指向子类的方法。
4.值类型,和引用类型
值类型保存的是 值(在栈中)
引用类型保存的是 指向堆的内存地址(在栈中) 堆中保存的是对象
(引用类型传递的是内存地址,而值类型传递的是值)
5.类名
Java中*.java名,应该和类名相同。
在一个*.java文件中,最外层类只能有一个是public的,并且该class必须是和*.java文件名字相同的class。
6.数据类型
Java中的成员变量(写在class中的)系统会根据其数据类型自动给予赋值。
Java中的局部变量(写在方法中的),系统不会自动赋值。
另外:
int a,b = 1;或者int b=1,a;
类似于这样的赋值,a没有值(系统自动赋值),b才等于”1″。
例子:
do le d =1e200;
float o = (float)d;
System.out.println(o);
输出:
Infinity
意思是说“无穷大”。也就是d这个值大于 float的存贮空间。
还有:
打印的时候是将所有类型都转换为String类型的,然后输入出的。
int a = 12;
String b = “”+a;(自动转换为String类型)
7.静态方法(static)
使用static修饰
再调用过程中,静态的可以直接调用静态的,非静态的可以直接调用静态的(都是 类.方法())。
静态的中要调用非静态的需要new一个对象,才可以调用。
8.接口(Interface)
在接口中的属性自动是: public static final 修饰的。
接口中的方法一定是public的。
接口中的属性系统不会自动赋值。
接口可以继承接口。(专业术语:扩展)
面向接口编程:
可以使 接口 和 实现 分离。
好处:增强扩展性,添加实现类而没有任何更改。
使用:用在经常改动的地方,层和层之间的调用。
接口实现多继承:
子类继承一个父类,同时实现多个接口。
子类:GoldenMonkey 父类:Valuable 接口:Protectable
GoldenMonkey 有父类的方法和对于接口的实现。
调用时:
Valuable v = new GoldenMonkey(); // Valuable 父类
v.getMoney();
Protectable p = (Protectable)v; // Protectable 接口
p.beProtected();
9.构造方法
构造方法名要与类名相同,构造方法没有返回值,构造方法可以重载。
类如果不写构造方法,系统会自动创建一个无参的构造方法。
一旦自己在类中写了一个构造方法,系统将不会自动创建无参的构造方法。
经验:
如果在类中创建了一有参的构造方法,则再new对象不传参数将会报错。
public class Person{
//建议在写有参的构造函数时,将无参的构造函数写上。『以免 这样的代码报错:Person person = new Person();』
public Person(){
}
public Person(int Id,int age){
}
}
10.重载(overload)
注意一下几点:方法名相同,参数类型不同,参数个数不同,参数顺序不同。
满足上述要求,就构成重载。
11.this关键字
this表示的是当前对象。
在内存中,this可以看作是一个变量,它的值是当前对象的引用。
经典实例:
public class Leaf(){
int i = 0;
Leaf(int i){
this.i = i;
}
}
分析:
成员变量 i =0;
在构造方法Leaf中有一个声明了 变量 i ,这个 i 的作用域在构造方法中,
这里的 this 代表的是 Leaf类的对象, 所以 this.i = i; 第一个是成员变量 i ,第二个是构造方法的 i .
12.Java中的包
包的命名:com.公司名.小组.*** (前面其实就是公司的域名,在这以后再细分)
将一个类放入包中,要在这个类源文件第一句话写 package。
要确定 包名 跟 实际的目录层次 正确。(该类的源码可能会产生影响)。
访问位于同一个包中的类不需要引入。
必须class文件的最上层包的父目录位于classpath下。
在 cmd中 执行一个类需要写全包名。
—————————————————————————————————
jre中 sun 提供给我们的一些类:
java.lang 包含一些java语言的核心类,如:String、Math、Integer、System、Thead……
(这个包内的类是唯一不用导包就可以使用的)
java.awt 包含了构成抽象窗口工具集(abstract window toolkits)的多个类,这些类被用来构建和管理应用程序的图形化界面 (GUI)。
java.applet 包含applet运行所需的一些类。
java.net 包含执行与网络相关的操作的类。
java.io 包含能提供多种输入/输出功能的类。
java.util 包含一些使用工具类,如定义系统特性、使用与时期相关的函数。
—————————————————————————————————-
13.架包(jar)
用命令给项目打包:
输入命令:jar (将显示所有的参数帮助)
打包直接输入:jar -cvf 名字.jar *.* (先切换到项目目录内部根目录,这里的*.*表示主目录下的所有文件夹以及文件)
使用架包:在 环境变量中配置classpath属性 路径\架包名.jar (这样就可以调用架包中的类了,其实就是把jar当作一个文件夹)
14. 继承(extend)
使用关键字extend继承,子类会继承父类的所有东西(可以继承private修饰的,但是没有调用、使用的权利)
内存分析:子类中有一个父类的对象。所以可以继承父类的东西。
15.重写(overwrite)
要与被重写的方法拥有相同的:类名、参数、返回值。
注意:
重写的访问权限要不小于被重写的访问权限。
重写的类中,父类和子类有相同名称且相同修饰符的成员变量,
那么这两个成员变量之间不存在重写,这两个成员变量属于各自的对象。
16.super
super 表示的是父类的对象。
内存中的空间

17.继承中的构造方法
子类的构造过程,必须调用父类的构造方法。
子类可以在自己的方法中使用『super(参数)』调用父类的构造方法,可以使用『this(参数)』调用子类的构造方法。
如果子类构造方法中没有显示的调用基类构造方法,则系统默认调用基类无参的构造方法。
如果子类构造方法中既没有显示调用父类构造方法,而父类中又没有无参的构造方法,则编译出错。
有抽象方法的类,必须是抽象类。
抽象方法必须被实现,除非他的子类也是抽象类。
抽象方法只需要声明,不需要实现。
抽象方法不能实例化(不可以new对象)。
21.final
final的变量的值不能够被改变。
final的局部变量(形参)的值不能被改变——-可防止改变。
final的方法不能被重写。
final的类不能够被继承。