Java课第八章 类的高级特性~2 final
final与static一样属于修饰符,可放在变量,方法,和类的前面,与访问修饰符不同
1.想声明一个常量,不希望它的值有所改变,只可赋值一次
例:final i; i=30; 此时,变量i不可再被赋值,第一次赋值可在任何地方;
2.声明一个方法,可以不被任何其他方法所覆盖,通常用在父类方法中
例:final void print(){} 此时print方法被定义为最终方法,不可被其他方法覆盖
3.声明一个最终类,不可被任何类继承(String 类也属于final类,因此他的对象不可被改变)
例:final class Demo(){}
1.一个变量可以声明为final,这样做的目的是阻止它的内容被修改.
2.声明final变量后,只能被初始化一次,然后就不能对其值进行修改
3.一个final变量实质上是一个常量.
1.在方法声明中使用final关键字向编译器表明子类不能覆盖此方法.
1.在声明中,一个final方法只能被实现一次,声明final的类不能被继承
2.如果一个类为final类,那么它的所有方法都为隐式的final方法
Java课第八章 类的高级特性
}
Java课第七章 *面向对象*~5 (END)
关键字:instanceof,import,package 特殊方法:toString(),equals()
instanceof:
1.instanceof运算符可以用来检查对象与类之间的关系
2.格式:if(obj instanceof classname).....,当obj为classname类或其子类的对象时,运算符返回true.
例:Father为一个父类,Son为一个子类
Son s1=new Son();
if(s1 instanceof Father) //返回的值为true,因为子类的对象也可以属于是父类
Father s2=new Father();
if (s2 instanceof Son) /返回的值为false,因为父类的对象不属于子类
类型转换:
1.执行自动类型转换需要2个条件:
-接受转换的类型种类是兼容的
-目的类型数的范围比源类型大
2.强制类型转换的格式:
(目标类型)value
Object类
1.所有创建的类都有一个默认的公共超级父类Object,它其中有一些已经定义好的方法
2.Object类包括在java.lang的包中,无论是哪个文件,系统默认调用java.lang这个包
3.此类定义了所有对象都具有的基本属性和方法 既默认的构造函数
4.可以用类型为Object的变量来引用任意类型的对象 //不解
equals()
格式:
(obj_name.equals(obj_name2));
对象1与对象2比较,
1.equals()这个方法在Object中,在其他类中可以任意调用
2.用于比较两个对象在堆中指向的地点是否相同,如果相同就返回true
3.子类可以通过覆盖Object的equals方法来实现由意义的测试,可以实现:若同一类型的两个不同对象包含相同的信息既返回true。也可以理解为同类中两个对象的值是否相等.
子类覆盖equals方法:
public boolean equals(Object Obj)
{
if(this==Obj) return true;//比较的是两个对象的引用(references)是否相等
if(Obj==null) return false;//检查 Obj是否为空
if(getClass() != Obj.getClass()) return false;//检查是否属于同一个class
return true;
}
第一句://比较的是两个对象的引用(references)是否相等
第二句://检查 Obj是否为空
第三句://检查是否属于同一个class
toString()
1.toString也是Object类中的一个方法,也可以在任何类中被调用
2.toString 用于返回对象的字符串表示
3.建议所有子类都覆盖此方法
4.使用"+"运算符将对象同一个字符串连接,java编译器会自动调用toString方法,获取对象的字符串表现形式
(以上好像在实际中都运用了)
源文件(编译单元)
1.每个编译单元必须是以.java结尾的文件名称,在一个编译单元里(既一个文件内),可以有一个public的类,这个类的名字必须与保存的文件同名.在一个单元内,除了public类,其它的类如果没被声明访问权限,就默认为protected的.
2.可以,尽管很少见,一个编译单元没有一个public类,所有的类都是protected的,那么文件名可以任意起,
3.编译一个.java文件时,对应于文件中的每一个类,会得到一个.class文件,文件名与类的名字相同.一个程序是一堆.class文件.
包:库单元 (最重要的部分之一)
1.用import来引入包或者包里的成员.
例:import java.util.*; //这里引入了java.util中的所有类
import java.util.Vector //这里引入了java.util中的Vector类(可以具体化)
2.java中,包德主要用途
-包允许将类组合成较小的单元.
-包允许在在更广的范围内保护类、数据和方法.
-在一个包中可以调用其它包中任何类,起到"类"_"覆用"的作用.
3.包可以是类、接口和子包的集合
4.两个不同包中含有同名类,如java.util包和java.sql包中都有一个Date类,下面程序会出现编译 出错,因为编译器不知道使用哪个Date类,这个时候要给......不知道同时调用他们的Date类
使用包:
创建包:
格式: package package_name;
访问java成员包
格式: package_name.class_name
导入包:
格式: import package_namme.*;
导入子包:
格式: import package_name.package2_name.*;
注意:
--只能用*来引入一个包中的所有类,并不能嵌套引入下层包
例: package_name下层还有一个包为package_name2,这里就不能用package_name.*来调用package_name2中间的类
--若两个Date类都要使用,则只能在每个类前面加上完整的包名
例:根据前面的例来导入2个包中的所有类
import package_name.*;
import package_name.package_name2.*;
--只能引入类,不能引入对象.如: 不能用import System.out.
--Java缺省自动引入java.lang包中所有的类,相当于import java.lang.*
CLASSPATH 类的路径
1.CLASSPATH是一个环境变量,包含一个或多个目录
2.它的意思是说JVM需要找一个.class文件的时候到哪里去找
3.CLASSPATH,它们作为一种特殊的根使用,从这里展开对.class文件的搜索
4.如果在没有设置CLASSPATH的环境变量时,系统默认给了一个"."(当前目录),编译器会在当前目录里去寻找.class文件
Java课第七章 *面向对象*~4
{
int price;
int value;
}
{
int price;
int value;
Sword(int p,int v)
{
super.price=10; //虽然子类的成员变量与父类的相同,在这里加了super.来识别变量为父类的
super.value=50; //如果想子类中给父类的成员变量赋值,必须在子类的构造函数中
price=p;
value=v;
}
void print()
{
System.out.println(super.price); //在这里,一样可以打印父类的,怕子类的成员变量覆盖父类的
System.out.println(super.value);
}
{
Sword s1=new Sword(100,50);
s1.print();
}
int a;
SuperClass()
{
a = 10;
}
public void printA()
{
System.out.println("父类中a ="+a);
}
public void printB()
{
System.out.println("你好,儿子。我是你爸爸");
}
}
int a;
SubClass(int a)
{
this.a = a;
}
public void printA()
{
System.out.println("子类中a = "+a);
}
}
public static void main(String args[]) {
SuperClass s1 = new SubClass(10); //关键就是这里,new 的构造函数是子类的
s1.printA(); //后面参数10等于给子类构造函数中的a赋值,
s1.printB(); //最后输出子类中的print这个方法覆盖的版本
}
}
Java课第七章 *面向对象*~3
{
String brand;
String color;
int price;
int number;
Vehicle(String b,String c)
{
brand=b; color=c;
}
Vehicle(String b,String c,int p,int n)
{
this(b,c);/*这里的(b,c)对应上面的那个构造函数,
this将自动调用式配与参数相同的构造函数*/
price=p;
number=n;
System.out.print("车牌="+brand );
System.out.print("- 颜色="+color);
System.out.print("- 价格="+price );
System.out.print("- 座位数="+number);
}
public static void main(String args[])
{
Vehicle c1=new Vehicle("法拉利","红色",300,4);
}
}
Java课第七章 *面向对象*~2
JAVA课第6章 函数
JAVA第5章 数组(极重要)
@每个参数被视为字符串分别存储在main函数的参数数组中
@可以使用双引号将多个字符串作为一个整体显示
Jva课3-4章 结构控制
{
if(num % 9 == 0)
continue;
System.out.println("不能被9整除的数有:"+num);