JAVA基本功<8>_面向对象

一.面向对象的特点:
1,面向对象是一种思想,符合现在人们思考问题的思想。
2,面向对象思想的出现将复杂问题简单化。
3,将原来的面向过程的执行者角色转变现在的指挥者。

二. 面向对象与面向过程的区别:
面向对象:强调是具体事物。
面向过程:强调的是动作。
面向对象还基于面向过程。
一句话:在完成具体需求时,先要想到是否有具备实现需求功能的对象。
如果有,直接指挥这个对象,并调用这个对象的所需功能来完成需求。
如果没有,自己创建一个对象并定义好所需的功能,然后在指挥这个对象做事情。这样这个对象就具备了复用性。

比如:排序。自己不需要在定义了,只要找到java中具备排序功能的对象做事情即可。

境界的理解:一切皆对象。

三. 类与对象
类就是对现实生活中的事物进行的描述。
对象:就是该类事物实实在在存在的个体。

所以我们会先对现实生活中的事物进行类的描述。
然后在通过该类,创建计算机中具体的对象。
然后就可以操作这个计算机中的对象。来完成程序需求。

描述事物,其实就是在描述事物的属性和行为。

通过对类和对象关系的理解。
发现。类其实就是一组对象共性内容的抽象。

对象,就是通过该类new出来的具体的堆内存中的实体。
该实体中存储了具体的属性值。
注意:创建对象,需要用到一个关键字new。
new Car();//创建Car这个类的对象。这个对象也称为实体,也称为实例。
Car c = new Car();//创建一个对象,名称叫c。c是什么?c是指向了一个具体的对象的引用型变量。
//c是什么类型的变量呢?Car类型。Car是个类,所以c变量是一个类类型变量。
记住:类类型变量一定指向对象。

对象有了以后,就可以指挥对象做事情了,因为对象中具备了属性和行为。
怎么指挥呢?通过一个固定的调用格式:对象.对象成员。

c.color = "red";//给c这个车指定一个颜色。
c.num = 4;//给这个车指定一个轮胎数。
c.run();//指挥c这个车进行运行。
Car c = new Car ( );
c . color = “blue”;
c . num = 4;
c . run( ) ;
注意: 引用类型的变量,系统会默认为其进行初始化,但也可以自己手动为其进行显示初始化。

类与对象的细节。
在生产汽车时,每一个车在生产出来的时候是不具备颜色和轮胎数具体值。
需要对每一个车分别指定具体的数据。
希望的是,生产汽车时,让每一个车都具备同样的颜色 红色,同样的轮胎数,比如4个。

这时可以对类中的属性进行显示初始化。

局部变量和成员变量的区别?
局部变量:
1,定义在方法的参数,方法内的变量,语句中变量都是局部变量。
2,局部变量都存在栈内存中。
3,只要所在的函数被执行,该变量才存在于栈内存中,当该变量所属区域执行结束,该变量消失。
4,局部变量作用的范围是有限的。只在自己所在区域内有效,该区域指的所在的大括号。
成员变量:
1,定义在类中的变量,都是成员变量。
2,成员变量都存在于堆内存的对象中。
3,成员变量需要被对象调用。当对象给垃圾回收时,对象中的变量才消失。
4,成员在整个类中有效。其实准确的说,是在对象中有效。
只要是这个对象调用的方法,都可以访问该对象的属性也就是成员变量。
小事例:
public class CarDemo {

public static void main(String[] args) {
Car c = new Car();
c.num = 3;
c.run();
}
}
class Car{
int num = 4;//这里就用到了显示初始化。
String color = "white";
void run(){
System.out.println(num +"--------------------"+ color);
}
}
匿名对象:
就是没有名字的对象。是定义的对象的简化形式。

匿名对象的使用情况:
1,当对对象的方法进行一次调用的时候,可以简写成匿名对象形式。
匿名对象调用属性没有意义。
但是如果要对一个对象进行多次属性或者行为的调用。
必须对对象起个名字。
2,匿名对象可以作为实际参数进行传递.
new Car();//匿名对象。它直接就这样写。
如果它想要调用方法: new Car.run();
method(new Car());//匿名对象可以作为参数进行传递,也是简化形式。
public static void method(Car cc)
{
cc.color = "black";
cc.num = 3;
cc.run();
}//直接作为参数,传入到cc。

