• 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,请多多指教!
  • 相关阅读:
    C#知识点总结系列:5、CLR的组成和运转
    SQL知识整理三:变量、全局变量、视图、事务、异常
    SQL知识整理二:锁、游标、索引
    SQL知识整理一:触发器、存储过程、表变量、临时表
    TFS二次开发系列:六、TFS的版本控制
    TFS二次开发系列:五、工作项查询
    TFS二次开发系列:四、TFS二次开发WorkItem添加和修改、保存
    TFS二次开发系列:三、TFS二次开发的第一个实例
    TFS二次开发系列:二、TFS的安装
    TFS二次开发系列:一、TFS体系结构和概念
  • 原文地址:https://www.cnblogs.com/fanfada/p/13767422.html
Copyright © 2020-2023  润新知