面向对象第二章
java具备描述对象以及对象之间关系的能力,因此是面向对象的编程语言面对对象有2大要素和四大特征两大要素:类与对象
四大特征:封装,继承,多态,抽象
构造器方法是和类同名的方法,但是没有返回值 (连void 都无)
构造器方法配合new关键字可以创建对象,分配内存
eg:
public static void main(String [ ] args){
iphone m = new iphone();
//注:等号左边是创建对象,等号右边相多于new了一个方法
}
public class phone{...}
new phone ();
//使用new关键字创建对象
//phone()这是一个构造器方法
无参构造法:
public iphone(){
}
有参构造法
public iphone (int a, int b, int c){
wigth = a;
hight = b;
wigth = c;
}
**面向对象和面向过程的区别**:
面向过程 :主要关注点是:实现的具体过程,因果关系
优点:对于业务逻辑比较简单的程序,可快去开发
缺点:很难解决非常复杂的业务逻辑,另外面向过程方式导致软件元素之间的“合度”非常高,只要有环境受影响,整个系统受影响最终导致软件“扩展力”差
面向对象 :主要关注点是:对象(独立体)能完成哪些功能
优点:“合度”低,扩展能力强,更容易解决现实世界当中更复杂的业务逻辑,组件实用性强
缺点:前期投入成本较高,需要进行独立体的抽取,大量的系统分析与设计
object常用方法
方法名 | 说明 |
---|---|
getClass | 返回此运行objwct的类 |
hash Code | 返回对象的哈希码 用来比较大小 |
cquals | 判断其他对象与此对象是否相等 |
clone | 创建并返回此对象的一个副本 |
toString | 返回对象的字符串表示 |
notify | 唤醒在此对象监视器上等待的单个线程 |
notify All | 唤醒在此对象监视器上等待的所有线程 |
wait | 使当前对象的线程等待tim eout时长 |
finalice | 垃圾回收时调动读方法 |
this关键字 (方法中的变量名和属性的名字一样)
this.名字 就把其变成了属性
用法this. +名字
有参构造和无参构造重名没报错原因?
方法重载 :
1.必须在同一个类里 。
2.方法名相同 。
3.参数列表方法参数的个数或参数类型不同 。
4.在使用this调用自身的其他构造方法时 ,只能排为第一条语句
5.与方法返回值和方法修饰符没有任何关系
static关键字
可修饰:变量 常量 方法 代码块
不建议使用static原因 :
1.静态的任何东西都属于类 ,在类加载的时候就给内存了 ,都可以进行运算。
2.非静态的任何东西都属于表对象 ,在new时候给内存 。
3.静态的共有内存 ,静态的先被加载 ,非静态的后被加载 。
4.静态的先被加载,就不需要对象点对调用 ,利用类名点就可 ,可在new前面
*用static修饰常量的好处:
在创建类的多个对象时,用static修饰的常量在内存中只有一份拷贝。不用static修饰则可能有多份拷贝。
Static修饰变量
1.被static修饰的成员变量属于类,不属于某个对象(也就是说:多个对象访问或修改static修饰
的成员变量时,其中一个对象将static成员变量进行了修改,其它的对象的static成员变量值跟
着改变,即多个对象共享同一个static成员变量。
2.被static修饰的成员,可以通过类名直接访问。
3.在非静态上下文中,不能访问非静态的内容,不能使用this/uper。
4.在非静态中,可以访问静态中的变量。
toString()方法:
1名字是toString
快捷键长按 Alt +tshift+s
2.返回对象字符串
eg:
//在类中写:
public String toString() {
retum wight+" "+hight+" "+weight
}
//测试类
//两个调用方法:
System.out.println(beta);//直接写对象名就可调用
System.out.println(beta2.toString());//以String类型打印输出
静态代码块会优先加载;无参构造和静态方法。
谁写在前面谁先加载。
eg:
public class person1 {
//单个类初始化执行顺序
static String name;
static final int AGE=23;
char sex;
public person1() {
System.out.println("无参构造法");
}
public static void eat() {
System.out.println("静态的吃的方法");
}
static {
System.out.println("静态代码块");
}
public static void main(String [] args) {
person1.eat();
person1 beta = new person1();
//静态代码块会优先加载,其他的谁写在前面谁先加载
System.out.println(person1.AGE);
}
}
内部类:
在一个类的内部写的类就称为内部类。内部类可以是public也可是private。
使用内部类的原因:
(1)内部类方法可以访问该类定义所在的作用域
中的数据,包括和私有的数据
(2)内部类可以队同一个包中的其他类隐藏起来
(3)当想要定义一个回调函数且不想编写大量代码时,使用匿名(anony mous)内部类比较便捷
(4)某种意义上另类的多继承
在java中 ,close 是关闭意识。比如sessin,close();
意思就是关闭sessin同时释放内存