面向对象
面向对象是一种思想
面向对象是相对面向过程而言
面向过程:强调的是功能行为
面向对象:将功能封装进对象,强调具备了功能的对象
面向对象的三个特征:封装,继承,多态
开发就是找对象,使用对象
类和对象的关系
类就是对现实生活中事物的描述
对象就是这类事物,实实在在存在的个体
局部变量:栈内存中
成员变量:堆内存中
匿名对象
<span style="color:#CC33CC;"><strong><span style="font-size:18px;">new Car().num = 5;
new Car().color = "blue";
new Car().num;</span></strong></span>
使用方式一:
当对对象的方法只调用一次时,可以用匿名对象来完成,这样写比较简化
如果对一个对象进行多个成员调用,必须给这个对象起个名字
方式二:
可以将匿名对象作为实际参数进行传递
<span style="color:#CC33CC;"><strong><span style="font-size:18px;">eg: show(new Car());</span></strong></span>
封装
好处:将变化隔离,便于使用,提高重用性,提高安全性
原则:1,将了需要对外提供的内容都隐藏起来
2,把属性都隐藏,提供公共方法对其访问
构造函数
特点:1,函数与类名相同
2,不用定义返回值类型
3,不可以写return语句
作用:缎带对象进行初始化
***当一个类中没有定义构造函数时,系统会默认给该类加入一个空参数的构造函数
当类中定义了构造函数时,系统中就没有默认函数了
构造函数和一般函数在写法上有不同
在运行上也有不同
构造函数在对象一建立就运行,给对象初始化
而一般方法是对象调用才执行,是给对象添加对象具备的功能
一个对象建立,构造函数只运行一次
一般方法可以被对象调用多次
构造代码块:给所有对象进行初始化
构造函数只给对应对象进行初始化
以下是一份综合代码,详细看看注释
<span style="color:#CC33CC;"><strong><span style="font-size:18px;">public class Person {
private int age;
private String name;
/*
* 构造代码块
* 作用:给对象初始化
* 对象一建立就运行,优先于构造函数执行
*/
{
cry();
}
//构造Person
Person() {}
//简单说:哪个对象在调用this所在的函数,this就代表哪个对象
Person(String name) {
this.name = name;//不可用this(name)
}
Person(int age) { this.age = age; }
Person(String name, int age) {
//this.name = name;
this(name);
this.age = age;
/*
* this.age = age;
* this(name);
* 这样是不可以的,this在构造函数中必须是第一行
* 因为初始化要先执行
* 还有构造函数之间不许相互调用,会进入死循环
*/
}
Person(int age, String name) { this.name = name; this.age = age; }
//this的应用
//两个人比较是不是同龄人
//this的应用:当定义类中的功能时,该函数内部要用到该函数的对象时,用this来表示这个对象
public boolean compare(Person p)
{
return this.age == p.age;
}
public void setAge(int num) { age = num; }
public int getAge() { return age; }
public void setName(String s) { name = s; }
public String getName() { return name; }
void cry() { System.out.println("cry...."); }
void speak()
{
System.out.println("age="+age);
System.out.println("name="+name);
}
}
</span></strong></span>