关于类的专题研究
来源:互联网 发布:软件开发技术特点 编辑:程序博客网 时间:2024/06/05 03:13
1.Object 类
1.1equals()方法
equals()方法,此方法用于比较对象是否相等,而且此方法必须被重写。
* 在用equals对两个对象进行比较时,实际上是比较对象的地址。覆写以后可以准确的对两个对象进行比较
* 在覆写equals()的同时必须覆写hashCode()方法,这样才能够确保相等的两个对象拥有相等的hashCode()
例
class Person1{ private String name; private int age; public Person1(String name,int age){ this.name = name; this.age = age; } public boolean equals(Object o){ boolean temp = true; Person1 p1 = this; if (o instanceof Person1){ Person1 p2 = (Person1)o; if(!(p1.name.equals(p2.name)&&p1.age==p2.age)){ temp = false; } }else { temp =false; } return temp; } }public class TestEquals { public static void main(String[] args) { // TODO Auto-generated method stub Person1 p1 = new Person1("张三",25); Person1 p2 = new Person1("张三",25); System.out.println(p1.equals(p2)?"是同一个人":"不是同一个人"); }}
1.2接收引用类型object类是所有类的父类,所有类的对象都可以使用Object接收,Object类不光可以接收对象,还可以接收任意的引用数据类型(类,接口,数组);接收接口类型。例:
interface A{ public String getInfo();}class B implements A{ public String getInfo(){ return "Hello World"; }}public class ObjectArray { public static void main(String[] args) { // TODO Auto-generated method stub //接口 A a = new B(); Object ob = a; A x = (A)ob; System.out.println(x.getInfo()); //数组 int[] temp ={1,3,5,7,9}; Object obj=temp; print(obj); } public static void print(Object o){ if(o instanceof int[]){ int[] x = (int[])o; for(int i=0;i<x.length;i++){ System.out.print(x[i]+"\t"); } } }}
2.内部类
内部类声明为public或private时,对其访问的限制与成员变量和成员方法完全相同
* 匿名内部类适合于创建那些仅需要一次的类
* 内部类成员可以直接访问外部类的私有数据,但外部类不能访问内部类的实现细节
* 内部类提供了更好的封装,可以把内部类隐藏在外部类之外,不允许同一个包中的其他类访问该类
* 内部类在声明时会破坏程序结构
* static关键字的作用是把类的成员相关变成类相关而不是实例相关,static修饰的成员属于整个类,而不是单个属性。
* 静态内部类无法访问外部类的实例成员
* 内部类不仅可以再类中定义,也可以在方法中定义。
例:
class InnerClassTest{ int score = 95; void inst(){ class Inner{ void display(){ System.out.println("成绩:score="+score); } } Inner in = new Inner(); in.display(); }}public class TestInner { public static void main(String[] args) { // TODO Auto-generated method stub InnerClassTest ics = new InnerClassTest(); ics.inst(); }}
3.匿名内部类
匿名类仅能被使用一次,创建匿名匿名内部类时他会立即创建一个该类的实例
* 该类的定义会立即消失,所以匿名内部类不能够被重复使用。
* 匿名内部类不能使抽象类,所以必须要实现它的抽象父类或接口里面的抽象方法。
* 匿名对象的使用也是类似
* 匿名内部类必须继承一个类或实现一个接口
例:
abstract class Bird{ private String name; public void setName(String name){ this.name = name; } public String getName(){ return name; } public abstract int fly();}public class AnonymousInnerClass { public void test(Bird bird){ System.out.println(bird.getName()+"最高能飞"+bird.fly()+"米"); } public static void main(String[] args) { // TODO Auto-generated method stub AnonymousInnerClass test = new AnonymousInnerClass(); test.test(new Bird(){//声明了一个Bird的内部类 public int fly(){ return 1000; } public String getName(){ return "小鸟"; } }); }}
4.this对象的使用
this 表示当前对象,而所谓的当前对象就是指调用类中方法或属性的那个对象。
* 可以用this()实现某一个构造方法,调用另一个构造方法。比如调用另一个类的无参构造方法。
* 构造方法是在实例化一个对象时被自动调用的,即在类的方法中,只有构造方法是被优先调用的,所以使用this调用构造方法必须也只能放在类中。
例:
class Person2 { private String name; private int age; public Person2(){ System.out.println("1.public Person"); } public Person2(String name,int age){ this(); this.name = name; this.age = age; System.out.println("2.new Person(String name,int age)"); }}public class TestThis { public static void main(String[] args) { // TODO Auto-generated method stub new Person2("张三",23); }}
5.static关键字的使用
static 类型的变量是所有对象共享的内存空间。 成为类变量
* 使用static定义的方法可以由类名直接调用
* 一个static类型的属性既可以在非static类型的方法中使用,也可在static类型的方法中使用,
* 若要用static类型的方法调用非static类型的属性,就会出现错误。
*
* 一个类可以使用不含在任何方法中的静态代码块,当类被载入时,静态代码块被执行,且只执行一次
* 常用来进行类属性的初始化,静态代码块优于静态方法。
*
* final 用法:final 标记的类不能被继承,方法不能被子类覆写,变量即为常量,只能赋值一次。
* instanceof 判断一个类是否实现了某个接口,也可以用它来判断一个实例对象是否属于一个类。
例:
class person{ public person(){ System.out.println("1 person"); } static{ System.out.println("2 person"); }}public class TestStatic { static { System.out.println("3 person"); } public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("4 程序开始执行"); new person(); new person(); }}
- 关于类的专题研究
- 《VC++专题研究》系列之- 武装你的力量
- 人工智能对医疗行业影响的专题研究:基本结论
- 动画专题研究
- 动画专题研究 一
- 动画专题研究二
- 动画专题研究三
- 动画专题研究 一
- 动画专题研究 一
- Android多分辨率专题研究
- 动画专题研究 一
- C++中的struct专题研究
- MINA粘包断包专题研究
- C++中的struct专题研究
- VC专题研究视频全集(VSFlexGrid应用开发、深入解释MFC原理、武装你的开发环境)
- 中国AR行业专题研究报告
- ASP.NET专题研究——登录权限
- ASP.NET专题研究——登录权限
- Ubuntu 14.04 配置 Nginx + uWSGI 托管 virtualenv 下 Flask 应用的一点注意事项
- 阮一峰:美丽心灵的永恒阳光
- php设计模式之装饰模式
- 21-Add Two Numbers-Leetcode
- javascript中apply()和call()方法的区别
- 关于类的专题研究
- as 报错 Error:(303, 27) 错误: 找不到符号 符号: 方法 sin(float) 位置: 类 FloatMath
- 面向过程 函数式 面向对象 ----基于python讲解
- 【读书笔记】Android安全机制解析与应用实践之源码分析
- HTTP和HTTPS有什么不同(区别)
- java中clone 方法的作用
- Spring的AOP应用
- 华为OJ之称砝码
- 使用SQLite3存储和读取数据