日期:2014-05-20  浏览次数:20613 次

初学java 的青年有几个疑问!!!!

问题有点多哈 如果你觉得有些问题和极品 可以跳过那个问题
学java 快一个星期了 有一些疑问 再不问怕忘记

1.关于类的猜测:看看我的猜测对不对

以前学的事C语言哈,变量什么的都不自带方法的。接触到java的类以后 发现类的对象可以自带方法 觉得好神奇,它是怎么实现的呢?基本数据类 的变量可以储存在内存中的某个地方 然后系统根据它的数据类型访问它。 而类的话 它有成员变量和成员方法, 难道方法(函数)就是一段代码也和变量一样储存在内存中 而且不是在代码区 而是和该类的变量挨在一起????

类生成一个实例对象以后 是不是在内存的某个地方开辟一块地方 储放对象的成员变量和方法?

但是这样的话,好像挺费内存的 如果类生成很多实例对象的话 编译器会不会这么实现:生成一个类的实例对象时 只开辟一块内存储存对象的成员变量 而所有的该类的对象都共享一段内存区域,这个区域放着该类的成员方法????

2.==操作符合equals()方法在很多情况下作用是一样的。原理也是一样的。但是某些库中类覆盖类equals()使得equals比较对象时 比较的是引用类型变量所引用的对象的值是否相等。不必比较他们是不是同一个对象。
我理解的对不?


3、java中对应C语言中 sizeof()的操作符或方法是什么?

4.Object类是java中一切类的父类????

5.main函数必须寄宿于某个类,但它又不是某个类的成员函数,它不属于任何一个类 它所在的类也无需实例化 是这样的不???

6.java中没有像C语言中的结构体???那处理一定格式的数据的时候不是很不方便?????
比如我要从文件中输入一批学生的信息 信息在文件中的组织方法是这样的

姓名 年龄 性别 学号 

如果是用C语言的话可以定义一个结构体:
typedef struct{
  char name[20];
  int age;
  char sex;
  int id;
}stu; 
这样就很直观的从文件读入数据了 !在java中没有结构体 该怎么处理这中数据呢???也许是我还没把java语法看完

7.用java其实也可以写出完全和C一样面向过程的代码 对不???

........

再求一些建议 :
感觉《java核心技术 卷一》好厚,那么还有卷二 是不是把这两本都看完了才算个门  



------解决方案--------------------
1,类的方法就相当于一个功能。
基本数据类型的变量,不管是成员变量还是局部变量还有方法一般都在栈内存中进行使用。
而当它们使用完就会自动弹栈的。
而类生成的实例对象,只要是new出来的都存放在堆内存中。
不是,类的成员方法也在栈内存中栈内存中进行使用,使用完就释放掉了。
------解决方案--------------------
1 类的方法保存在和变量不同的区域内 被所以类对象共享 每个类编译器都是生成一定的元数据来描述方法变量等信息的。
2 恩 
3 木有 java的基本类型的大小是固定 内存管理有gc 不需要sizeof
4 是
5 mian是静态的
6 java对象全是引用的语意的 可以用class来实现struct的效果
7
------解决方案--------------------
4,是
5,嗯 它是静态的,所以类一加载就出现了静态方法区中
6,没学过C的伤不起啊
7,学习java别用面向过程的思想去考虑问题哦

------解决方案--------------------
你把main所在的类实例化后,可以调用该类中的其他方法,而main方法在你运行的时候,虚拟机会调用main方法的。
探讨

那可以吧main所在的类 实例化后 用那个对象 调用 main方法呢?
引用:

4,是
5,嗯 它是静态的,所以类一加载就出现了静态方法区中
6,没学过C的伤不起啊
7,学习java别用面向过程的思想去考虑问题哦

------解决方案--------------------
1.类生成一个实例对象以后 是不是在内存的某个地方开辟一块地方 储放对象的成员变量和方法?

是的,成员变量有多份,在堆内存中。方法其实只有一份,你每次调用方法的时候才开始在栈内分配临时内存,调用完了就释放了。

2.是的

3、java中对应C语言中 sizeof()的操作符或方法是什么?

看你用来干什么了,容器里面可以使用size()方法

4.正确

5.main是静态方法,不同于普通方法,需要了解JVM的运行机制

6.类本身就是结构了

7.java是纯面向对象的语言
------解决方案--------------------
不允许的,这个你可以试试的。
探讨

意思是用main函数所在的类实例化成对象后 在通过对象调用main方法在语义上是允许的??????
引用:

你把main所在的类实例化后,可以调用该类中的其他方法,而main方法在你运行的时候,虚拟机会调用main方法的。
引用:

那可以吧main所在的类 实例化后 用那个对象 调用 main方法呢?
引用 8 楼……

------解决方案--------------------
楼上的几位说用对象想用main方法???

不对吧,main方法是静态的吧。。。。

main方法是程序的入口,当然要是静态的,不能通过对象调用,要不,可能就有多个入口了...
------解决方案--------------------
2:你只需要记住 ==比较的是地址上的值(必须指向同一地址的相同值) equals比较的是值就可以了
4:是的 比如在设计模式中常用到 object
6:java是没有结构体 但是它有类和方法 
 说句题外话 别用C思想理解java C注重的是底层实现允许程序员自由发挥 java大部分都是jvm和api已经实现好的
------解决方案--------------------
都看完了不一定就能 入门,如果不进行大量实践,看这些书跟没看是一样的效果。。。。
------解决方案--------------------
回答3:java中没有和C中sizeof()一样的方法
------解决方案--------------------
java 跟c两个语言不同,要注意!!!早点接受面向对象这个概念,不过随着编程量的增加,你回慢慢你理解的