Java知识点整理:第七章:static关键字、final关键字、抽象类 、接口、Object类
2016-11-11 23:33
676 查看
1.static关键字
1.static可以修饰属性,方法,内部类,代码块
static修饰属性:
a.static修饰的属性是类级别的.属于类全体对象共享的变量.只有一份.
b.静态属性是在类的加载期间初始化的.
c.静态属性的访问通过类名.属性访问。
static修饰方法
static修饰的方法,属于类级别.
一般用来表示工具方法.
还是通过类名.方法调用.
所有的对象共享此方法.
Math.random();
static修饰代码块:
{} --->new对象的时候执行
static{}---->类加载的时候执行.只会执行一次.
静态代码块用于静态资源文件的加载(图片,音乐,视频,配置文件..)
static修饰内部类(在内部类的阶段讲解.)
2.final关键字
最终的
final可以修饰类,变量,方法.
final修饰类,此类不能被继承.
final修饰变量,变量不可以改变.
final修饰方法,方法是不可以被重写的.
常量
通过publicstatic final修饰的变量.
public static final int a = 5;
常量名一般大写。
public static final int B = 5;
经典笔试题;
class Roo{
static int a = 1 ;
int b = 2;
}
main{
final Roo roo = new Roo();
Roo roo1 = new Roo();
roo =roo1; //
错误.
roo.a = 2;//正确,不建议这么写
roo.b = 4; //正确.
}
3.抽象类
不具体的类,包含有抽象方法的类.
抽象方法:
只有行为的概念,没有具体的行为实现.
如何定义抽象方法,抽象类?
使用abstract关键字修饰类就是抽象类
public abstract class Shape{
}
使用abstract关键字修饰方法就是抽象方法.
public abstract double area();
继承了抽象类以后必须要实现抽象类中的所有抽象方法.
抽象类是不能实例化对象的.
包含有抽象方法的类是抽象类,但是抽象类不一定包含抽象方法.
什么情况下继承了抽象类后可以选择性的实现抽象方法?
abstract class Animal{
abstract void go();
abstract void eat();
}
abstract class PXAnimal extends Animal{
void go(){
print("爬");
}
abstract void eat();
}
abstract class FXAnimal extends Animal{
void go(){
print("飞");
}
abstract void eat();
}
什么时候要定义抽象类?
抽象方法--->抽象类
如果有行为的概念,没有具体行为的实现.就要定义成抽象方法.
4.接口
通过interface定义接口
通过implements实现接口
继承只能继承一个类
规范.
接口是一个特殊的抽象类.
接口中的所有方法都是抽象方法.
接口中除了抽象方法以外,只能定义常量.
实现接口(继承)
接口是不能被实例化的.
接口只能被实现(implements),
一个具体类实现接口,必须实现全部的抽象方法.
可以同时实现多个接口
一个东西既是...又是....
接口中只能定义常量以及抽象方法
定义常量可以省略public static final
定义方法可以省略public abstract
接口与接口之间可以继承.
interface A{}
interface B{}
A extends B{}
一个具体的类可以同时继承类与实现接口.
5.object类
Object类是一切类的父类,
java中所有类都间接或直接继承Object
所有的类都继承了Object的属性和方法
toString() equals()hashCode()
1.toString()方法是当前对象的文本描述
Object类中此方法的默认实现:
全限定名@hashcode
例如:Point
oop.day05.Point@6cedf
toString是系统默认调用的,在打印对象的时候默认调用。
System.out.println(p);
System.out.println(p.toString());
对toString()方法进行重写。
根据实际的情况,想要打印对象的什么内容就对toString()怎样重写。
2.equals()比较两个对象的属性是否相等
比较相等:
== 引用相等(比较对象的地址)
obj.equals(other)
对象相等(是比较对象的属性)
Object中,equals默认就为==
所以一般重写equals()
重写的规则:
自反性:对于任何非空引用值x,x.equals(x)返回值都为true
对称性:对于任何非空引用值x,y,
当x.equals(y)为true时,
y.equals(x)也为true
传递性:对于任何非空引用值,x,y,z
x和y相等,y和z相等,那么z和x也相等
一致性:对于任何非空引用值x和y,多次调用x.equals(y)
始终返回true,或false。
前提是对象上的equals的信息没被修改的。
对于任何非空引用值x,x.equals(null)都返回false
Point{
int x;
int y;
public boolean equals(Object obj){
if(obj == null){
return false;
}else if(this == obj){
return true;
}else if(obj instanceof Point){
Point other = (Point)obj;
return this.x == other.x &&
this.y == other.y;
}
return false;
}
}
3.hashCode()方法返回对象的hashCode值
hashCode方法建议(必须)与equals一同重写
重写规则:
当两个对象equals相等,那么hashCode值要相等
当两个对象equals不相等,
如果是同一个类的对象,那么hashCode值要保证不相等
如果是不同类的对象,那么无所谓
默认的hashCode值是当前堆对象地址blabla出来的一个整数,
不是内存地址。可以间接的认为就是内存地址
一般会使用对象的OID作为hashCode值
OID是对象的唯一编号,在一个项目中,一般采用数据库生成ID,
即数据库的主键
注:重写equals后,建议(必须)重写hashCode方法!!!
1.static可以修饰属性,方法,内部类,代码块
static修饰属性:
a.static修饰的属性是类级别的.属于类全体对象共享的变量.只有一份.
b.静态属性是在类的加载期间初始化的.
c.静态属性的访问通过类名.属性访问。
static修饰方法
static修饰的方法,属于类级别.
一般用来表示工具方法.
还是通过类名.方法调用.
所有的对象共享此方法.
Math.random();
static修饰代码块:
{} --->new对象的时候执行
static{}---->类加载的时候执行.只会执行一次.
静态代码块用于静态资源文件的加载(图片,音乐,视频,配置文件..)
static修饰内部类(在内部类的阶段讲解.)
2.final关键字
最终的
final可以修饰类,变量,方法.
final修饰类,此类不能被继承.
final修饰变量,变量不可以改变.
final修饰方法,方法是不可以被重写的.
常量
通过publicstatic final修饰的变量.
public static final int a = 5;
常量名一般大写。
public static final int B = 5;
经典笔试题;
class Roo{
static int a = 1 ;
int b = 2;
}
main{
final Roo roo = new Roo();
Roo roo1 = new Roo();
roo =roo1; //
错误.
roo.a = 2;//正确,不建议这么写
roo.b = 4; //正确.
}
3.抽象类
不具体的类,包含有抽象方法的类.
抽象方法:
只有行为的概念,没有具体的行为实现.
如何定义抽象方法,抽象类?
使用abstract关键字修饰类就是抽象类
public abstract class Shape{
}
使用abstract关键字修饰方法就是抽象方法.
public abstract double area();
继承了抽象类以后必须要实现抽象类中的所有抽象方法.
抽象类是不能实例化对象的.
包含有抽象方法的类是抽象类,但是抽象类不一定包含抽象方法.
什么情况下继承了抽象类后可以选择性的实现抽象方法?
abstract class Animal{
abstract void go();
abstract void eat();
}
abstract class PXAnimal extends Animal{
void go(){
print("爬");
}
abstract void eat();
}
abstract class FXAnimal extends Animal{
void go(){
print("飞");
}
abstract void eat();
}
什么时候要定义抽象类?
抽象方法--->抽象类
如果有行为的概念,没有具体行为的实现.就要定义成抽象方法.
4.接口
通过interface定义接口
通过implements实现接口
继承只能继承一个类
规范.
接口是一个特殊的抽象类.
接口中的所有方法都是抽象方法.
接口中除了抽象方法以外,只能定义常量.
实现接口(继承)
接口是不能被实例化的.
接口只能被实现(implements),
一个具体类实现接口,必须实现全部的抽象方法.
可以同时实现多个接口
一个东西既是...又是....
接口中只能定义常量以及抽象方法
定义常量可以省略public static final
定义方法可以省略public abstract
接口与接口之间可以继承.
interface A{}
interface B{}
A extends B{}
一个具体的类可以同时继承类与实现接口.
5.object类
Object类是一切类的父类,
java中所有类都间接或直接继承Object
所有的类都继承了Object的属性和方法
toString() equals()hashCode()
1.toString()方法是当前对象的文本描述
Object类中此方法的默认实现:
全限定名@hashcode
例如:Point
oop.day05.Point@6cedf
toString是系统默认调用的,在打印对象的时候默认调用。
System.out.println(p);
System.out.println(p.toString());
对toString()方法进行重写。
根据实际的情况,想要打印对象的什么内容就对toString()怎样重写。
2.equals()比较两个对象的属性是否相等
比较相等:
== 引用相等(比较对象的地址)
obj.equals(other)
对象相等(是比较对象的属性)
Object中,equals默认就为==
所以一般重写equals()
重写的规则:
自反性:对于任何非空引用值x,x.equals(x)返回值都为true
对称性:对于任何非空引用值x,y,
当x.equals(y)为true时,
y.equals(x)也为true
传递性:对于任何非空引用值,x,y,z
x和y相等,y和z相等,那么z和x也相等
一致性:对于任何非空引用值x和y,多次调用x.equals(y)
始终返回true,或false。
前提是对象上的equals的信息没被修改的。
对于任何非空引用值x,x.equals(null)都返回false
Point{
int x;
int y;
public boolean equals(Object obj){
if(obj == null){
return false;
}else if(this == obj){
return true;
}else if(obj instanceof Point){
Point other = (Point)obj;
return this.x == other.x &&
this.y == other.y;
}
return false;
}
}
3.hashCode()方法返回对象的hashCode值
hashCode方法建议(必须)与equals一同重写
重写规则:
当两个对象equals相等,那么hashCode值要相等
当两个对象equals不相等,
如果是同一个类的对象,那么hashCode值要保证不相等
如果是不同类的对象,那么无所谓
默认的hashCode值是当前堆对象地址blabla出来的一个整数,
不是内存地址。可以间接的认为就是内存地址
一般会使用对象的OID作为hashCode值
OID是对象的唯一编号,在一个项目中,一般采用数据库生成ID,
即数据库的主键
注:重写equals后,建议(必须)重写hashCode方法!!!
相关文章推荐
- Java关键字final、static,抽象类,接口使用总结收藏
- 黑马程序员 Java基础 面向对象:继承、final关键字、抽象类、模版方法模式、接口、多态、Object类
- Java关键字final、static,抽象类,接口使用总结
- java/final变量,final函数,抽象类,接口,内部类,object类
- JAVA之旅(七)——final关键字 , 抽象类abstract,模板方法模式,接口interface,implements,特点,扩展
- 黑马程序员_java的继承性- 继承-final关键字-抽象类-接口-多态-异常-包-多线程-
- JAVA面向对象5:final关键字、抽象类和接口
- Java基础------知识点整理(四)-----final关键字
- 马士兵J2SE-第三章-面向对象-Object类:toString方法、equals方法、对象转型、抽象类抽象方法、final关键字、接口
- Java基础——继承+子父类相关特点+Final关键字+抽象类+模板方法设计模式+接口
- 【Java知识点总结】 final关键字与抽象类
- 我的java学习之路之接口,static,final,关键字
- JAVA基础再回首(七)——final关键字、抽象类abstract、接口interface、权限修饰符、导包
- Java基础 面向对象(3) 继承 final关键字 抽象类 接口
- Java重修之路(九)面向对象之final关键字,抽象类(abstract),接口(interface)
- 黑马程序员-----java中final关键字、抽象类、接口总结*
- Java笔记2 面向对象<3>final关键字、抽象类、模板方法模式、接口
- Java学习第三篇:类的三大特征,抽象类,接口,final关键字
- Java学习笔记---15.面向对象编程10-Java中final关键字,抽象类与接口
- Java基础(面向对象三——继承、final关键字、抽象类、接口)