怎么按C理解java

本文针对有C语言基础的学习者,探讨如何用C的思维理解Java中的对象、类以及内存管理。虽然Java封装了指针,但可以通过对比C中的结构体和指针概念,理解Java的对象和构造器。同时,Java中的访问修饰符如private和public,与C中的实现有所不同,但有助于理解类的封装和访问控制。通过学习这些概念,可以帮助C程序员更快地过渡到Java世界。
摘要由CSDN通过智能技术生成

怎么用c的思路来理解java,写给有c基础且要开始学习java小白。

相信一些从有过c基础的小伙伴,在学java的时候会非常的纠结,想要找指针,但是无论如何都找不到。毕竟c语言的精髓就是指针(pointer)和结构体(structure),你可能会问都已经学java了,为什么一定要找指针呢?一来,因为以前学c语言对指针很熟悉,没有指针感觉什么都做不了,连数组后来多数时候都用指针代替;二来,从一个已经熟悉的点开始逐渐的把知识进行填充,我觉得应该能使我学得更快,更何况在国外,直接看的是英文,本来理解就有难度。

我刚学java在网上找了很多文章,看各位大神秀操作强行在java中使用地址,看得是云里来雾里去,知其型不知其意,硬着头皮到最后终于取得真经:不建议使用云云。正如很多人说的那样java中把指针进行了封装,看不见摸不着了,美其名曰:安全。(并不是贬低java语言,存在即合理,只是本人更喜欢c的大力出奇迹。)java中的private和public在c中实现需要很多工作量

但在java中不难发现c的影子。
就拿我刚开始最头疼的object来举例子吧,中文是对象,因为java里全是object,所以就是面向对象编程。我们经常能看到如下的java class 结构:

class Student{
	private String name;

	public Student(){}

	public String getName(){
		return name;
	}

	public void setName(int name){
		this.name = name;
	}
}

每次在想要使用object的时候都要调用constructor来生成一个object。这时候就要用:

Student student = new Student();

解释起来就是定义一个student 的variable,类型是Student(这是一个class名)new就是一个给这个variable分配空间的关键字。好比c中的malloc一样:

int *p = (int *)malloc(sizeof(int));

这个大家都懂吧,个p指向的位置分配一个int大小的空间。如果大家直接打印java中的student就会发现这个输出的内容有点像一个地址,和大多数情况下地址的表示0x1234有些出入。当然在c中,分配了空间就一定要记得free(p); 这很关键,在java中就不用这样操心了,但这也是java在大工程中容易造成内存泄露的原因吧。
再来说这个object,其实就很像c中的结构体,c中的结构体对新手不友好,当年我也是花了些功夫的。但java中的object就非常的容易使用。
c中每次想使用什么结构体中的内容都需要

p->name 或 p.name

java中只是用”.”(dot notation)

student.getName(); //因为java中只能调用方法(方法就是c中所说的函数)

当然object直接输出object的名字是可以获得一个地址的,比如我们使用

System.out.println(student);

会得到一个地址如:Student@xxxxxx -------> class名@伪地址
这个地址看起来有点魔幻而且根本就无法进行操作,在java中能查到的东西是hashcode这东西也不是地址,hashcode只是方便代码查找数据的一串数字。这段数字的产生跟我们存值有关。所以会出现撞hashcode的情况,java有避免这种情况出现的处理方法,所以一般不用担心。object能够看到上面说的伪地址,int/double/boolean… 这种很基础的数据类型声明的变量地址就不用找了。

在java的class中的属性 String name;(field)这个就好比C中的全局变量。只要申请的object存在,该object中的name就会一直存在。就跟C中一样定义个全局变量在一般情况下就是懒省事的办法。

但java中定义属性的时候,一般会定义为 private String name;public String name;涉及到了private这个说法,就是说除了这个class其他的无法直接调用。而往往一个class都是写在一个单独的文件中的,是不是有种哦的感觉。
当然如果想让说有人都可以随便调用可以把它定义为public,java中存在一个继承的概念,所以如果只想让直系亲属调用,可以定义为protected.

搞懂这一点,java就不难了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值