java基础知识--面向对象思想

本文围绕Java的类和对象展开。介绍了面向过程与面向对象的概念,阐述类是属性和行为集合、对象是类的实例。详细讲解类的定义、内存图解,对比成员变量和局部变量区别,还介绍封装性、this关键字、构造方法及标准类组成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

  • 面向过程:当需要实现一个功能的时候,每一个具体的步骤都要亲力亲为,详细处理每一个细
    节;
  • 面向对象:当需要实现一个功能的时候,不关心具体的步骤,而是找一个已经具有该功能的人
    (对象), 来帮我做事;

特点

封装、继承、多态

类和对象

  • 类:是一组相关属性和行为的集合。可以看成是一类事物的模板。
    属性:该事物的状态信息;
    行为:该事物能够做什么;
  • 类与对象的关系
    • 类是一类事物的描述,是抽象的;
    • 对象是一类事物的实例,是具体的;
    • 类是对象的模板,对象是类的实体

类的定义

  • 格式
    public class ClassName { //成员变量 //成员方法 }

一个对象的内存图解

一个对象内存图
1) Phone.class和Demo01PhoneOne.class加载进方法区;
2)main方法压栈;
3)new phone();在堆中创建phone对象,其中成员变量参考方法区引入堆中,赋默认值,而成员方法保存的是方法区中的地址值,再将
     堆中phone对象的地址值返回给栈中的one变量;
4)调用one.brand;
     根据one的找到堆中存放的brand变量,重新给brand赋值;
5)调用one.call(“乔布斯”);
     根据one找到堆中的成员方法,根据成员方法找到方法区的方法;
     将call()方法压栈;
     执行完call()方法弹栈,即出栈;
6)调用one.sendMessage()跟5)一样;
7)main()方法执行完后,弹栈,程序执行结束;

两个对象使用同一方法内存图解

  • 开辟两个对空间保存两个对象
    两个对象使用同一方法内存图

两个引用指向同一对象内存图解

两个引用指向同一对象内存图

使用对象类型作为方法的参数内存图解

注意:当一个对象作为参数时,传递到方法当中时,实际上传递进去的是对象的地址值
对象作为参数内存图解

  1. 当在main方法中调用method方法时,method方法先压栈;
    2)然后在main方法中先把one的地址值传给method的参数,即【1】;
    3)然后在将地址值传给method在栈中的实际存放空间,即【2】;
    4)在method方法中调用param对象(形参)时,再把地址值传给param对象(method方法里的实际对象),即【3】;

使用对象类型作为方法的返回值内存图解

注意:当使用一个对象类型作为方法的返回值时,返回值其实就是对象的地址值
对象类型作为方法返回值
1)getPhone方法先压栈;
2) 在堆中创建Phone对象,返回地址值给one;
3) one作为返回值传递给two;
4) two和one就指向了同一片堆内存;

成员变量和局部变量的区别

  • 定义的位置不一样【重要】
        - 局部变量:在方法的内部;
        - 成员变量:在方法的外部;
  • 作用范围不一样【重要】
        -局部变量:只有方法当中才可以使用,出了方法就不可以再使用;
        -成员变量:整个类全都可以使用;
  • 默认值不一样【重要】
        -局部变量:没有默认值,如果想使用,必须手动进行赋值
        -成员变量:如果没有赋值,会有默认值,规则和数组一样;
  • 内存的位置不一样(了解)
        -局部变量:位于栈内存;
        -成员变量:位于堆内存;
  • 生命周期不一样(了解)
        -局部变量:随着方法进栈而诞生,随着方法出栈而消失;
        -成员变量:随着对象创建而诞生,随着对象被垃圾回收而消失;
public void method(int num){  //方法的参数也是局部变量
     int age;
     System.out.println(age);//报错,局部变量age没赋初值
     System.out.println(num);//不会出错,参数在方法被调用的时候,必然会被赋值;
}

三大特征之封装性

  • 封装性在java中的体现
      - 方法就是一种封装;
      - 关键字private也是一种封装;
  • 封装就是将一些细节信息隐藏起来,对于外界不可见;

