本帖最后由 戴振良 于 2013-1-28 15:11 编辑
黑马的发展可真快啊,感觉才毕业没多久,17届都有了,黑马真是强!!!
好久没来论坛逛了,很多东西要学习的,现在感觉上班挺好的,没什么压力,上班时间还可以学习。我以前看的基础视频是张孝详老师的,后来才知道老毕的基础视频讲的比较牛,最近我也在看老毕的基础视频了,老毕真是神人也,讲课也太好了,要问到目前为止我觉得讲课最厉害的,当属老毕了,虽然他没有亲自教过我。看了老毕画的内存图,感觉很清析,后来我自己也画了个,贴出来给大家看看对不对。
学弟学妹们为进黑马都很努力哈,以前听说老有人抱怨积分难赚,在这里我也给大家个赚积分的机会吧,在后面有两个练习,大家可以试着把内存图画出来,对你理解对象的赋值传参都肯定大有收益,只要你画出来了,我相信 版主肯定会给积分的。而且我这有许多金币,看谁画对的我给他奖励些金币,不只道系统允许给多少。现在这东西好似可以在积分商城买东西了。
下面是我画的内存分析图:
class Person { } class QuoteDemo { public static void newPerson(Person p) { p = new Person(); } public static void main(String[] args) { Person p = null; newPerson(p); System.out.println(p);// 此处打印:null } } 代码从main方法开始执行: 1、Person p = null; 执行后的内存图:
2、newPerson(p); 调用newPerson方法时在栈内存又生成了一个newPerson方法中的变量p
3、newPerson(p); 这里把main方法中的p的值传给了newPerson方法中的p,所以此时newPerson方法中的p也指向了null
4、p = new Person();执行newPerson 方法中的代码后内存图: 5、newPerson方法执行完后继续执行main方法中的代码:System.out.println(p); 这里打印的p是main方法中的p,所以打印结果为:null
听说字符串也算是对象,也是在堆内存中分配的,看下面例子:- import java.util.ArrayList;
- public class Demo {
- public static void main(String[] args) {
- ArrayList<String> al = fun();
- String s = al.get(0);
- System.out.println(s);
- }
-
- public static ArrayList<String> fun(){
- ArrayList<String> al = new ArrayList<String>();
- String s = "张三" ;
- al.add(s);
- s = "李四";
- return al;
- }
- }
复制代码 运行后,打印结果是: 张三
再看下面例子:- class Person {
- String name;
- }
- class QuoteDemo {
- public static void newPerson(Person p) {
- p = new Person();
- }
- public static void main(String[] args) {
- ArrayList<Person> al = fun();
- Person p = al.get(0);
- System.out.println(p.name);
- }
-
- public static ArrayList<Person> fun(){
- ArrayList<Person> al = new ArrayList<Person>();
- Person p = new Person();
- p.name = "张三";
- al.add(p);
- p.name = "李四";
- return al;
- }
- }
复制代码运行后,打印结果是: 李四
|