四. 基本数据类型与引用数据类型:
用一个小事例来表示吧:
Public class CarDemo {
Public static void main(String[] args) {
int num = 4;
method(num);
System.out.println(“num” + num);
}
Public static void method(int num){
int num = 3;
}
}//打印结果是4。
理由:当一个程序执行时,是从main方法开始的。
首先,main方法进栈,里面有一个局部变量num,初始化值是4。之后method方法进栈,同时把
参数num传了进去。在method方法中,也有一个局部变量num,它的值是3,于是这个3便覆盖掉了传入到method方法中的那个num。 method方法执行完,就开始了弹栈,method里面的局部变量num随着method的结束,也被释放了,于是method,以及它里面的num—(现在method里面的num的值是3)就消失了。method执行完,返回main方法。现在method已经没了,剩下的只有main里面的num了--(main里面的num还是4,它没有发生改变),所以打印出的num就等于main里的num的值4。

Public class DemoCar {
int num = 4;//显示初始化//成员变量
public static void mian(String[] args){
Car c = new Car();
c.num = 8;
method(c);//也可以使用匿名类来表示,method(new Car);
System.out.println(“num” + c.num);
}
Public static void method(Car c) {
c.num = 3;
}
}
首先,main方法进栈,它分配了一小块内存,给了一个叫作c的局部变量。同时在堆内存中,创建了一个实体,这个实体把自己的地址值复制给了栈内存中的c,于是这个c便指向了这个堆内存中的这个实体。由于堆内存中的变量会默认初始化(堆内存对象中的这个变量是成员变量),所以num刚开始的时候默认值是0,之后对这个num进行了显示初始化,现在num的值变成了4,c.num = 8,main里面的局部变量c又把它的值8赋给了num,于是8便覆盖了显示初始化的那个4。现在method方法进栈,传入了一个类类型的变量c进去。因为类类型变量一定指向对象,所以c就把它所指向的地址值,复制给了method的变量c。在method中,num等于3 。于是这个method就把3传给了堆内存的num。也就是说3覆盖了8。Method方法执行结束,里面的变量c消失,同时method这个方法的指向也消失。但是现在还有main里面的c指向堆内存中的实体,所以打印出的num就是3。

五.总结
今天所学的知识,对以后的编程很重要。我觉得我对于思想也有了些更好的认识,对于对象,我也可以举例子来描述。以前一直不懂执行顺序,今天通过老师的堆栈图,我也知道了先执行什么,再执行什么。面向对象很重要,我应该更好的去掌握。

问题清单:
1. 在需要传入参数的方法中,我不知道什么时候需要传入的是基本类型的参数,什么情况下需要传入的是类类型的参数????
是不是创建了对象,就得传入类类型的变量呢??如Public static void method(Car c)
传什么参数,得看你自己的需要。这个问题我跟你举个例子吧你好理解点:
比如说,你要结婚,你是个对象吧。相当于一个类,JAVA的是世界里面都是对象。结婚你得有个结婚对象吧
比如说一个很帅的男孩吧。他是个对象,是吧。然后你跟他结婚,要把他作为参数传给你吧。你们才能结婚吧。
这就是类类型的参数。
基本类型的参数,你要跟你男朋友比身高。他就可以传一个基本类型的参数给你。可以比较。不知道你懂了没,反正传什么参数,看你的需求。类类型的参数也可以叫做复合类型的变量,类里面对象可以有成员变量和成员方法,你都可以传过来。你要用什么,你自己可以拿到到。很灵活现在理解不了,以后面向对象思想成熟了,你就懂了。

2. 创建一个对象,假设: Person p = new Prson( ); 为什么这后面要有一对括号?这个括号里面可以写东西吗? 如果可以写,那可以写些什么??

括号是JAVA的语法规范,这个里面是可以写东西的,什么都不写说明是调用了父类无参的构造函数。要写东西的话,就是带参数的构造函数,重载不知道你懂不懂。方法重载你学了,你就懂了,里面可以写很多参数。当你要给这个对象赋值的时候,直接用它的构造方法。初始化对象。

师傅,昨天我们这网速太慢了,我没法发到邮箱去。只能今天发了。前天的我没总结,都是代码,而且我前天学的很不好。今天想看懂那些代码,之后我再自己敲出来。前天学的数组,我能听懂老师讲的,但是我自己写不出来。可能是缺少练习吧。
那道作业题,老师也是用的if else if 做的。 Switch不适合做。
这个问题了,智者见智,仁者见仁。我的意思,多练习,多思考,多发散。学起来就灵活了。


附加题:
我看你数组肯定没学好,给你加个题目:
你把冒泡排序,二分排序,快速排序。这三个排序,把原理和代码写出来,把他们的区别总结出来,下次发的时候总结给我。

总结还不错。继续努力把我交给你题目和老师交给你的题目完成好。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值