方法的封装

public static int getMax(int array){......};//方法的封装就是:你给我传一个数组参数进来,我就会返回你(main方法)一个最大值,
                                             //而具体方法里是怎样执行的,你并不用关心,你也看不见怎么执行;

private关键字的封装和使用

/* 
用private关键字将需要保护的成员变量进行修饰;
一旦使用了private进行了修饰,那么在本类当中仍然可以随意访问,但是超出本类范围就不能直接使用
 */

//间接访问private成员变量(超出本类范围),使用getXxx/setXxx方法;
//对于getXxx来说,不能有参数,返回值类型和成员变量对应;public int getAge{return age};
//对于setXxx来说,不能有返回值,参数类型和成员变量对应;public void setXxx(int age){age = age};
//注意:对于基本类型当中的boolean值,Get方法一定要写成isXxx的形式,set方法还是setXxx形式;

this关键字的作用

  • 当方法的局部变量和类的成员变量重名的时候,根据“就近原则”,优先使用局部变量;
  • 如果需要访问本类当中的成员变量,需要使用格式:this.成员变量名
  • 通过谁调用的方法,谁就是this;

构造方法

  • 构造方法是用来创建对象的方法,当我们通过关键字new来创建对象时,其实在调用构造方法
  • 格式:
    public 类名称(参数类型 参数名称){
    方法体;
    }
  • 注意事项
       -  构造方法名称和所在类名称完全一样,就连大小写也要一样;
       - 构造方法不要写返回值类型,连void都不写;
       -  如果没有编写任何构造方法,那么编译器会自动赠送一个构造方法,没有参数,方法体什么事情都不做;public Student(){};
       - 一旦编写了至少一个构造方法,那么编译器就不会赠送构造方法了;
       -  构造方法也是可以进行重载的,也就是一个类中可以定义多个构造方法;

一个标准类的组成

  • 所有的成员变量都需要使用private关键字修饰;
  • 为每一个成员变量生成一对getXxx和setXxx方法;
  • 编写一个无参数的构造方法;
  • 编写一个全参数的构造方法;(全参数及包含全部成员变量)
    这样的标准类也叫作:Java Bean
Java程序设计》课程实验指导书程序代码(答案)(实验一),个人原创,仅供参考与交流。 实验一 Java开发环境的安装与配置,熟悉Java程序结构 一、实验目的: 1. 掌握JDK的安装步骤。 2. 理解环境变量PATH, CLASSPATH的作用,以及它们的设置方法。 3. 熟悉Editplus(或TextPad,JCreator)编辑环境,编写简单的Application程序Applet程序,并编译执行。 二、实验内容: 熟悉JDK的安装配置,学习如何编写并运行简单的Application程序Applet程序(能输出一条简单的问候信息); 三、实验要求: 1. 能正确地安装JDK 2. 熟悉环境变量PATH, CLASSPATH设置方法,熟悉编辑环境 3. 调试程序、编译,运行后得到正确的结果 4. 写出实验报告,要求记录编译执行Java程序当中的系统错误信息提示,并给出解决办法。 四、实验步骤: 1.从http://java.sun.com 上下载最新版本的JDK,并安装。 2.设置环境变量PATH, CLASSPATH, 使得Java程序能正确编译执行。 3.在Editplus(或JCreator ,Textpad)环境下编写一个HelloWorld.java程序, (1)在主方法static public void main(String[ ] args)中调用System.out.println()方法,使程序输出一条问候信息; (2) 编译运行程序,观察运行情况输出结果。(使用JDK环境,调用javac.exejava.exe编译执行程序) 4.在Editplus(或JCreator ,Textpad)环境下编写一个HelloWorldApplet.java程序。 (1)在public void paint(Graphics g)方法中调用g.drawString()方法,使程序输出一条问候信息; (2) 编译运行程序,观察运行情况输出结果。(使用JDK环境,调用javac.exe编译浏览器解释执行Applet程序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值