当前位置: 首页 > news >正文

从初学者到专家:Java方法的完整指南

目录

一.方法的概念及使用

1.1什么是方法

1.2方法的定义

1.3方法的调用

 1.4实参和形参的关系

1.5没有返回值的方法

1.6方法的意义 

二.方法重载

2.1方法重载的实现

2.2方法重载的意义

2.3方法签名


 

 

一.方法的概念及使用

1.1什么是方法

方法就是一个代码片段. 类似于 C 语言中的 "函数",来实现特定的功能,我们输入相关代码进去到方法中,让方法帮我们完成功能。其中涉及到方法的定义,调用,执行。

举几个简单的例子:

  1. 烹饪食物:将烹饪食物比作一个方法。你有一个菜谱(方法定义),其中包含了烹饪特定菜肴的步骤。当你想要做同样的菜肴时,你可以根据菜谱的指导(调用方法)来准备食材、进行烹饪,并最终获得可口的菜肴。

  2. 打电话:将打电话比作一个方法。当你想要与某人进行通话时,你需要输入对方的电话号码(方法参数),然后按下拨号键(调用方法)。电话网路会连接你和对方,你可以进行交流并传递信息。

  3. 洗衣服:将洗衣服比作一个方法。当你需要清洗衣物时,你将衣物放入洗衣机中(方法参数),选择适当的程序和洗涤剂(方法调用),然后启动洗衣机(执行方法)。最终,你将得到干净的衣物。

在这些例子中,方法提供了一种可重复使用的方式来执行特定的任务。它们接受输入(参数),执行一系列操作,并产生输出(结果)。这样的抽象使得我们可以更有效地组织和重用我们的行动,就像在编程中使用方法一样。


1.2方法的定义

方法的定义由以下几个组成部分:

  1. 访问修饰符(Access Modifier):用于控制其他类是否可以访问该方法。常见的访问修饰符包括public、private、protected和默认(不使用任何修饰符)。

  2. 返回类型(Return Type):指定方法执行完后返回的数据类型。如果方法不返回任何值,可以使用关键字void。

  3. 方法名称(Method Name):用于唯一标识方法的名称。方法名应该具有描述性,能够清晰地表达方法的功能。

  4. 参数列表(Parameter List):指定方法接受的输入参数。参数是方法执行所需的数据,可以有多个参数,并且每个参数都有其数据类型和名称。

  5. 方法体(Method Body):包含实际的代码块,定义了方法要执行的操作。方法体由一对花括号{}包围,其中包含了一系列的语句和逻辑。

  6. 返回语句(Return Statement):如果方法有返回类型,它可以使用return语句将结果返回给调用者。return语句也可以提前终止方法的执行。

在代码块实现是这样:

// 方法定义
修饰符 返回值类型 方法名称([参数类型 形参 ...]){
方法体代码;
[return 返回值];
}

比如一个简单的代码:

public int Sum(int num1, int num2) {int sum = num1 + num2;return sum;}

在上述例子中,方法名为"Sum",返回类型为int(返回整数)。它有两个参数num1和num2,都是整数类型。方法体中的代码将num1和num2相加,将结果存储在sum变量中,并使用return语句返回sum的值。

注意事项:

1. 修饰符:现阶段直接使用public static 固定搭配
2. 返回值类型:如果方法有返回值,返回值类型必须要与返回的实体类型一致,如果没有回值,必须写成 void
3. 方法名字:采用小驼峰命名
4. 参数列表:如果方法没有参数,()中什么都不写,如果有参数,需指定参数类型,多个参数之间使用逗号隔开
5. 方法体:方法内部要执行的语句
6. 在java当中,方法必须写在类当中
7. 在java当中,方法不能嵌套定义
8. 在java当中,没有方法声明一说

 

1.3方法的调用

调用一个方法,你需要按照以下格式编写代码:

返回值类型 变量名 = 方法名(参数列表);

具体步骤如下:

  1. 使用方法的返回值类型声明一个变量,该变量将用于存储方法的返回结果。如果方法没有返回值(即返回类型为void),则不需要声明变量。

  2. 在等号左侧的变量名处,给变量取一个合适的名称,以便在后续的代码中引用该变量。

  3. 在等号右侧,写上要调用的方法名,并在括号内传递方法所需的参数。根据方法的定义,确保传递正确的参数类型和数量。

  4. 调用方法后,方法将执行其定义的操作,并返回一个结果(如果有返回值)。

