java心得,2016年1月20日10:42:23再次修正,
本帖最后由 xiaoye 于 2016-1-19 10:42 编辑最近闭关自学java,在学的过程的发现很爽,当然也碰到过一下难点一点。
由于自学过C语言以及C++编程环境问题,都是分分钟解决的,在不懂,强大的中国网民,相信百度可以找到答案的。
而我感触较为深刻的是,在学习C语言的过程中,非常艰苦,但最终还是拿下它,虽说不能开发出绚丽的,功能强大的程序,但基本的编程思想和编码手法倒是学了很多,然而我我也想过用C语言结合API研究,可惜的是能用的能找到的资料非常少,还有就是微软平台上开发的机制和原理都不懂,于是学习完基础基本上都没闭关学习它的函数库。
前段时间,接触c++,发现c++独有的类,以及复杂的写法,等等之类的知识,学完后,发现这跟c语言非常相似。觉得它非常之复杂,然而在我接触java后,突然灵光一闪。
原来是这样,嗯,一种莫名的顿悟,使自己接受c++这种独特的风格,也心里觉得这是一件很自然的写法及写法的设计设计理念。
当然很多人看到这,懂得话肯定想说,c++的面向对象为什么不讲?其实当你认识它们后,你会发现,C语言也可以写面向对象的,比如,c++用类这种方式,但C语言就不能用函数吗?
函数嵌套,外面的函数就定义变量,将变量地址或引用到里面的函数,在用里面的写操作,这不是和类的一样的吗?只是样的写法在C语言中,调用和处理时候麻烦罢了。
因而别人说,学编程建议先学C语言,当然这不是强制一定。
为了丰满帖子,发了一段练习的代码,以示屌屌!
函数嵌套,外面的函数就定义变量,将变量地址或引用到里面的函数,在用里面的写操作,这不是和类的一样的吗?
这句话的解释:(代码没测试)
//C语言的写法
# include <stdio.h>
int rootA(int i, int k);
int rootB(int *i,int *k);
int main(void)
{
printf("%d",rootA(1,2);
return 0;
}
int rootA(int i, int k)
{
int i;
int k;
rootB(i,k);
return 0;
}
int rootB(int *i, int *k)
{
return (*i + *k);
}
//java写法,没有初始化
class rootA{
int i;
int k;
int rootB()
{
return (i+k);
}
};
public class HK_student {
public static void main(String[] args){
rootA stu = new rootA();
System.out.printf("%d",stu.rootB());
}
}
补充:
事实上对知识点的理解上,我是理解清楚的,我想表达的意思是,他们的功能是实现两数相加,这是没问题的。我泪奔啊。
而在我理解JAVA,它有个类rootA里面有个方法rootB,rootB在内存上分配给代码区,两个变量分配给栈,重用方法,分配对象调用。
而c语言通过函数嵌套方式实现,同样的变量分配到栈,函数(忘记放哪了)类似于JAVA,说他们一样的(内存理解方面,上面的意思)不为过,这也是我写上面两段代码的原因。
但思想上的肯定是JAVA较为合理。最后我想说的是,他们的实现效果相同,同时也说明了c语言可以这样调用实现面向对象,如果真的让他面向对象,c语言本身都没有这本事,只能说类似,但可以使用自己动态分配内存,实现对象的方式,也是可以的。
避免误人子弟:
上面的理解:C语言的函数内嵌,java普通方法调用即可。
以上是一人的观点。
更正,2016年1月20日10:39:08:
上面红色部分改为:两变量分配到堆中。
C语言实现动态分配,可以使用函数malloc()
看了上面的说法,建议先用清楚C++的类和函数的定义。如果你说C++的类和C语言的结构体相似,这个还可以接受,但是说类和函数相似,这个就不可思议了 冰琥珀 发表于 2016-1-16 16:51
看了上面的说法,建议先用清楚C++的类和函数的定义。如果你说C++的类和C语言的结构体相似,这个还可以接受 ...
理解错我的意思了,我这里是说,C语言可以用面向过程的理念去写,举了例子。 xiaoye 发表于 2016-1-16 17:06
理解错我的意思了,我这里是说,C语言可以用面向过程的理念去写,举了例子。 ...
{:2_35:}写好了,我说的是代码的意思,比较两个的代码。原理过程不一样,但思想是一样的 感谢楼主的分享~ 去好好看看类的概念,好好理解啥是对象,然后再去看你上面的代码 冰琥珀 发表于 2016-1-16 20:36
去好好看看类的概念,好好理解啥是对象,然后再去看你上面的代码
{:2_30:}早已熟烂 冰琥珀 发表于 2016-1-16 20:36
去好好看看类的概念,好好理解啥是对象,然后再去看你上面的代码
为什么要纠结我呢,反正这是我个人的观点吧了。有用之者当用。 不是纠结,而是你自己都不理解,然后这样发表出来,会误人子弟的
不是吧,第一个是函数调用函数,第二个java的是对象调用函数,虽然这里表面显示结果一样,但是完全不一样。。类里面可以包括这些函数,我们称之方法,必须这个类生成的对象才能调用这个方法,而你第一个c语言函数和函数之间的关系是平级。但是那个java的确是附属关系,机理完全不一样。其实面向对象没有那么 难理解的