首页 > 编程语言 >面向对象编程基础

面向对象编程基础

时间:2024-01-14 17:56:04浏览次数:22  
标签:int 基础 对象 参数 面向对象编程 方法 public 属性

类和对象的区别和联系

类是抽象的,概念的,代表一类事物,比如人类,猫类.., 即它是数据类型.

对象是具体的,实际的,代表一个具体事物, 即 是实例.

类是对象的模板,对象是类的一个个体,对应一个实例

image

属性,成员变量,字段

成员变量 = 属性 = field(字段) (即 成员变量是用来表示属性的,统一叫属性

属性是类的一个组成部分,一般是基本数据类型,也可是引用类型(对象,数组)。比如我们前面定义猫类的int age就是属性

属性的定义语法同变量,示例:访问修饰符 属性类型 属性名; 这里老师简单的介绍访问修饰符: 控制属性的访问范围 有四种访问修饰符 public, proctected, 默认, private ,后面我会详细介绍

属性的定义类型可以为任意类型,包含基本类型或引用类型

属性如果不赋值,有默认值,规则和数组一致。具体说: int 0,short 0, byte 0, long 0, float 0.0,double 0.0,char \u0000,boolean false,String null

创建对象

先声明再创建 Cat cat ; //声明对象 cat cat = new Cat();

//创建 2) 直接创建 Cat cat = new Cat();

访问属性

基本语法 对象名.属性名; 案例演示赋值和输出 cat.name ; cat.age; cat.color;

类和对象的内存分配机制(重要) 看一个思考题 我们定义一个人类(Person)(包括 名字,年龄)。

类和对象的内存分配机制

Java 内存的结构分析

  1. 栈: 一般存放基本数据类型(局部变量)
  2. 堆: 存放对象(Cat cat , 数组等)
  3. 方法区:常量池(常量,比如字符串), 类加载信息

\1) 先加载 Person 类信息(属性和方法信息, 只会加载一次)

在堆中分配空间, 进行默认初始化(看规则)

把地址赋给 p , p 就指向对象

进行指定初始化, 比如 p.name =”jack” p.age = 10

成员方法

public void speak() { 
    System.out.println("一个好人");}
//成员方法的好处
//1) 提高代码的复用性
//2) 可以将实现的细节封装起来,然后供其他用户来调用即可
/*
成员方法的定义
访问修饰符 返回数据类型 方法名(形参列表..) {//方法体
语句;
return 返回值;
}
*/

image

image

成员方法传参机制(非常重要)

结论:基本数据类型,传递的是值(值拷贝),形参的任何改变不影响实参

引用数据类型的传参机制(数组,对象...)

引用类型传递的是地址(传递也是值,但是值是地址),可以通过形参影响实参!

方法的递归(非常重要)

简单的说: 递归就是方法自己调用自己,每次调用时传入不同的变量.递归有助于编程者解决复杂问题,同时可以让代码变得简洁

1) 打印问题
2) 阶乘问题
代码
public class Recursion01 {
//编写一个 main 方法
public static void main(String[] args) {
T t1 = new T();
t1.test(4);//输出什么? n=2 n=3 n=4
int res = t1.factorial(5);
System.out.println("5 的阶乘 res =" + res);
}
}
class T {
//分析
public void test(int n) {
if (n > 2) {
test(n - 1);
}
System.out.println("n=" + n);
}
//factorial 阶乘
public int factorial(int n) {
if (n == 1) {
return 1;
} else {
return factorial(n - 1) * n;
}
}
}

image

image

方法重载

java 中允许同一个类中,多个同名方法的存在,但要求 形参列表不一致!

image

可变参数

java 允许将同一个类中多个同名同功能但参数个数不同的方法,封装成一个方法。 就可以通过可变参数实现

语法:

访问修饰符 返回类型 方法名(数据类型... 形参名) { }

//1. int... 表示接受的是可变参数,类型是 int ,即可以接收多个 int(0-多)
//2. 使用可变参数时,可以当做数组来使用 即 nums 可以当做数组
//3. 遍历 nums 求和即可
public int sum(int... nums) {
//System.out.println("接收的参数个数=" + nums.length);
int res = 0;
for(int i = 0; i < nums.length; i++) {
res += nums[i];
}
return res;
}

1)可变参数的实参可以为0个或任意多个。

2)可变参数的实参可以为数组。
3)可变参数的本质就是数组.
4)可变参数可以和普通类型的参数一起放在形参列表,但必须保证可变参数在最后5)一个形参列表中只能出现一个可变参数

作用域

1.在java编程中,主要的变量就是属性(成员变量)和局部变量。
2我们说的局部变量一般是指在成员方法中定义的变量。【举例Cat类: cry】

3.java中作用域的分类
全局变量:也就是属性,作用域为整个类体Cat类: cry eat等方法使用属性【举例】
局部变量;也就是除了属性之外的其他变量,作用域为定义它的代码块中!全局变量(属性)可以不赋值,直接使用,因为有默认值,局部变量必须赋值后,才能使用,因为没有默认值。[举例]

image

构造方法、构造器

语法:

  1. [修饰符] 方法名(形参列表)
  2. 构造器的修饰符可以默认, 也可以是 public protected private
  3. 构造器没有返回值
  4. 方法名 和类名字必须一样
  5. 参数列表 和 成员方法一样的规则
  6. 构造器的调用, 由系统完成