简单的代码示例如下:求两数之和

// 定义一个名为Sum的方法,计算两个整数的和
public static int calculateSum(int num1, int num2) {int sum = num1 + num2;return sum;
}// 在主程序中调用Sum方法
public static void main(String[] args) {int result = calculateSum(3, 5); // 调用calculateSum方法,并传入参数3和5System.out.println("Sum: " + result); // 打印结果:Sum: 8
}

输出代码如下: 

在上述示例中,我们定义了一个名为"calculateSum"的方法,用于计算两个整数的和。在主程序的main方法中,我们调用calculateSum方法,并传递参数3和5。方法执行后,返回结果8被赋值给result变量,并通过打印语句输出到控制台。 

 注意事项:

1.定义方法的时候, 不会执行方法的代码. 只有调用的时候才会执行.
2.一个方法可以被多次调用.

 

 1.4实参和形参的关系

在方法的定义和调用中,有两种类型的参数:形式参数(形参)和实际参数(实参)。

  1. 形式参数(形参)是在方法定义中声明的参数,用于接收方法调用时传递的值。形参相当于方法内部的局部变量,只在方法内部有效。形参在方法定义时指定其数据类型和名称。
  2. 实际参数(实参)是在方法调用时传递给方法的具体值或变量。实参是根据方法定义中形参的顺序进行传递的,并且必须与形参的类型相匹配。实参可以是常量、变量或表达式的值。
  3. 当方法被调用时,实参的值会被传递给对应的形参。这样,在方法内部,形参就可以使用传递进来的实参值进行操作。

举一个生活的例子理解:

假设你有一家制造汽车的工厂,你有一个汽车生产线,用于生产汽车。在这个例子中:

- 形式参数(形参):汽车设计图纸和规格说明书。设计图纸和规格说明书中包含了汽车的尺寸、配件要求和装配顺序等信息,相当于方法定义中声明的参数。这些信息并不是实际的汽车,只是用来描述要生产的汽车。

- 实际参数(实参):你根据设计图纸和规格说明书实际生产的汽车。这些实际的汽车是你根据设计图纸和规格说明书进行加工和装配的,相当于方法调用时传递给方法的具体值或变量。你根据设计图纸和规格说明书,使用零件和装配工具将汽车逐步加工和组装,最终得到实际的汽车。

当你将设计图纸和规格说明书交给工人时,他们会根据这些信息开始生产汽车。他们会根据设计图纸上的尺寸和配件要求,按照规定的装配顺序,使用实际的零件和工具进行加工和装配。在这个过程中,设计图纸和规格说明书充当了形参,而实际生产的汽车充当了实参。工人根据实际的设计图纸和规格说明书来进行加工和装配,最终生产出实际的汽车。

如下图:

 

还是举回上面的例子

// 定义一个名为Sum的方法,计算两个整数的和
public static int calculateSum(int num1, int num2) {int sum = num1 + num2;return sum;
}// 在主程序中调用Sum方法
public static void main(String[] args) {int result = calculateSum(3, 5); // 调用calculateSum方法,并传入参数3和5System.out.println("Sum: " + result); // 打印结果:Sum: 8
}

 定义的calculatesSum方法中,num1 和num2是形参,主函数main中调用时存放的两个数字3,5就是实参。


实参的值永远都是拷贝到形参中,形参和实参本质是两个实体。

用一段代码解释 :交换两个整数

public class TestMethod {
public static void main(String[] args) {int a = 10;int b = 20;swap(a, b);
System.out.println("main: a = " + a + " b = " + b);}public static void swap(int x, int y) {int tmp = x;x = y;y = tmp;System.out.println("swap: x = " + x + " y = " + y);}
}
// 运行结果
swap: x = 20 y = 10
main: a = 10 b = 20
可以看到,在 swap 函数交换之后,形参 x y 的值发生了改变,但是 main 方法中 a b 还是交换之前的值,即没有交换成功。为什么呢?
因为  实参 a b main 方法中的两个变量,其空间在 main 方法的栈 ( 一块特殊的内存空间 ) 中,而形参 x y swap 方法中 的两个变量,x y 的空间在 swap 方法运行时的栈中,因此:实参 a b 与 形参 x y 是两个没有任何关联性的变量, swap 方法调用时,只是将实参 a b 中的值拷贝了一份传递给了形参 x y ,因此对形参 x y 操作不会对实参 a b 产生任何影响。

 


