Java面向对象(基础篇):一

1.面向对象思想

面向对象作为java语言的核心内容,很多初学的小伙伴在刚接触面向对象的时候,脑子都是晕晕乎乎的,什么是类?什么是对象?他们的关系是怎么样的?等等问题一拥而出,今天我就为大家做一下我自己面向对象的学习分享。
在学习面向对象之前,我先给大家看一幅图:

在这里插入图片描述大家观察这幅图,不难看出:第一个框图从起床到去上课坐车,每一步的动作都很具体;而第二个框图,我们只需要将衣服放入洗衣机,然后洗完再将衣服拿出来即可。那么第一幅框图我们就可以把它看作是“面向过程”,而我们的第二幅款图则就是我们今天的主角“面向对象”。

那么二者有何区别呢?
面向过程思想:做一件事情的每一步我们都是参与者,关注的是解决问题的过程。
面向对象思想:只关注最终结果。

2.面向对象的特点

1.更加符合人类思考问题的方式
2.将我们从事件的执行者变成了调用者
3.将问题简单化

3.类和对象

接下来我们来介绍一下类和对象。
:具有相同属性特征和行为的一类事物,称为类;类是抽象的,看不见摸不着。
对象:万事万物皆为对象,看得见摸得着。
类和对象的关系:对象是类的具体描述,类是对象的抽象。
我举一个例子大家想一下:
在这里插入图片描述
学生是一个类,而对象既是具体的每一个学生。
如果我现在说:学生类出来,有人会答应嘛?
但是如果我说:学生张三出来,那么张三就会知道在叫他。

属性: 描述该事物具有的信息。
行为:该事物能干什么。
注意:在java中,类是最基本的单位,所有我们要学会用类描述事物。
事物 → 类
属性 → 成员变量
行为 → 成员方法

4.面向对象的开发设计与特征

开发:不断的创建对象、使用对象、修改对象
设计:管理和维护对象之间的关系。一个好的对象设计,可以实现程序的简化并且易于维护
特征:封装、继承、多态

5.举例说明:把大象装进冰箱

接下来让我们用面向对象的思想来分析一下:
1.都有哪些类?
类:大象类、冰箱类、OOPDemo
2.每个类中都有哪些行为(方法)
大象类:吃草、走路
冰箱类:开门、关门
OOPDemo:装大象的方法 main
3.类与类之间有怎么样的关系
源码展示:
大象类:

在这里插入图片描述
冰箱类:
在这里插入图片描述
OOPDemo:
在这里插入图片描述
此处,我分别用来面向对象和面向过程两种方法,方便大家理解。
结果如下:在这里插入图片描述

大家可以看到,面向过程和面向对象产生的结果一样,那么就会有人问了,两者产生的结果一样那么为啥还有用面向对象?
那我这样说吧:现在我们只是进行了装大象,那么如果我们后续还有进行装猴子、装小狗、装老虎等···,难道是我们还要一遍一遍的去打印嘛?我们用面向对象的思想,提前设置好类,等到用的时候,不管是装什么,都可以直接调用,岂不是更方便!

6.类的使用

6.1类的定义:
在这里插入图片描述

//我们创建一个学生类
public class Student{
    
    
//成员变量
String name
int age
//构造方法
//成员方法
}

6.2类的调用:
在这里插入图片描述

Student tom = new Student();//实例化语法
Student tom = new Student("tom",20);
//调用类中的属性:
tom.name
tom.age
//调用类中的方法:
tom.getAge(20);

6.3构造方法:
在这里插入图片描述

public Student(){
    
    
//无参构造方法
}

//构造有参方法
 public Student(String name, int age){
    
    
//this后续我会讲解,大家先不用注意
    this.name = name;
    this.age = age;


}

注意:
1.构造方法名和类型必须保持一致
2.没有访问者这一说法
3.如果在⼀个类中显示的定义了有参构造⽅法,则隐形⽆参构造将不存在。此时建议将 ⽆参构造⽅法显示定义
4.每个类都有构造⽅法,如果没有显示地为类定义构造⽅法,Java编译器将会为该类提供⼀个默认隐形 ⽆参构造⽅法
5.在创建⼀个类的对象时,⾄少要调⽤⼀个构造⽅法。
6.⼀个类中可以有多个构造⽅法,它们之间构成了重载,即构造⽅法重载。

7.this的用法

