JAVADay8—面向对象—类与对象—空指针异常—参数传递—构造方法

标题1.面向对象与面向过程的区别:

面向对象:是一种以过程为中心的编程思想,分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。

优点:小型项目效率较高。不需要提前进行对象的提取、模型的建立,直接干活写代码。
缺点:耦合度高、拓展性差、复用性差
比如蛋炒饭(鸡蛋跟米饭充分混合),端上来之后你说只想吃米饭,就得很困难的把鸡蛋挑拣出去。
蛋炒饭

面向过程:更符合人类的思维方式,人类就是以“对象”的方式去认识世界的。把世界分割成不同的单元,然后每个单元都实现成对象,给环境一个驱动,让各对象协作起来形成系统。

比如盖浇饭相当于,菜+米饭,两个对象比较分明,而且菜的种类还可以灵活改变,产品复用性好。
盖浇饭

标题2.三个术语

OOA:面向对象分析(Object-Oriented Analysis,OOA)
OOD:面向对象设计 (object-oriented design,OOD)
OOP:面向对象编程 (object-oriented programming)

标题3.JAVA的三大特征

封装、继承、多态

标题4.类和对象——类创造对象,同类对象拥有“共同特征信息”

JAVA中要想得到“对象”,必须先定义“类”,“对象”通过“类”这个模板创造出来。
4.1.“类”是一个抽象集合,属性的集合——类=属性+方法
eg:人类:性别、肤色、身高、体重……
4.2.对象是实际存在的个体——也叫实例
实例化:通过类创造对象的过程。
eg:人类中的:张三、李四、王五、赵六

标题5.Java程序员是一个桥梁,连接现实与虚拟世界。

标题6.类的定义

6.1.怎么定义一个类?
[修饰符列表] class 类名{ //修饰符列表不是必须的,可以省略
//类体=属性+方法
//属性在代码上以”变量“的形式存在
//方法描述动作行为
}
6.2.为何”属性“以”变量“的形式存在?
因为属性对应的是数据,数据在程序中只能存放到变量中
因此属性就是变量。
6.2.1.两种变量:
1.局部变量,在方法体中声明的;(如果用户不赋值,系统不给它自动赋默认值)
2.成员变量,在方法体外声明的。(如果用户不赋值,系统会给它自动赋默认值)
默认值列表

eg:学生的属性:姓名:张三,性别:男,学号:123456789

public class student{String name; //姓名String sex;  //性别int xuehao; //学号
}

标题7.创建对象——new 类名();

eg. 类型 变量名 = new student();//此处student是"引用数据类型"
student s1 = new student();// 变量s1在”栈“中,它存的是该对象在”堆“中的地址
student s2 = new student();
student s3 = new student();

引用:指存储—对象—内存地址的一个变量;
对象:是在堆里—new—出来的
“成员变量”中的“实例变量”,应该先创建“对象”,再通过“引用”的方式访问“实例变量”。

标题8.空指针异常——NullPointerException

public class NullPE{public static void mian(String[] args){Customer c = new Customer();System.out.println(c.id);//输出:0,系统默认赋值//	变量c中存的是“对象”的地址c.id=9521;System.out.println(c.id);//输出:1234c=null;//切断风筝线了,c.id找不着地址了,GC机制启动System.out.println(c.id);//空指针异常——NullPointerException}class Customer{int id;//“成员变量”中的“实例变量”,应该先创建“对象”,再通过“引用”的方式访问“实例变量”。}
}

GC机制主要针对堆区,在空指针异常时清除被“切断风筝线”的堆区地址数据,并释放该堆区内存。
上图程序对应的JVM图:
正常指向对象地址时
切断风筝线之后

标题9.参数传递—-—对比分析下边2个程序的不同

永恒原理,把变量a的这个盒子里的“值”(数值量\地址量),复制一份传过去。
9.1.只传递数值

public class Test1{public static void mian(String[] args){int i=10;//此处i对应一个地址add(i);System.out.println(i);//输出:10}public static void add(int i){ //此处形参i对应另一个新地址i++;System.out.println(i);//输出:11}
}

2.传递地址量

public class Test2{public static void mian(String[] args){Person p=new Person();p.age=10;add(p);  //p中的地址传了过去System.out.println(p.age);//输出:11}public static void add(Person p){p.age++; //改变了p保存的地址,所对应的堆中的对象System.out.println(p.age);//输出:11}
}
class Person{int age;
}

10.构造方法——所有构造方法“名字”,必须和“类名”保持一致

10.1.作用:1.完成对象的创建;2.并给属性赋值。

以下程序的第2个构造方法为例,没有被手动赋值的按系统默认值赋值,birth=null、sex=false。
创建方法:

Vip v1=new Vip(1234L,"张三","2000.1.1",true);//创建对象,会员号为1234的会员张三,是男性,生日是200年1月1日


public class Vip(){long no;String name;String birth;boolean sex; //false:nv,true:男。//所有构造方法“名字”,必须和“类名”保持一致//第一个是“无参数”构造方法public Vip(){   //最好写上,防止报错,表示给实例变量赋系统默认值}//以下均为有”参数“构造方法public Vip(long HuiYuanHao,String MingZi){no  = HuiYuanHao;name= MingZi;}//以第2个为例,没有被手动赋值的按系统默认值赋值,birth=null、sex=false。public Vip(long HuiYuanHao,String MingZi,String ShengRi){no  = HuiYuanHao;name= MingZi;birth=ShengRi;}public Vip(long HuiYuanHao,String MingZi,String ShengRi,boolean XingBie){no  = HuiYuanHao;name= MingZi;birth=ShengRi;sex=XingBie;}}

标题11.画JVM的内存图:

对应程序如下:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

内存图如下:

在这里插入图片描述


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部