1.5没有返回值的方法

没有返回值的方法是指在方法定义中,方法声明的返回类型为`void`,表示该方法不返回任何值。

public void printMessage(String message) {System.out.println(message);
}

在上述示例中,`printMessage`是一个没有返回值的方法。它接受一个字符串形参“message”,并将该字符串打印到控制台上。

当调用没有返回值的方法时,方法内部执行相应的操作,但不会返回任何值给调用者。在上述例子中,当调用`printMessage`方法并传递一个字符串实参时,方法会打印该字符串,但不会返回任何结果。

没有返回值的方法通常用于执行某些操作或完成特定任务,而无需返回结果。例如,打印信息、更新数据、发送通知等。这样的方法对程序的执行起到了一种"副作用"的作用,即修改了程序状态或执行了特定的操作,但不产生可用于后续计算的返回值。

在调用没有返回值的方法时,通常仅关注方法执行的效果,而不需要接收方法的返回结果。

注意:

  1. 形参的名字可以随意取,对方法都没有任何影响
  2. 形参只是方法在定义时需要借助的一个变量,用来保存方法在调用时传递过来的值
  3. Java 中,实参的值永远都是拷贝到形参中,形参和实参本质是两个实体

 

1.6方法的意义 

1. 模块化和代码复用:方法将一系列相关的操作封装在一起,形成一个独立的模块。这有助于提高代码的可读性、可维护性和可重用性。

2. 抽象和封装:方法允许开发人员将程序的逻辑和实现细节隐藏在方法内部,只暴露必要的接口和功能给外部调用者。

3. 提高代码的可维护性和可读性:通过使用方法,将代码分解成多个小的、独立的功能块,使得代码更易于理解和维护。

4. 提高代码的灵活性和可扩展性:方法可以接受参数并返回结果,使得代码能够根据不同的输入产生不同的输出。

5. 实现面向对象的特性:方法是面向对象编程的基本构建块之一。通过方法,可以实现封装、继承和多态等面向对象的特性。

总之,方法在面向对象编程中具有重要的意义。它们帮助我们将代码组织成模块化、可维护和可复用的单元,提高了代码的可读性、可扩展性和可维护性。方法也是实现面向对象的特性的基础,使得我们能够更好地利用面向对象编程的优势。


 

二.方法重载

2.1方法重载的实现

 方法重载是指在同一个类中定义多个方法,它们具有相同的名称但拥有不同的参数列表。通过方法重载,可以根据不同的参数类型和数量来调用相应的方法,从而实现相似功能的多个方法。

举例代码如下:

public class Calculator {public static int add(int a, int b) {return a + b;}public double add(double a, double b) {return a + b;}public int add(int a, int b, int c) {return a + b + c;}
}

在以上代码中, Calculator类定义了三个名为add的方法,它们具有相同的名称但参数列表不同。第一个add方法接收两个整数作为参数,并返回它们的和。第二个add方法接收两个双精度浮点数作为参数,并返回它们的和。第三个add方法接收三个整数作为参数,并返回它们的和。

通过方法重载,我们可以根据需要选择合适的方法来执行相加操作。例如:

Calculator calculator = new Calculator();
int result1 = calculator.add(2, 3);                  // 调用第一个add方法,返回5
double result2 = calculator.add(2.5, 3.5);           // 调用第二个add方法,返回6.0
int result3 = calculator.add(2, 3, 4);               // 调用第三个add方法,返回9

通过传递不同的参数类型和数量,我们可以正确地调用适合的方法,实现了根据不同参数进行加法操作的灵活性。

注意:

