类和面向对象
文章目录
一、面向对象
1、什么是面向对象
面向对象(Object Oriented Program,简称OOP)是一种思想,是基于面向过程而言的,就是说面向对象是将功能等通过对象来实现,将功能封装进对象之中,让对象去实现具体的细节;这种思想是将数据作为第一位,而方法或者说是算法作为其次,这是对数据一种优化,操作起来更加的方便,简化了过程。Java是一门纯面向对象的语言。用面向对象的思想来涉及程序,更符合人们对事物的认知,对大型程序的设计、扩展以及维护都非常友好。
2、面向过程与面向对象
什么是面向过程
面向过程(Procedure-Oriendented Program,简称POP)是一种编程模型,由一系列要执行的计算步骤组成,通常采用自上而下、顺序执行的方式。编程时把解决问题的步骤分析出来,然后利用函数逐步实现,在一步一步的具体步骤中再按顺序调用函数。
面向过程常见的编程语言:C、Basic等。
比如说在C语言学习中的三子棋游戏:
第一步 初始化棋盘
第二步 玩家下棋
第三步 电脑下棋
第四步 判断
第五步 退出游戏
面向过程注重的是过程,但是代码的扩展和维护比较麻烦。
而面向对象以"对象"为中心思想,把要解决的问题分成各个对象,建立对想的目的不是通过对象完成一个步骤,而是为了描叙某个对象在整个解决问题的步骤中的属性和行为。
3、面向对象的特征
面向对象三大特征:封装、继承、多态。而类和对象阶段主要研究封装。
二、类的定义和使用
1、什么是类
简单来说类就是对一个对象的描述,主要包括对象的属性和对象的行为(方法)。
2、类的定义
//创建一个类
class TestClass{
field;//字段(属性) 或者 成员变量
method;//行为 或者 成员方法
}
class为定义类的关键字,TestClass为类名,{}中的为类的主体。。
类中包含的内容称为类的成员。属性主要是用来描述类的,称之为类的成员属性或者类成员变量。方法主要说明类
具有哪些功能,称为类的成员方法。
例如定义一个狗类
public class Dog{
//狗的属性
public String Name;
public String Gender;
public int age;
public String Color;
//狗的行为
public void eat(){
System.out.println(name+"吃狗粮~~~");
}
public void sleep(){
System.out.println(name+"在睡觉~~~");
}
public void braks(){
System.out.println(name+"汪汪汪~~~");
}
}
注意
3、类的实例化
首先什么类的实例化
当我们定义了一个类时,就相当于在计算机中定义了一种新的类型(好比在C语言中创建了一个结构体),与int,double类型类似。
用类 类型创建对象的过程,称为类的实例化,在Java中通过采用new关键字,配合类名来实例化对象。
public static void main(String[] args) {
Dog d=new Dog();
//访问属性
d.Name="小黑";
d.Gender="母";
d.age=3;
d.Color="黑";
//访问方法
d.eat();
d.sleep();
d.barks();
}
//输出结果
// 小黑吃狗粮~~~
// 小黑在睡觉~~~
// 小黑汪汪汪~~~
注意
4、类和对象
- 类只是一个模型一样的东西,用来对一个实体进行描述,限定了类的成员.
- 类是一种自定义类型,可以用来定义变量.
- 一个类可以实例化多个对象.
- 类实例化出的对象好比现实中使用建筑设计图建造出的房子,类就好比设计图.
三、this引用
1、为什么要用this引用
public class Dog{
//狗的属性
public String Name;
public String Gender;
public int age;
public String Color;
public void setDog(String N, String G, int a, String c){
Name=N;
Gender=G;
age=a;
Color=c;
}
}
通过调用setDong方法对对象进行设置。那如果是下面代码时编译器该如何处理
public void setDog(String Name, String Gender, int age, String color){
Name=Name;
Gender=Gender;
age=age;
Color=color;
}
2、什么是this引用
this 是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针。
在成员方法中所有成员变量的操作,都是通过this引用去访问。只不过用户不需要来传递,编译器自动完成。
public void setDog(String N, String g, int a, String c){
this.Name=Name;
this.Gender=Gender;
this.age=age;
this.Color=color;
}
3、this引用的特征
- this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型
- this只能在非静态成员方法中使用
- this引用的指向不能修改
- this是“成员方法”第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法
对象的引用传递给该成员方法,this负责来接收,编译器编译之后将"成员方法"的隐藏的this还原。
四、对象的构造及初始化
1、构造方法
a、概念
构造方法(也称构造器)是一种特殊的构造方法,,在创建对象时,由编译器自动调用,并且在整个对象的生命周期内只调用一次。
b、特性
-
名字必须与类名相同
-
没有返回值,设置成void也不行
-
构造方法可以重载
public class Dog { public String name; public String gender; public int age; public String color; //无参构造方法 public Dog(){ this.name = "小黑"; this.gender = "母"; this.age = 3; this.color = "黑"; } //带参数的构造方法 public Dog(String name, String gender, int age, String color) { this.name = name; this.gender = gender; this.age = age; this.color = color; } public void printDog(){ System.out.println(this.name +" "+this.gender+" "+this.age+" "+this.color); } public static void main(String[] args) { Dog Dog=new Dog(); Dog Dog1=new Dog("小七","公",2 ,"金黄色"); Dog.printDog(); } }
-
public class Dog { public String name; public String gender; public int age; public String color; //无参构造方法 public Dog(){ this("小黑","母",3,"黑"); //this.name = "小黑"; //this.gender = "母"; //this.age = 3; //this.color = "黑"; } //带参数的构造方法 public Dog(String name, String gender, int age, String color) { this.name = name; this.gender = gender; this.age = age; this.color = color; } public void printDog(){ System.out.println(this.name +" "+this.gender+" "+this.age+" "+this.color); } public static void main(String[] args) { Dog Dog=new Dog(); Dog Dog1=new Dog("小七","公",2 ,"金黄色"); Dog.printDog(); } }
注意:
2、默认初始化
当我们在定义局部变量时必须要对局部变量进行初始化,而成员变量可以不用初始化,这是为什么呢?
在new对象时,JVM层面会做好多事情
-
检测对象对应的类是否加载
-
为对象分配空间
-
处理并发安全问题
比如:多个线程同时申请对象,JVM要保证给对象分配的空间不冲突
-
初始化所分配的空间
即:对象空间申请好后,对象中成员也设置好了初始值
数据类型 默认值 byte 0 char ‘/0000’ short 0 int 0 long 0L boolean false float 0.0f double 0.0 引用类型 null -
设置对象头信息
3、就地初始化
在声明成员变量时,就直接给了初始值。
public class Dog {
public String name="小黑";
public String gender="母";
public int age=3;
public String color="黑";
}
代码编译完成后,编译器会将所有给成员初始化的这些语句添加到各个构造函数中
oat | 0.0f |
| double | 0.0 |
| 引用类型 | null |
3、就地初始化
在声明成员变量时,就直接给了初始值。
public class Dog {
public String name="小黑";
public String gender="母";
public int age=3;
public String color="黑";
}
代码编译完成后,编译器会将所有给成员初始化的这些语句添加到各个构造函数中
原文地址:https://www.jb51.cc/wenti/3279820.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。