目录
一、面向对象
面向对象程序设计(Object Oriented Programming)
面向过程 C
着重于“过程”
优点:性能高
缺点:耦合度高、不易于扩展、不易于维护
面向对象 Java
着重于“对象”
优点:耦合度低、易于扩展、易于维护
缺点:性能低
二、对象
2.1什么是对象
具有明确的行为(方法)和特征(属性|变量)的实体
2.2对象有什么
行为 : 指的是方法,一般都是动词。代表对象能干什么
特征: 指的是属性,一般都是名词。代表对象有什么
三、类
3.1创建类
类的由来:类是由多个具有相同特征和行为的对象抽取出来的
如果定义一个类:
1、确定类名
2、编写成员变量
语法:数据类型 属性名;
3、编写成员方法
语法:public 返回值类型 方法名(形参){
//方法的主体
}
注意:不要书写static
代码展示:
public class Student {//类:对象的模板
//编写属性(变量) 成员变量
String name;
int age;
double money;
//编写方法
//从面向对象阶段起,方法都不要加static
public void play(){
System.out.println("学生玩儿。。。");
}
public void study(){
System.out.println("学生学习。。。");
}
}
四、创建对象
语法:类名 对象名 = new 类名();
例如:Student stu = new Student();
代码展示:
public class TestStudent {
public static void main(String[] args) {
//创建Student对象
Student stu1=new Student();
Student stu2=new Student();
//对象有属性(对象赋予基本信息,使用对象的基本信息),对象有方法(为了完成你的功能)
//使用对象 使用对象中的属性,对象中的方法
stu1.name="wang";
stu1.age=18;
stu1.money=3000;
System.out.println("姓名为"+stu1.name);
System.out.println("年龄为"+stu1.age);
System.out.println("余额为"+stu1.money);
//调用对象的方法
stu1.study();
stu2.name="li";
stu2.age=20;
stu2.money=9000;
System.out.println("姓名为"+stu2.name);
System.out.println("年龄为"+stu2.age);
System.out.println("余额为"+stu2.money);
stu2.play();
}
}
五、类和对象的关系
类:定义了对象应具有的特征和行为,类是对象的模板
对象:拥有多个相同特征和行为的实体,对象是类的实例
面向对象就是从具体到抽象,再从抽象到具体的过程
六、实例变量
6.1实例变量和局部变量的区别
成员变量(实例变量):定义在类的里面方法的外面的变量称之为成员变量
局部变量:定义在方法的内部的变量称之为局部变量
* 成员变量和局部变量的区别
* 1、位置不同
* 成员变量:在类中,方法外
* 局部变量:在方法内部
* 2、初始值不同(变量必须要初始化才能使用)
* 成员变量:系统会赋予默认值(与之前讲的数组一致)
* 局部变量:没有默认值
* 3、作用域不同
* 成员变量:在类中都可以使用
* 局部变量:只能在作用域中使用(在它所在的{}中)
* 4、重名问题
* 成员变量不能重名,局部变量在不同的作用域中是可以重名的
* 如果当局部变量和成员变量重名的时候,java中遵循就近原则
* 5、生命周期不同
* 成员变量:变量会随着对象的销毁而销毁。对象什么时候销毁呢?(Java中GC垃圾回收机制)
* 局部变量:当变量出了作用域就会被销毁
七、实例方法
7.1实例方法
实例方法:当对象被创建的时候产生(不使用static修饰)
7.2方法的重载
方法重载:在一个类中的出现同名方法称之为方法的重载
方法重载的要求:
1、同名不同参(参数类型、个数、顺序)
2、与返回值,访问修饰符无关
调用重载的方法会根据传递的参数不同,去执行不同的方法
重载的好处:方便、灵活、屏蔽使用差异
代码展示:
public void work(){
System.out.println("这是work方法默认8小时");
}
public void work(int hour){
System.out.println("这是work方法工作"+hour+"个小时");
}
八、构造方法
8.1构造方法的概念
构造方法:类中的特殊方法,用于创建类的对象
- 作用:创建类的对象(实例化)
- 语法:public 构造方法名(){}
- 构造方法名必须与类名完全一致
- 特点:
1、如果一个类没有编写构造方法, 那么jvm会默认提供一个无参构造方法,但是如果 一个类提供了构造方法,那么jvm就不会再提供给这个无参构造方法
2、构造方法可以重载
3、一个类无论提供多少个构造方法,一定要保留一个无参构造方法 场景: 给对象的属性赋值
8.2对象创建过程
8.3对象的内存分配
存储对象的变量p(引用)中保存对象的地址,通过变量中的地址访问对象的属性和方法。
8.4构造方法重载
代码展示:
//编写构造方法
public Dog(){
System.out.println("这是Dog类的构造方法");
}
public Dog(String name){
System.out.println("这是Dog类的有参构造方法");
}
//1、创建对象 会调用这个类的无参构造把对象创建出来
Dog dog=new Dog();
//1、创建对象 会调用这个类的有参构造把对象创建出来
Dog dog1=new Dog("zhang");
九、this关键字
this关键字:
含义:表示当前类的对象,在对象被创建的时候自动产生
作用: 可以调用本类的属性、方法、构造方法
调用本类的属性
- 语法:this.属性名
- 在本类中调用本类的属性this关键可以省略
- 当前成员变量与局部变量重名的时候,this.属性名表示的是成员变量,不加this表示局部变量(就近原则)
调用本类的方法:
- 语法:this.方法名();
- 在本类中调用本类的方法this关键可以省略
调用本类的构造方法(只能在构造方法中使用)
- 语法:this(构造参数);
- 特点:
1、避免无穷递归(构造方法循环调用)
2、调用本类构造方法的时候,this(构造参数)必须写在构造方法的第一行
代码展示:
public class User {
//成员变量
String name="李四";
//要想调用一个类的成员(变量、方法),那么必须先要创建这个类的对象
public void m1(){
//如何访问变量name this表示当前类的对象 (默认加上了this关键字)
System.out.println(this.name);//"李四"
}
public void m2(){
String name="张三";
System.out.println(name);//"张三"
System.out.println(this.name);//"李四"
}
public void aa(){
bb();
}
public void bb(){
}
public User(){
this("jack");
System.out.println("无参构造方法");
}
public User(String name){
System.out.println("有参构造方法");
}
}