16java的面向对象编程&基础知识回顾

面向对象编程

java的核心思想就是OOP Object-oriented Programming.

面向对象的本质就是:以类的方式组织代码,以对象来组织(封装)数据

对红字的解释:

  • 解决复杂问题,要首先从宏观把握,分析框架和流程,此时需要面向对象的思路
  • 具体到微观操作,也就是具体的实现过程,就需要面向过程的思路

总结:宏观---面向对象;微观---面向过程

这里说一些关于封装、继承和多态的浅薄的理解:

封装:字面理解,就是把变量包装起来,为了不让别人操作,留一个口自己操作;

继承:字面理解,儿子会继承父亲的所有东西,Java的继承也是如此,B类(子类)继承A类(父类),那么B类(子类)得到A类(父类)的所有东西;

多态:有两个人做同一样事情,由于人的差异,做事的结果肯定会不同。人是一个对象,这个对象有一个方法是学习,但是张三和李四都去执行学习这个方法,但是他们的学习能力不同,所以他们的成绩也不同。

从现实的角度,我们的思路是先有了众多的对象,我们把它们抽象成类。对象是具体的,类是抽象的;

从设计程序的角度,我们会先设计出一个类,然后再使用这个类的对象(new一个)。类是对象的模板。

基础知识回顾

Post Script:大型的java项目只有一个main方法,而我建立了很多packag,每个packag里面又有很多main方法,这是为了初期学习java测试程序方便

下面用一个实际的程序进行说明:

break是结束一层循环,return是结束一个方法并返回一个值

  • 同一个包里面的方法可以互相调用,但是静态方法和非静态方法的调用方式有所区别

如上图所示,同一个package里面的方法可以直接调用,Demo08里面的PrintArray方法是static的,所以在Demo09里面可以使用“类名.方法名”进行调用,也可以先进行实例化,然后使用实例化的对象进行调用。

如上图所示,同一个package下的类可以互相调用,但是Demo06里面的factorial方法是非静态方法,所以不能直接使用“类名.方法名”进行调用,必须先实例化,然后使用实例化的对象进行调用。

  • 当然不在一个package里面的类也可以互相调用其他类的方法,但是需要导入方法所在的package,调用原则同上。

  • 当然,
    也是可行的。

下面说一个特殊情况:

package oop;

public class Demo01 {
    public static void main(String[] args) {

    }
    public static void a() {
        b();//这里显示不出来,实际上这个语句是报错的
    }
    public void b() {

    }
}

因为static和类Demo01一起加载的,时间片很早,类Demo01存在的时候,a方法就已经存在了,但是类Demo01实例化之后方法b才存在,也即就是说,一个已经存在的方法区调用一个不存在的方法,那肯定报错。

值传递和引用传递,下面是值传递

package oop;

public class Demo02 {
    public static void main(String[] args) {//java的值传递
        int a=10;
        System.out.println(a);
        reverse(a);
        System.out.println(a);
    }

    public static void reverse(int a) {
        a=-10;
    }
}

我们看到两次的输出结果都是10,a的值并未改变,这就是java的“值传递”

  • 在运行reverse方法之前,a=10毫无疑问,public static void reverse(int a)里面的a是形式参数,他只是一个占位符,传递的过程是把原来a所在内存的数值传递给形式参数a(并没有给形式参数a操作原来a所在内存的权限),所以reverse方法里面对a进行赋值并不能改变原来a 的值。
  • 可以把形式参数a幻城不同于a 的任意一个符号或者字符串,更容易理解

下面是引用传递

package oop;

public class Demo03 {
    public static void main(String[] args) {//java的引用传递
        Person person = new Person();
        person.name = "jj";//person是Person的一个对象,这是一个具体的人,可以改变其属性
        System.out.println(person.name);
        change(person);
        System.out.println(person.name);
    }

    public static void change(Person person) {
        person.name = "juanjuan";
    }
}

class Person {//定义了一个Person类,它有一个属性:name
    String name;
}

运行结果:

分析:引用传递和值传递使用了完全相同的操作,区别只有值传递使用的是内部类int,而引用传递使用的是自定义的Person类,那么重点来了,值传递传递的是变量内存中存储的数值,这一点跟C语言的函数的形参传递参数是相同的道理,而引用传递传递的是实实在在的Person类的对象的属性,类似于把指向对象的属性的指针传递给了方法中的参数,此时方法也具有了读写原来Person类的对象的属性的能力。这就是面向对象的编程的魅力所在!

完全相似的操作(unbelievable):

自学java,请多多指教!
原文地址:https://www.cnblogs.com/fanfada/p/13767422.html