1.面向对象的简介
1.面向对象是什么呢?先用标准的语言的解释一下:面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。是不是是感觉很繁琐?其实简而言之就是拿东西过来做对应的事情,是不是一下就感觉简洁多了?w(゚Д゚)w
其实当你学到这里的时候,你就已经接触过很多面向对象的东西了.举个例子:在JAVA中获得随机数的Random,打印输出的System,键盘录入的Scanner等,这种拿东西来做事情的过程就是面向对象.接下来我会一一来介绍面向对象中的一些重要的基础概念.
2.类和对 象
1.首先你要知道什么是类和对象。类就是共同特征的描述,就好比一张设计图,你首先定义了一个类(设计图),接下来才能拿来运用创建对象;而对象则是真实存在的东西,就好比拿工具来制造出的东西一样。下面我来展示一段伪代码:
//public class 类名 {
// 1.成员变量(代表属性)
// 2.成员方法(代表行为)
// 3.构造器
// 4.代码块
// 5.内部类
//}
//接下来我们将主要展示1,2两个模块,至于3,4,5我们将会在后面的学习中进行讲解。
package 类和对象; //装在同一个软件包中才能进行调用
public class Phone {
//定义了一个类
//属性
String brand;
double price;
//行为
public void call(){System.out.println("手机在打电话");}
public void playgame(){System.out.println("手机在打游戏");}
}
//Pass:其实我认为Java中的类与C语言中的结构体具有一定的相似之处
这就定义了一个类,就好比已经有了设计图和工具,接下来就可以运用这个类创建一个对象了.。
创建对象的格式为:类名 对象名 = new 类名( );
package 类和对象;
public class Phonetest {
public static void main(String[] args) {
//创建手机的对象,也就是使用类来创建一个实实在在的东西
Phone p = new Phone();
//给手机赋值(给对象赋值)
p.brand = "小米";
p.price = 1999.99;
//获取手机对象中的值
System.out.println(p.brand);
System.out.println(p.price);
//调用手机中的方法
p.call();
p.playgame();
}
}
细心的小伙伴们肯定发现了对象的使用其实与C语言中结构体的使用很相似,是这样的!!!但差别还是比较大的。
另外需要知道的是一个代码文件中可以定义多个类,但是只能一个类是由public修饰的,且public修饰的类名必须是Java代码的文件名,例如:
import 类和对象.Phone;
public class asd {
public static void main(String[] args) {
//创建手机的对象
Phone p = new Phone();
//给手机赋值
p.brand = "小米";
p.price = 1999.99;
//获取手机对象中的值
System.out.println(p.brand);
System.out.println(p.price);
//调用手机中的方法
p.call();
p.playgame();
}
}
class Phone { //创建一个类
//属性
String brand;
double price;
//行为
public void call(){System.out.println("手机在打电话");}
public void playgame(){System.out.println("手机在打游戏");}
}
学习了以上知识,应该对类和对象有了初步认识。那么接下来你就可以new一个自己的对象,再也不用担心没对象了,( ヘ( ̄ω ̄ヘ))。
2.封装
1.封装的简介
封装是面向对象的三大特征之一,它在Java中的作用是毋庸置疑的。封装的实质就是将类中的状态信息隐藏在类的内部,不能够直接访问而是必须通过该类提供的特定方式来对信息进行操作和访问。
2.封装的步骤
1.修改属性的可见性:将类中的属性由public改为private
2.设置访问方法:可以手动添加set( )/get( )方法来访问私有化变量
3.在set( )方法中设置限制条件
举个例子:
public class Girlfriendtest {
//private是一个权限修饰符,表示由private修饰的变量只能在本类中进行修改与赋值
private int age;
//public是都可以直接访问的
public void setage(int n) {
//限制条件
if (n >= 18 && n <= 30) {
age = n;
} else {
System.out.println("无效数据");
}
}
public int getage() {
return age;
}
public void Like() {
System.out.println(name + "最爱男朋友我了");
}
}
这就是将类进行封装。至于使用封装好的类的格式,与调用普通类是一样的,只是在封装好的类中存在一些私有化变量需要使用封装中的特定的方法才能够进行访问。
3.封装的好处
封装的好处当然多多 ヘ( ̄ω ̄ヘ)。首先能使编程变得更简单,有什么事直接找对象调用方法就行(其实在Java中已经由sun公司封装好了非常多的方法,如果有需要直接调用就行了(๑•ㅂ•)و✧ ),此还在于隐藏类的实现细节,让使用者只能通过程序员规定的方法来访问数据,可以方便地加入存取控制修饰符,来限制不合理操作,以此来增强程序的健壮性和可读性。
3.构造方法
1.构造方法又叫做构造器,构造函数。构造方法不能够被手动调用,它是在创建对象时由虚拟机进行调用的。也就是说每创建一个对象,虚拟机就会调用一次构造方法。
它分为空参构造和全参构造。而它的作用是在创建对象的时候给成员变量进行初始化,这样其实可以减少封装中的get函数了。举个例子:
//构造方法的格式:
//修饰符 类名(参数){
// 方法体
//}
public Studenttset(){
//空参构造方法
System.out.println("java");
}
public Studenttset(String name,int age,char gender){
//带参的构造方法
//this表示此类中的成员变量,用于区分成员变量和局部变量
//this的本质就是所在方法调用者的地址值
this.name=name;
this.age=age;
this.gender=gender;
}
细心的小伙伴们可能会发现之前在创建对象时,我们好像并没有在类中写过构造方法。是这样的!!!( ̄∀ ̄)
其实即使我们不写构造方法,当我们创建对象(任何类定义出来)时,虚拟机会帮我们补上一个带空参的构造方法,所以并没有问题滴。当然如果我们手动的写了构造方法,虚拟机就会以我们写的构造方法为准
小建议:当构造方法时建议将带参的空参的构造方法都写出来。
对构造方法做个小结:创建对象的时候,虚拟机会自动调用构造方法,将成员变量初始化.
4.对象内存图
java的内存主要分配在栈;堆以及方法区里。毫无疑问Java程序的主方法main()以及其他包括对象中的方法是由计算机分配在方法区里的。而堆里分配的内存是用于存储对象(简言之:对象就是在程序中new出来的那一部分,并且其本身是一个引用类型变量)的,但是对象里的方法还是由计算机分配在方法区中的,堆里存储的实际上是对象中成员方法的地址。最后栈空间是实际方法运行的空间,而调用方法的实际运用的思想是递归并且相对于堆空间而言栈空间所分配的内存更小。