1,面向对象概述:
面向对象是现对于面向过程而言的;
面向对象与面向过程都是一种思想;
面向过程强调功能行为,面向独享是将功能封装进对象,强调的是具有功能的对象;
2,面向对象的特点:
面向对象是一种符合人们思考习惯的思想;
面向对象使复杂的事情变得简单;
面向对象将程序员从执行者转变为指挥者;
完成需求时:
先找具有所需功能的对象来使用,如果不存在,创建一个具有该功能的对象,这样可以简化开发提高复用。
3,面向对象的开发、设计、特征:
开发:不断地创建对象,使用对象,指挥对象做事的过程;
设计:管理和维护对象之间的关系。
特征:封装、继承、多态。
4,类与对象、属性与行为、成员变量与成员函数:
//使用计算机语言就是不断地在描述现实生活中的事物;
类:Java中描述事物是通过类来体现的的,类是具体事物的抽象,是概念上的定义;生活中描述事物就是描述事物的属性和行为;
对象:该类事物在现实生活中实实在在存在的个体。
属性:java中对应类中的成员变量;
行为:java中对应类中的成员函数。
5,成员变量与局部变量的区别:
(1)成员变量定义在类中,整个类中都可以访问,它有默认初始化值,存放在堆内存中。
(2)局部变量定义在局部范围内(函数,语句等),只有范围内可以访问,他是没有默认初值化值,存放在栈内存中。
6,Eg:创建对象、使用对象:
class Car
{
int num = 4;
String color = "red";
void run()
{
System.out.println(color+"……"+num);
}
}
class CarDemo
{
public static void main(String[] args)
{
//生产汽车。在java中通过操作new操作符来完成。
//其实就是在堆内存中产生一个实体。
Car c = new Car();//c就是一个类类型变量。记住:类类型变量指向对象。
//需求:将已有车的颜色改成蓝色,只会该对象。在java中的方式是:对象.对象成员
c.color = "blue";
c.run();
Car c1 = new Car();
c1.run();//red 4
}
}
Car c = new Car();
c.num = 5;
Car c1 = c;
c1.colour = “green”;
c.rum();//c.colour = ”green”;c.num = 5;
7,匿名对象:
概念:匿名对象是对象的简化形式;
两种使用情况:当对对象的方法仅调用一次的时候;当匿名可以对象作为实际参数进行传递的时候。
new Car().run();仅调用方法有意义,调用属性没有意义;如果对一个对象进行多个成员调用,必须给对象起个名字。
8,封装(Encapsulation)
概念:是指隐藏对象的属性和实现细节,仅对外提供公共的访问方式。
好处:将变化隔离
便于使用
提高复用性
提高安全性
原则:将不需要对外提供的内容都隐藏起来。
把属性都隐藏,提供公共方法对其访问。
9,封装private
privte//私有,权限修饰符,用于修饰成员;仅在本类中有效。
私有仅仅是封装的一种体现形式;
class personDemo
{
private int age;
public void setAge(int a)
{
if(a>0 && a<130)
age = a;
else
System.out.println("Age不符合范围");
}
public int getAge()
{
return age;
}
void speak()
{
System.out.println("age="+age);
}
}
class person
{
public static void main(String[] args)
{
personDemo p = new personDemo();
p.setAge(-20);
p.speak();
}
}
10.构造函数:
方法名与类名相同
没有返回类型
没有返回值
(2)作用:构造函数是用于创建对象,并对其进行初始化赋值,对象一建立就自动调用相对应的构造函数,
(3)构造方法的注意事项:
A:如果一个自定义类没有构造方法,系统会默认给出一个无参构造方法。
B:如果一个自定义类提供了构造方法,那么,系统将不再给出无参构造方法。
这个时候,你可以不使用无参构造方法。
如果你想使用,那么,就必须手动给出无参构造方法。
建议:一般情况下,我们的自定义类都要手动给出无参构造方法。
(4)构造方法和成员方法的区别
A:格式区别
构造方法和类名相同,并且没有返回类型,也没有返回值。
普通成员方法可以任意起名,必须有返回类型,可以没有返回值。
B:作用区别
构造方法用于创建对象,并进行初始化值。
普通成员方法是用于完成特定功能的。
C:调用区别
构造方法是在创建对象时被调用的,一个对象建立,只调用一次相应构造函数
普通成员方法是由创建好的对象调用,可以调用多次
11.构造代码块:
/*
this:看上去,是用于区分局部变量和成员变量同名情况。
this为什么可以解决这个问题?
this到底代表的是什么呢?
this:就代表本类的对象,到底代表哪一个呢?
this代表它所在函数所属对象的引用。
简单说:哪个对象在调用this所在的函数,this就代表哪个对象。this的应用:当定义类中功能时,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象。
但凡本类功能内部使用了了本类对象,都用this表示。
*/
class Person
{
private String name;
private int age;
Person(int age)
{
this.age = age;
}
Person(String name)
{
this.name = name;
}
Person(String name,int age)
{
this.name = name;
this.age = age;
}
public void speak()
{
System.out.println("name="+this.name+"...age="+this.age);
this.show();
}
public void show()
{
System.out.println(this.name);
}
/*
需求:给人定义一个用于比较年龄是否相同的功能。也就是是否是同龄人。
*/
public boolean compare(Person p)
{
return this.age==p.age;
}
}
class PersonDemo3
{
public static void main(String[] args)
{
Person p1 = new Person(20);
Person p2 = new Person(25);
boolean b = p1.compare(p2);
System.out.println(b);//Person p = new Person("lisi");
//Person p1 = new Person("zhangsan");
//p.speak();
//p1.speak();
//p.speak();
}
}
12,This关键字在构造函数间调用:
/*
this语句 :用于构造函数之间进行互相调用。
this语句只能定义在构造函数的第一行。因为初始化要先执行。
*/
class Person
{
private String name;
private int age;
{
System.out.println("code run");
}
Person()
{
//this("hah");
System.out.println("person run");
}
Person(String name)
{
//this();
this.name =name;
}
Person(String name,int age)
{
//this(name);
//this.name = name;
this.age = age;
}
}
class PersonDemo4
{
public static void main(String[] args)
{
new Person();
//Person p = new Person("lisi",30);
//Person p1 = new Person("lisi2",36);
}
}