this:代表当前类的对象
用途
1.用于区分成员变量和局部变量同名的冲突问题
2.可以调用当前类的构造方法。语法:this([参数列表]);不传参数在调用当前类的无参构造方法,相反调用参数列表相吻合的有参构造方法。注意:此条调用语句必须是方法体中的第一条语句。
3.可以调用成员属性:this.成员属性名
4.可以调用成员方法:this.成员方法名([参数列表]);
this 的代码演示

//this关键字的应用:
//1.调用当前类的属性(区分成员变量和局部变量同名赋值问题)
//2.调用当前类的方法
//3.调用当前类的其他构造方法
//
//
//注意:this关键字访问类的成员方法时不受访问权限的控制,可以访问本类中所有的成员变量和成员方法,包括private 的成员变量和成员方法
public class Person
String name;
int age;
//显示无参构造方法
public Person(){
    
    
this("tom",20);
}
//定义有参构造
public Person(String name){
    
    
this.name = name;
public Person(String name,int age){
    
    
this(name);
this.age = age;
}
public void  setName(String name){
    
    
this.name = name;
}
public void testMethod(String name){
    
    
this.setName(name);//通过this调用了当前类中的其他方法
System.out.println(this.name);
}
public static void main(String[] args) {
    
    
Person person = new Person();

System.out.println("___________this调用本类属性________________");
person.setName("tom");
System.out.println("name1"+person.name);
System.out.println("___________this调用本类方法________________");
person.testMethod("lili");
System.out.println("___________this调用本类构造方法_____________");
Person person1 = new Person("tom",30);
System.out.println(person.name);
System.out.println(person.age);
}
}

8.类的应用代码:

接下来我给大家展示一下类的应用代码,我们定义一个学生类,在定义一个学生测试类,然后从学生类中调用我们的属性和方法!

//我们定义一个学生类
Public class Student{
    
    
String name;
int age;
String email;
//显示定义无参方法
public Student(){
    
    
}
//定义构造有参方法
public Student(String name ,int age, String email){
    
    
this.name = name;
this.age = age;
this.email = email;
}
//成员方法
//获取姓名
public String getName(){
    
    
  return name;
}
public void setName(){
    
    
this.name = name;
}
public int getAge(int age){
    
    
if(age>0 &&age<18){
    
    
this.age = 18;
}else{
    
    
this.age = age;
}
return this.age;
}
}
//学生类的测试类
//需求:调用学生类中的成员属性和方法
public class StudentTest{
    
    
public static void main(String[]  args ){
    
    
//实例化Student中的对象
Student tom = new Student();
//调用属性:对象名.属性名
tom.name = "tom ford";
tom.age = 20;
tom.email = "[email protected]"
System.out.println("姓名:"+tom.name);
System.out.println("年龄:"+tom.age);
System.out.println("邮箱:"+tom.email);

System.out.println("_________________________________________________________");
//如果上述Student中属性过多,则这种方法很慢,很麻烦。
//通过有参构造一次性构造
Student tom = new student("tom",20,"[email protected]");
System.out.println("姓名:"+tom.name);
System.out.println("年龄:"+tom.age);
System.out.println("邮箱:"+tom.email);


System.out.println("_________________________________________________________");

//调用方法:对象名.方法名()
int tomAge = tom.getAge(20);
System.out.println("tomAge:"+tomAge);
System.out.println("姓名:"+tom.getName());
tom.name =("dd");
System.out.println("name:"+tom.getName());

}


}

9.在一个类中可以有以下变量

类变量:存在于类中,方法之外,声明时必须前面加static关键字:如: static int flag;随着类的加载而产生;
成员变量:
局部变量:

局部变量和成员变量的区别:
1.声明的位置不同
成员变量(实例变量):类中,方法体外
局部变量:方法体中或方法声明上
2.内存中存储的位置不同
成员变量:位于堆内存中
局部变量:位于栈内层中
3.生命周期不同
成员变量:随着对象的产生而产生,随着对象的消亡而消亡
局部变量:随着方法的调用而产生,随着方法调用完毕而结束
4.初始状态不同
成员变量:有默认的初始化值
局部变量:没有默认的初始化值,必须手动初始化后才可以使用。
5.执行优先级
当成员变量和局部变量同名时,调用时采取“就近原则”;

猜你喜欢

转载自blog.csdn.net/zjdzka/article/details/109455091