类和对象
面向对象的简述
早期的计算机编程是基于面向过程的方法,例如实现算术运算1+1+2 = 4,通过设计一个算法就可以解决当时的问题。随着计算机技术的不断提高,计算机被用于解决越来越复杂的问题。一切事物皆对象,通过面向对象的方式,**将现实世界的事物抽象成对象,现实世界中的关系抽象成类,**继承帮助人们实现对现实世界的抽象与数字建模。通过面向对象的方法,更利于用人理解的方式对复杂系统进行分析、设计与编程。
对象是类的具体化实现。它将对象作为的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。
面向对象开发有三个过程:OOA(面向对象分析),OOD(面向对象设计),OOP(面向对象编程)。
面向对象的三个基本特征:封装(保护内部操作不受破坏),继承(在原本的基础上进行扩充),多态(在一个指定的范围内进行概念的转换)。
类和对象的基本概念
类是现实世界或思维世界中的实体在计算机中的反映,它将数据以及这些数据上的操作封装在一起。
对象是具有类类型的变量。类和对象是面向对象编程技术中的最基本的概念。
类与对象的关系:类是对象的抽象,而对象是类的具体实例。类是抽象的,不占用内存,而对象是具体的,占用存储空间。类是用于创建对象的蓝图,它是一个定义包括在特定类型的对象中的方法和变量的软件模板。
开发时:找对象,建对象,用对象,并维护对象之间的关系。
类和对象的定义和使用
在java中定义类,使用的是关键字class进行修饰
[访问修饰符]class 类名{
属性(成员变量,字段)
行为(成员方法)
}
定义一个Person类
class Person{ //类名必须大驼峰
//成员变量
public String name;//普通变量
public int age=20;
public static int pp=10; //静态变量
//普通成员方法
public void eat(){//普通成员方法
int a=10; //局部变量 存在栈上
System.out.println("eat");
}
public static void sleep(){ //静态成员方法
System.out.println("sleep");
}
上面就是类的定义,但无法使用,相当于只有一个模板。还需要对其进行实例化,将其变成对象
声明并实例化对象
类名 对象名=new 类名();
or
类名 对象名=null;
对象名 =new 类名();
例子
Person per = new Person();
当实例化对象之后就可以对其进行响应的操作
对象.属性:表示调用类中的属性
对象.方法:表示调用类中的方法
实例:
class Person{
public String name;
public int age;
public void informa(){
System.out.println("姓名:"+name+" 年龄:"+age);
}
}
public class TestDemo {
public static void main(String[] args) {
Person per = new Person();
per.name="张三";
per.age=18;
per.informa();
}
}
输出的结果
姓名:张三 年龄:18
question:定义类的时候类相当于是模板因此可以不赋值,那么他的初始值是什么?
answer:在定义成员变量的时候,变量没有赋值则为初始值。整型0 浮点型0.0 char类型、\u0000 boolen型false 引用型(类 数组 接口)null
类和对象的存储原理
引用类型与基本类型不同,引用类型需要内存的分配和使用,关键字new相当于分配内存空间通过下图就可以更清晰的理解两者的存储关系。
Person per = new Person();
per.name="张三";
per.age=18;
以此为例
如图 per是Person类的引用因此存在栈上 存的是新开辟的对象的地址 ;
它的对象真正存在于堆区中开辟的空间 name 和age开始是默认值;
通过per.name per.age进行访问从而对其进行赋值,
而方法存于方法区中 在堆区上有一个方法表指向方法区的方法从而进行访问
静态变量和静态方法的调用
上述都是普通变量和普通的方法的调用
静态变量和静态方法都是static进行修饰
class Person1{
static int age=10;
public static void show(){
System.out.println(age);
}
}
public class TestDeom3 {
public static void main(String[] args) {
Person1 per=new Person1();
System.out.println(per.age);
System.out.println(Person1.age);
per.show();
Person1.show();
}
}
都可以打印出 10
静态的变量不是存储于堆区的方法上而是存储于方法区,因此他的访问不依赖于对象。
它的调用可以通过类名.变量 类型.方法进行调用。
也可以通过对象.变量 对象.方法进行 此时合法不合理
下节讲解封装的内容 敬请关注!!!
封装链接