1. 方法名必须相同
2. 参数列表必须不同(参数的个数不同、参数的类型不同、类型的次序必须不同)
3. 与返回值类型是否相同无关
// 注意:两个方法如果仅仅只是因为返回值类型不同,是不能构成重载的
public class TestMethod {
public static void main(String[] args) {int a = 10;int b = 20;int ret = add(a, b);System.out.println("ret = " + ret);
}public static int add(int x, int y) {return x + y;
}public static double add(int x, int y) {return x + y;
}}
// 编译出错
Test.java:13: 错误: 已在类 Test中定义了方法 add(int,int)
public static double add(int x, int y) {^
1 个错误


 

2.2方法重载的意义

  1. 提高代码可读性和可维护性

  2. 优化代码结构和设计

  3. 方便调用和使用

  4. 提高代码的兼容性

总之:方法重载在面向对象编程中具有重要的意义,它提供了更灵活、可读性更高、可维护性更好的代码编写方式,使得代码的设计和调用更加方便和易于理解。


2.3方法签名

我们知道,在Java中,在同一个作用域中不能定义两个相同名称的标识符。比如:方法中不能定义两个名字一样的变量,那为什么类中就可以定义方法名相同的方法呢?

这就涉及到方法签名:经过编译器编译修改过之后方法最终的名字。

具体方式: 方法全路径名 + 参数列表 + 返回值类型,构成 方法完整的名字。

比如以下代码:

public class TestMethod {public static int add(int x, int y){return x + y;}public static double add(double x, double y){return x + y;}public static void main(String[] args) {add(1,2);add(1.5, 2.5);}
}

上述代码经过编译之后,然后使用JDK自带的javap反汇编工具查看,具体操作:

1. 先对工程进行编译生成 .class 字节码文件
2. 在控制台中进入到要查看的 .class 所在的目录
3. 输入: javap -v 字节码文件名字即可 

 

方法签名中的一些特殊符号说明:

 


 

好了,到这里就结束了,如果有什么错误的地方请在评论区指出,谢谢。

创作不易,如果可以的的话,请大家多三连支持一下下。虎杖悠仁同学会很赞同的。

 

 

相关文章:

从初学者到专家:Java方法的完整指南

目录 一.方法的概念及使用 1.1什么是方法 1.2方法的定义 1.3方法的调用 1.4实参和形参的关系 1.5没有返回值的方法 1.6方法的意义 二.方法重载 2.1方法重载的实现 2.2方法重载的意义 2.3方法签名 一.方法的概念及使用 1.1什么是方法 方法就是一个代码片段. 类似于 …...

【生成式AI】ProlificDreamer论文阅读

ProlificDreamer 论文阅读 Project指路:https://ml.cs.tsinghua.edu.cn/prolificdreamer/ 论文简介:截止2023/8/10,text-to-3D的baseline SOTA,提出了VSD优化方法 前置芝士:text-to-3D任务简介 text-to-3D Problem text-to-3D…...

C++元编程——模拟javascript异步执行

javascript有一个期约调用,就是利用内部的一种协程机制实现的类似并行的操作。以下是用ChatGPT搞出来的一块演示代码: // 异步任务 function asyncTask() {return new Promise((resolve, reject) > {setTimeout(() > {const randomNumber Math.f…...

【JavaEE】懒人的福音-MyBatis框架—复杂的操作-动态SQL

【JavaEE】MyBatis框架要点总结(3) 文章目录 【JavaEE】MyBatis框架要点总结(3)1. 多表查询1.1 映射表resultMap1.2 只有部分属性跨表查询1.2.1 依照常规去写代码1.2.2 用标签去实现接口 1.3 分多步的解决方案1.4 与多线程的结合 …...

Springboot 默认路径说明

Spring Boot基本上是Spring框架的扩展,它消除了设置Spring应用程序所需的样板配置,极大的方便了开发者,其默认识别路径如下: Spring Boot 作为Spring默认将 /** 所有访问映射到以下目录: 1、classpath:/static 用于加…...

springboot注册拦截器与返回统一标准响应格式

响应对象ResultVO package com.example.poi.utils;import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;import java.io.Serializable;/*** A…...

卷王特斯拉又全网降价了,卷死车企们

哈喽,大家好,今天媒介盒子小编又来跟大家分享软文推广的干货知识了,本篇分享的主要内容是:特斯无孔不入的营销手段。 1、特斯拉Model Y降价 车企要打架 自2023 年 8 月 14 日起,Model Y 长续航版起售价从 31.39 万元调整为 29.99 万元,Mode…...

wiley:revision 流程

1 上传修改后的word文件 注意:包括没标注修改位置的word文件和标注了修改位置的word文件 2 上传response回复文件 Your Author Response should include relevant comments that you have copied from the decision letter, along with your comments detailing …...

【论文阅读】基于深度学习的时序预测——Pyraformer

系列文章链接 论文一:2020 Informer:长时序数据预测 论文二:2021 Autoformer:长序列数据预测 论文三:2022 FEDformer:长序列数据预测 论文四:2022 Non-Stationary Transformers:非平…...

玩转IndexedDB,比localStorage、cookie还要强大的网页端本地缓存

随着浏览器的功能不断增强,越来越多的网站开始考虑,将大量数据储存在客户端,这样可以减少从服务器获取数据,直接从本地获取数据。 现有的浏览器数据储存方案,都不适合储存大量数据:Cookie 的大小不超过 4K…...

RedisDesktopManager连不上redis问题解决(小白版)

常见问题就是 redis.conf配置文件 a.将port 127.0.0.1这一行注释掉 b.protected-mode保护模式改为no 这个可以看到很多博主都说了,相信都搜到这里来了你们都弄了,我就不详细说了 防火墙开放端口 我说明我自己的问题以及解决方法 1、执行telnet 虚拟…...

蓝帽杯 取证2022

网站取证 网站取证_1 下载附件 并解压 得到了一个文件以及一个压缩包 解压压缩包 用火绒查病毒 发现后门 打开文件路径之后 发现了一句话木马 解出flag 网站取证_2 让找数据库链接的明文密码 打开www文件找找 查看数据库配置文件/application/database.php(CodeI…...

MyBatis and or使用列表控制or条件

背景&#xff1a;最近项目需要&#xff0c;师傅可以查找订单&#xff0c;而师傅是指定可以服务2到3个区域&#xff0c;故需要使用到and, or条件的组合&#xff0c;以下记一下代码。 最重要的代码是&#xff1a; 1、构建List<Consumer<LambdaQueryWrapper<T>>&g…...

C语言刷题训练【第11天】

大家好&#xff0c;我是纪宁。 今天是C语言笔试刷题训练的第11天&#xff0c;加油&#xff01; 文章目录 1、声明以下变量&#xff0c;则表达式: ch/i (f*d – i) 的结果类型为&#xff08; &#xff09;2、关于代码的说法正确的是&#xff08; &#xff09;3、已知有如下各变…...

正则表达式的使用

1、正则表达式-教程 正则表达式&#xff1a;文本模式&#xff0c;包括普通字符&#xff08;例如&#xff0c;a到z之间的字母&#xff09;和特殊字符&#xff08;称为元字符&#xff09;。 正则表达式使用单个字符串来描述&#xff0c;匹配一系列匹配某个句法规则的字符串。 2、…...

PHP 求解两字符串所有公共子序列及最长公共子序列 支持多字节字符串

/*** 获取两字符串所有公共子序列【不连续的】 例&#xff1a;abc ac > ac** param string $str1 字符串1* param string $str2 字符串2** return array*/ function public_sequence(string $str1, string $str2): array {$data [[-1, -1, , 0, ]]; // 子序列容器【横坐标 …...

linux内核bitmap之setbit汇编实现

内核版本&#xff1a;kernel 0.12 首先看一段代码&#xff0c;下面这段代码来自内核版本0.12的mm/swap.c中&#xff1a; // mm/swap.c #define bitop(name,op) \static inline int name(char * addr,unsigned int nr) \ { \int __res; \__asm__ __volatile__("bt" …...

Golang设计模式

Golang设计模式 Golang设计模式简介Golang工厂设计模式Golang单例设计模式Golang抽象工厂设计模式Golang建造者模式 (Builder Pattern)Golang 原型模式(Prototype Pattern)Golang适配器模式Golang 桥接模式&#xff08;Bridge Pattern&#xff09;Golang装饰器模式(Decorator …...

leetcode151. 反转字符串中的单词

题目&#xff1a;leetcode151. 反转字符串中的单词 描述&#xff1a; 给你一个字符串 s &#xff0c;请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒且 单词 之间用单个空格连接的结…...

【BASH】回顾与知识点梳理(十七)

【BASH】回顾与知识点梳理 十七 十七. 什么是 Shell scripts17.1 干嘛学习 shell scripts自动化管理的重要依据追踪与管理系统的重要工作简单入侵检测功能连续指令单一化简易的数据处理跨平台支持与学习历程较短 17.2 第一支 script 的撰写与执行撰写第一支 script 17.3 撰写 s…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...