Java学习 面向对象编程

Posted 泊而至远

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java学习 面向对象编程相关的知识,希望对你有一定的参考价值。

一、理解面向对象

结构化程序设计

1、程序=算法+数据结构

2、算法第一,数据结构第二

 

二、面向对象程序设计OOP

1、程序=对象+对象+…

2、据第一,算法第二

3、关键:让每个对象负责执行一组相关任务

 

三、面向对象编程的特性

1、万物皆对象

2、程序是一组对象彼此之间在发送消息

3、每个对象都有自己的内存占用,可以组装成更大的对象

4、每个对象都有类型,特定对象的所有类型都可以接收相同消息

 

四、类和对象的概念、区别和联系

概念:

类①类是创建对象的模板和蓝图②类是一组类似对象的共同抽象定义

对象①对象是类的实例化结果②对象是实实在在的存在,代表现实世界的某一事物

对象的两个关键特性①行为:对象能干什么②状态:对象的属性,行为的结果

区别:①类是静态定义②对象是动态实例③程序代码操作的是对象而非类④建模得到的事类而非对象

联系:①类是对象的定义②对象的产生离不开类的建模③类存在的目的是实例化得到对象

 

五、类的建模:抽象和封装的过程

定义一个类的步骤:①定义类名②编写字段代表属性③编写类的方法代表行为

类的建模是一个抽象和封装的过程

抽象:去掉不关注的、次要信息而保留重要的信息

封装:信息打包,简单来说:将抽象出来的属性和行为包装在一个类中。

 

案例:学生类建模

案例介绍:编写一个学生类,描述具有一定行为和属性的学生对象

案例设计:①建模一个学生类②定义一系列字段来描述学生的属性③定义一系列方法来描述学生的行为

技术分享
 1 public class Student
 2 {
 3     public String number;
 4     public String name;
 5     public int age;
 6     public String major;
 7     
 8     //上课方法
 9     public void attendClass(){
10         
11     }
12     
13     public void exan(){
14         
15     }
16 }
View Code

 

六、对象的创建和使用

创建并使用对象:使用new关键字创建对象

示例:

public class Example()

{

         int field1;

         double field2;

         public class void main(String []args)

         {

                   Example e=new Example();

    }

}

 

使用成员访问符“.”操作对象

给对象属性赋值:对象名.属性

对对象发送消息即调用方法:对象名.方法()

示例:

Example e=new Example();

e.field1=100;

e.field2=200.0;

System.out.println(e.toString());

代码举例

技术分享
 1 public class Dog
 2 {
 3     public String brand;//品种
 4     public int age;//年龄
 5     //方法
 6     public String toString(){
 7         return "这是一条"+age+"岁的"+brand;
 8     }
 9     
10     public static void main(String []args){
11         Dog dog=new Dog();//构造了一个Dog类的对象
12         dog.brand="中华田园犬";
13         dog.age=3;
14         System.out.println(dog.toString());    
15     }
16 }
View Code

 

七、方法的定义和调用

类的方法代表的是实例的某种行为(或功能)

方法定义:方法类型,方法签名(方法名+参数列表),方法体

定义类的方法

访问修饰符 类型 方法名(参数列表){

         //方法体

}

可以把方法当做是一个模块,是个“黑匣子”,完成某个特定的功能,并返回处理结果

方法分类:①返回值为(空)void的方法②带具体返回类型的方法③不带参数的方法④带参数的方法

方法返回值:如果方法有返回值,方法中必须使用关键字return返回该值,返回值类型为该方法所定义的返回值类型

☆方法内可以调用其他方法

调用带参数的方法采用的是值传递方式:①如果参数是基本数据类型,参数传递是将参数的数值传递给方法②如果参数是对象或数组,参数传递是将对象或数组的引用值传递给方法③递参数时都有一个值拷贝的过程

void method1(){

         …

         …

         method2(1,2.0);//方法调用,传入实参(1,2.0)

}

method2(int i,double d){

     //i和d表示形参,调用了之后i=1;d=2.0;传参的时候数据类型必须一致

         …

         …

}

技术分享
public class MethodDemo
{
    public void method1(){
        System.out.println("返回类型为空且无参数的方法");
    }
    
    public String method2(){
        return "带有具体返回类型且无参数的方法";
    }
    
    public void method3(String name){
        System.out.println("返回类型为空且带有参数的方法,参数的值为"+name);
    }
    
    public String method4(String name,int age){
        return "带有具体返回类型且带有参数的方法,参数的值为"+name+","+age;
    }
    
    //传递基本数据类型
    public void operatorData(int age){
        //这里的age是定义在外面的age拷贝值,并不是外面的age+1;
        age++;
        System.out.println("方法中的age:"+age);
    }
    
    //传递引用数据类型的方法
    public void operatorArray(int[] array){
        array[2]=100;
        System.out.println("方法中的array[2]:"+array[2]);
    }
    
    public static void main(String []args){
        MethodDemo demo=new MethodDemo();
        demo.method1();
        String msg=demo.method2();
        System.out.println(msg);
        demo.method3("张三");
        System.out.println(demo.method4("张三",20));
        
        int age=20;
        demo.operatorData(age);
        System.out.println("方法外的age:"+age);
        
        int[] array={1,2,3,4};
        demo.operatorArray(array);
        System.out.println("方法外的array[2]:"+array[2]);
    } 
}
View Code

上述代码中

传递基本数据类型时方法内与方法外的值分别为11与10

传递引用数据类型时方法内与方法外的值都为100

区别分析:

基本数据类型在内存中存放在栈内存中,当使用int时开辟一个栈帧(age),调用方法后又产生了一个栈帧(age),方法内操作的是第二个,当调用完方法之后第二个age出栈了,但第二个age改变了值并打印,未影响到第一个age,主方法中继续打印输出age(此时是第一个age);引用数据类型使用array时开辟一个栈帧(array),指向堆中的内存空间,调用方法后又产生了一个栈帧(array),由第一个array传递过来(地址),也指向了堆中的内存空间,方法内操作的是第二个,当调用完方法之后第二个array出栈了,指向的堆中的内存空间中的数组array[2]中的值改变了,所以2个array[2]输出的是相同的值。

主要区别就是基本数据类型存放在栈中,而引用数据类型只是将地址存放在栈中,真正的值存放在堆中。例如int[] a=new int[5]; 其中a存放在栈中,a只是一个引用,栈中放的数组的地址,真正的数组是放在堆中的。

 

八、变量的作用域

public class Example(){

         public 类型 变量1;

         public 类型 变量2;

         public 类型 方法1(){

                   类型 变量3;

}

public 类型 方法2(){

                   类型 变量4;

}

}

 

上面的例子中变量3和变量4为局部变量,变量3只能在方法1中使用,变量4 只能在方法2中使用。变量1和变量2是成员变量(属性),在方法1与方法2中都能使用。

 

持续更新......

以上是关于Java学习 面向对象编程的主要内容,如果未能解决你的问题,请参考以下文章

JAVA学习:Java面向对象编程基础

Java面向对象学习目录

Java学习 面向对象编程

java面向对象编程(上)

《2019面向对象程序设计(java)课程学习进度条》

python自动化开发学习第七天