配置java_home到底有啥用?为啥tomcat一定要配置它?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了配置java_home到底有啥用?为啥tomcat一定要配置它?相关的知识,希望对你有一定的参考价值。
学了好久的java了,到现在还没弄懂环境变量。我想问大家,tomcat一定要配置java_home吗?试了一下6.0版本的,这个版本的一定要配置环境变量,要不然在cmd下启动不了。不知大家知道其它版本是否用配置。
而且我不明白在我已经配置了path环境变量的情况下为什么还要在配置java_home,path=C:\Program Files\Java\jdk1.6.0_02 。
按道理来说配置java_home与配置path不是一个道理吗,tomcat不就是想要java的运行环境吗?从path里读不就行了吗?干嘛多此一举又增加个java_home呢?当然写tomcat的程序员比我厉害百倍,他这么写一定是有他的道理的。不过我想知道这么写有什么好处,所以想听听大家的想法。大篇的拷贝就不要往上贴了。谢谢大家了。
我是觉得这个问题值得研究我才去看它,而且我想知道我的想法对不对。我觉得tomcat如果要是只去读path的话,全世界的java程序员都会少配一个java_home,这不是很省事吗?
配置的原因只有1个,便于不同版本之间的切换!
打个比方:你装了3个TOMCAT有 5.0 5.5 6.0的这个时候你可以利用JAVAHOME对这3个TOMCAT分别访问安装部署!明白啦?
JDK TOMCAT SQL 等配置环境变量的目的都是一样的!“无需安装即可在,不同版本间的切换使用!”
就这样,不明白的就Hi我!本回答被提问者和网友采纳 参考技术B 你好:
我觉得一就是方便引用,比如我的环境变量就是
path=%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin
有的可能更多,你要是添全了特别长,你引用的时候容易弄错
又一次我重装了JAVA到别的目录,嘿嘿,改的时候就麻烦了,小心翼翼的总怕漏掉一个,你要使用了这个变量就该一个就行不会出错
还有Tomcat他的服务要用这个变量,有的第三方软件也要用这个变量,所以这个变量还是很必要的
祝你JAVA早日牛逼起来,呵呵 参考技术C 你看看tomcat文件夹里面bin目录中的setclasspath.bat文件
然后再研究研究其他几个启动用的bat文件就知道了,没有JAVA_HOME配置,tomcat是起不来的 参考技术D 不知道原理,就是想交流一下。、今天刚配了一个,Tomcat版本8.0,jdk版本是1.7,这个我没有配置JAVA_HOME,配置了path变量,JRE_HOME,以及新建了CATALINA_HOME变量,启动没有问题,主页也可以访问
为啥 malloc 返回一个指针?指针有啥用?
【中文标题】为啥 malloc 返回一个指针?指针有啥用?【英文标题】:Why malloc returns a pointer? What is the usefulness of pointers?为什么 malloc 返回一个指针?指针有什么用? 【发布时间】:2022-01-02 16:22:49 【问题描述】:我很难理解指针的用处。我已经阅读了类似问题的答案,但它们似乎并没有让我明白。
假设我们想要动态分配一些空间来使用变量,我们会做这样的事情:int *i = malloc(sizeof(int))
。我不明白为什么 C 的创建者觉得需要一个指针来完成这项工作。为什么他们没有 malloc 返回 (void) 类型的内存(如果这通常不可能,请纠正我)而不是 (void*) 指针指向该内存。其语法类似于int i = malloc(sizeof(int))
。
我知道这个问题可能很抽象,因为我没有解释我的大脑所需要的所有知识。如果我说的东西没有意义,请随时告诉我,以便我详细说明。提前谢谢!
【问题讨论】:
您不需要为示例中的单个变量使用malloc
,定义 int i;
就可以了,然后语法 int i = 42;
将分配一个初始化的 value 到i
.
@WeatherVane 我知道在特定情况下我有这个选项,但这并不能解释为什么在动态分配内存时需要在 C 中使用指针。
对于可变长度数组(如果支持),它们不是必需的。您可以定义int len = 42; int i[len];
来动态定义一个数组(并且您不必清理),但它的范围会受到限制。
@WeatherVane 你能告诉我在哪里可以阅读哪些是必要的案例吗?
指针的一个用处是,您可以通过指针传递信息,而不是信息本身。就像你写在纸上的家庭住址不是房子本身,而是它的位置。如果有大量数据,将其传递给您,则不需要复制该数据所需的资源开销:您只需要传递有关数据位置的信息(指针)。它还解决了当数据被修改时,它只存在于一个地方,您不必跟踪(和更新)所做的副本的问题。
【参考方案1】:
malloc
不知道内存分配给什么。
以向量的内存分配为例。
类似的东西
ptr = malloc(70 * sizeof(int));
你可以在那里写一些整数,然后读取相同的向量作为一个字符串。
指针的一个重要用途是通过间接进行高效编程。运行
#include <stdio.h>
int main()
int ref = 99;
int *a=&ref;
int *b=a;
printf("a:%d b:%d ref:%d\n", *a,*b,ref);
*a = 100;
printf("a:%d b:%d ref:%d\n", *a,*b,ref);
return 0;
看看会发生什么。 在大型向量处理应用程序中,一次更改更多值会带来性能提升。
【讨论】:
我们可以选择像字符一样读取int
变量,即使我们动态分配它。假设我们初始化int a = malloc(sizeof(int))
,在这种情况下,分配不会以我们可以读取a
的方式限制我们。
在这种情况下分配的内存没有被使用。
你不应该转换malloc
的结果:***.com/questions/605845
正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。
我想证明它可以用作整数。我编辑了答案以使其清楚。【参考方案2】:
C 没有其他方法可以区分值类型(存储在内存单元中)和引用类型(存储对值的引用)。 一旦你考虑结构或数组,它就会变得更加明显,即你不能存储到单个内存单元中的所有内容。
int *p = malloc(n*sizeof(int));
上面的表达式不可能翻译成您建议的语法的合理等价物;
int p = malloc(n*sizeof(int));
如果你废除指针语法,你只有一个选择:
p
包含已分配空间的内存地址(巧合的是,它们也是整数值)。这意味着每个指针(或引用类型)变量的类型都是 int
询问您进行转换(并且仍然需要引用运算符)。
【讨论】:
在数组的情况下,其名称本身就是一个指针,我理解为什么我们希望 malloc 返回一个指针。但是对于结构体,我们仍然可以说struct student ; struct student p = malloc(sizeof(struct student));
。在这种情况下我找不到问题。
@BillTheKid 说数组名称是指针是不正确的:它不是。但在某些情况下使用名称 decays 指向数组第一个元素的指针。
int i
是值类型,int* i
是指针。 student p
暗示它是一种不需要释放内存的值类型。您正在产生不一致,而除了稍微简化的语法之外什么也没得到。
@Beltway 好的,我明白了。现在说得通了!
Inconsistency 可能措辞不佳:许多高级语言默认将所有结构/对象视为引用类型,并使用您建议的语法,但与 C 不同的是,这些不需要您自己管理内存.以上是关于配置java_home到底有啥用?为啥tomcat一定要配置它?的主要内容,如果未能解决你的问题,请参考以下文章