构造方法又叫构造器(constructor),是类的一种特殊的方法,它的主要作用是完成对新对象的初始化。它有几个特点:1) 方法名和类名相同 2) 没有返回值 3) 在创建对象时,系统会自动的调用该类的构造器完成对象的初始化。

image

this关键字

this代表当前对象

this:哪个对象调用,就代表哪个对象

this 关键字可以用来访问本类的属性、方法、构造器

this 用于区分当前类的属性和局部变量

访问成员方法的语法:this.方法名(参数列表);

访问构造器语法:this(参数列表); 注意只能在构造器中使用(即只能在构造器中访问另外一个构造器, 必须放在第一条语句)

this 不能在类定义的外部使用,只能在类定义的方法中使用。

标签:int,基础,对象,参数,面向对象编程,方法,public,属性
From: https://www.cnblogs.com/zfDr-dr/p/17963984

相关文章

  • k8s教程----零基础快速入门
    k8s详解教程----零基础快速入门前言:Kubernetes(k8s)作为云原生的核心平台,吸引了越来越多的运维、开发、测试以及其他技术员去了解学习。随着行业越来越内卷,k8s已经被广泛使用,作为一名运维人员,k8s将成为一个必须掌握的技术点,同时,我们也可以依靠它跳槽涨薪。一、什么是K8s它前......
  • 【JAVA基础】Java项目开发工具之Maven
    JAVA开发工具IDE有哪些?eclipce、idea、vscode等等IDEA比Eclipse更强大和高效。IDEA提供了更好的代码补全和重构功能,更好的代码导航和搜索功能,以及更好的支持多模块项目和多语言开发等。构建项目工具构建项目工具有哪些?Maven、Gradle、Ant等Maven管理和构建项目以及维护......
  • 多项式基础
    FFT/NTT板子,就不说了。分治FFT给定序列\(g_{1\dotsn-1}\),求序列\(f_{0\dotsn-1}\)。其中\(f_i=\sum_{j=1}^if_{i-j}g_j\),边界为\(f_0=1\)。Solution1朴素地做是\(\mathcal{O}(n^2)\)的。观察到后面的项依赖前面的项。于是我们可以考虑用cdq分治实现。具体......
  • Json Schema介绍 和 .net 下的实践 - 基于Lateapexearlyspeed.Json.Schema - 基础1 -
    本系列旨在介绍JsonSchema的常见用法,以及.net实现库Lateapexearlyspeed.Json.Schema的使用这篇文章将介绍JsonSchema中的type关键字,和string类型的常见验证功能。用例基于.net的LateApexEarlySpeed.Json.Schemanugetpackage。这是新创建的一个JsonSchema在.net下的高性能......
  • 存储基础:ATA、SATA、SCSI、SAS、FC
    一、概述关于存储,作为一名运维工程师我觉得是很有必要去花点时间去了解一下的!磁盘是服务器、存储设备的主要存储媒介之一,非常重要!按照存储介质类型一般分为机械磁盘(HDD、传统磁性硬盘)、固态磁盘(SSD,主要使用闪存颗粒来存储)、混合磁盘(HHD,磁性硬盘和闪存集成到一起的硬盘)。按照接口......
  • 【scikit-learn基础】--『监督学习』之 均值聚类
    聚类算法属于无监督学习,其中最常见的是均值聚类,scikit-learn中,有两种常用的均值聚类算法:一种是有名的K-means(也就是K-均值)聚类算法,这个算法几乎是学习聚类必会提到的算法;另一个是均值偏移聚类,它与K-means各有千秋,只是针对的应用场景不太一样,但是知名度远不如K-Means。本篇介绍如......
  • Asp.Net怎么上传图片-基础教程
    aspx页面script方法内用于判断用户上传的文件是否为自己要求的格式和展示图片的方法body内定义一个图片框用于预览用户上传的图片一个上传文件的控件一个提交按钮代码如下Script代码:$(function(){$('#uploadImage').on('change',function(){var......
  • 【Shell基础】Bash基础与Linux三剑客
    shell是什么?可以做哪些?Shell是⼀种解释性的语⾔,适⽤于基本的逻辑处理和不追求速度的应⽤。用于:人机交互批处理Unix、Linux、Mac、Android、IOS脚本自动化工作场景服务端测试移动测试持续集成与自动化部署shell种类bashshzshwindows没有/etc/shells,需要安......
  • 跟着阿灵学前端(1)——HTML 基础
    1.html排版标签标签名标签含义单/双标签h1~h6标题双p段落双div块,没有任何含义,用于整体布局(生活中的包装袋)双注意:1、一个页面只能有一个h1,可以有多个h2-h6,h标签不允许互相嵌套。2、p标签很特殊,里面不能有p、div、h1~h6标签,会自定甩出来自动前后补全......
  • 跟着阿灵学前端(2)——CSS 基础
    1.CSS简介CSS的全称为:层叠样式表(CascadingStyleSheets)。CSS也是一种标记语言。用于给HTML结构设置样式,例如:文字大小,颜色,元素宽高等等。简单理解:CSS可以美化HTML,让HTML更漂亮。核心思想:HTML搭建结构,CSS添加样式,实现了:结构与样式的分离。2.CSS的编写位置2.1行......