`

Java中不再谈的问题 【转】

阅读更多

http://bonnie0203.i170.com/user/yqj2065/Article_113018

 

 

 11、为什么main方法必须用static修饰?

A:public static void main(String[] s)是Java程序的起点。

用static修饰的原因:无中生有。

 

10、Q:传说"abcd"是String的引用,对吗?

 A:严格地说,字符串常量是String的引用。

由于术语混用的原因,我们常常说"abc"是字符串对象。

如果你认为这是一个传说,不是你的错,是你的老师差劲。

 

9、Q:操作符& 和 && 的区别是什么?

A:如果你不知道& 也是逻辑运算符,你可以上网获得很多(错误的)答案。

作为逻辑运算符,&& 是短路的,而&不是。

 

8、Q:引用变量、引用和对象三个术语,有必要严格区别吗?

A:学习Java的前一年,你要严格区别。

以后可以顺便混用,你看一本书的时候,首先要明白作者是怎样混用的;

objVar、ref、obj有几种混用方式:

ref与obj混用比较常见,负面效果比较小。

三者全部混用的书,你别看。(基本上没有)

 

7、Q:关于内存分配,基本变量在栈中分配、对象在堆中分配,对吧?

A:对象在堆中分配/总在Java heap中分配,这是对的。

基本变量也好、引用变量也好,一般是:作为局部变量在Java栈中分配;作为实例变量在堆中分配。

final变量(包括final局部变量)、static变量静态分配。

 

6、Q:一个引用变量占据多大空间?

A:对于“Object objVar;”的objVar ,据说被分配了一个字(32位)。

 

5、Q:一个Object对象有多大?为什么没有sizeof?

A:为什么你想知道它有多大?一般来说,Java不需要sizeof。

C有这个sizeof操作符,因为用户要(不得不)管理malloc调用、因为C语言的primitive types的长度是不固定的。

有人用Runtime.getRuntime().freememory()计算创建一个对象的前后内存余量,如:

static Runtime runtime = Runtime.getRuntime();...
long start, end;
Object obj;
runtime.gc();
start = runtime.freememory();
obj = new Object(); // 你希望看的东西
end =  runtime.freememory();
System.out.println("它占据了" + (start-end) + " bytes.");

这个方式不保证准确。

一般而言,一个Object占据了16 bytes(4个字)。

 

4、Q: new String("aaa")创建几个String对象?

A:没有上下文,答案不定。1 或者2个。

问题中创建对象是什么意思呢?编译时、运行时?

总之知道“常量池”就行了。

 

3、Q:Java中只有引用没有指针,对吗?

A:reference不过是Java中用的一个术语,不考虑实际的实现方式,它就是一个指针。

Java语言中没有了指针运算(pointer arithmetic),所以ref是安全的指针。事实上,every reference to an object is a pointer.

所以你会遇到NullPointerException。总之,每一个Java程序员都会知道:

    int[] a = {0, 1, 2, 3};
    int[] b = a ;
    b[0] = 88 ;

于是 a[0] 为88 。a and b are pointers (or references) to the same object.

中文中,引用的翻译毫无方向感,注意这一点。

 

2、Q:构造器和方法的不同有哪些?

A:除了overload机制和长得有点像,其他的都是不同的。

 

1、Q:Java中对象按引用传递?

A:烦人的问题。

再说Java中有按引用传递,别说我瞧不起你。

榆木脑袋。

分享到:
评论

相关推荐

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    3.4 小结:基本数据类型—— Java中一切数据和运算的基础 63 3.5 习题 65 第4章 Java中的程序执行流程 67 教学视频:1小时57分钟 4.1 顺序执行 67 4.2 使用if-else让程序懂得判断 68 4.2.1 if语句 68 4.2.2 ...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    3.4 小结:基本数据类型—— Java中一切数据和运算的基础 63 3.5 习题 65 第4章 Java中的程序执行流程 67 教学视频:1小时57分钟 4.1 顺序执行 67 4.2 使用if-else让程序懂得判断 68 4.2.1 if语句 68 4.2.2 ...

    JAVA自学之路

    首先我要恭喜你,遇见问题,意味着你又有涨经验的机会了,每解决一个问题,你的JAVA经验值就应该上升几百点,问题遇到的越多,知识提升的越快。 但是总是解决不了也是很恼人的,怎么办呢? 我一般要求我们的...

    浅谈 Spring 原理 透析,ioc aop

    IOC 的定义是:由容器(框架)定制程序间的关系,不必象传统实现中,由程序代码直接操控,控制权转到外部容器(框架)。IOC 的目的就是提升组件的重用概率。 依赖注入 依赖注入是 IOC 的一种实现方式。它有三种...

    asp.net知识库

    也谈 ASP.NET 1.1 中 QueryString 的安全获取写法 ASP.NET运行模式:PageHandlerFactory 利用搜索引擎引用来高亮页面关键字 网站首页的自动语言切换 应用系统的多语言支持 (一) 应用系统的多语言支持 (二) 自动...

    C#微软培训资料

    14.4 继承中关于属性的一些问题.169 14.5 小 结 .172 第四部分 深入了解 C#.174 第十五章 接 口 .174 15.1 组件编程技术 .174 15.2 接 口 定 义 .177 15.3 接口的成员 .178 15.4 接口的实现 .182 ...

    微服务设计与解决方案.docx

    微服务设计与解决方案 微服务架构现在是谈到企业应用架构时必聊的话题,微服务之所以火热也是因为相对之前的应用开发方式有很多优点,如更灵活、更能适应现在需求快速变更的大环境。 本文将介绍微服务架构的演进、优...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    Karen Morton及其团队在本书中提供了专业的方案:先掌握语言特性,再学习Oracle为提升语言效率而加入的支持特性,进而将两者综合考虑并在工作中加以应用。作者通过总结各自多年的软件开发和教学培训经验,与大家...

Global site tag (gtag.js) - Google Analytics