﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-&lt;img border='0' src='http://www.blogjava.net/images/blogjava_net/grasszring/only-effort.png'/&gt;-文章分类-JavaSE</title><link>http://www.blogjava.net/grasszring/category/44796.html</link><description>草之戒_</description><language>zh-cn</language><lastBuildDate>Thu, 03 Jun 2010 17:39:29 GMT</lastBuildDate><pubDate>Thu, 03 Jun 2010 17:39:29 GMT</pubDate><ttl>60</ttl><item><title>Java学习笔记(1)——Java编程思想(一切皆对象)</title><link>http://www.blogjava.net/grasszring/articles/322430.html</link><dc:creator>Aidan</dc:creator><author>Aidan</author><pubDate>Wed, 02 Jun 2010 07:24:00 GMT</pubDate><guid>http://www.blogjava.net/grasszring/articles/322430.html</guid><wfw:comment>http://www.blogjava.net/grasszring/comments/322430.html</wfw:comment><comments>http://www.blogjava.net/grasszring/articles/322430.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/grasszring/comments/commentRss/322430.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/grasszring/services/trackbacks/322430.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Java编程思想是学习Java必读之书，此书的内容跟名字一样，主要是以思想为主，如果没有编程经验，此书确实有点不太适合你，如果你有C/C++编程经验那这书正适合你，因为作者在内容中是以C/C++与Java作对比来学习的。如果你是直接学习Java可以先选择Java核心技术来学习，这本书主要是以技术入门为主，虽然里面也同样与C/C++作对比，但是学习起来会比Java编程思想要简单的多。当你运用Java有一段时间后，一定要回过头来学习Java编程这本书，因为它会让你更进一步。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
在此次我的blog计划中，会把Java编程思想每一张的笔记都记录在blog中，我在经常在网上看到有人说Java编程思想讲得有点啰嗦，确实我读此书也有这种想法，所以在我的blog中我会尽量减少，只会出现有关Java和内容，会把作者描述的C/C++对比方面省略掉，当然这只是做一个参考，建议大家一定要去学习完整的Java编程思想。<br />
<hr width="100%" size="2" />
<h3>
1.用引用操纵对象</h3>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Java中一切都视为对象，但实际操作对象是一个&#8220;引用&#8221;(reference)标识符。<br />
这就如果，遥控器(引用)操作电视(对象)一样，我们拿着遥控器就能与电视机保持连接。如果想要调整音量大小或者更换频道时，我们实际上是操作的遥控器，再由控制器调控电视机。我们可以带着控制器在房间四处走动，同样也可以操作电视机。<br />
控制器和电视机是同时可以单独存在的，没有电视机，遥控器也可单独存在。<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 0);">String&nbsp;s;</span></div>
在上面我们创建了一个String的引用，但它只是一样引用，并未与任何一个对象相关联，如果你尝试向s发送消息，则会得到一个运行时异常，所以一种安全的做法是，在我们创建一个引用同时便为进行初始化。<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 0);">String&nbsp;s&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">init</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br />
</span></div>
上面的String是Java中的一种特殊类型，所以可以直接使用带引号的文本进行初始化，通常，必须对Java中的对象采用一种更通用的初始化方法。<br />
<h3>
2.必须由自己创建所有的对象</h3>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
通常我们使用new操作符来创建一个对象。<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 0);">String&nbsp;s&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;String(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">init</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);</span></div>
上面是创建一个String对象同时初始化并把该对象的引用赋值给s，此时s便是一个对象的引用(s并非是一个对象，只是一个引用)。<br />
<h4>
2.1.存储位置</h4>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Java中有5个不同的数据存储区：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<strong>1).寄存器：</strong>它位于处理器内部是最快的存储区。但寄存器极其有限，它是根据需求进行分配，我们不能直接操作也不能在程序中感觉到它的存在。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<strong>2).堆栈：</strong>位于通用RAM(随机访问存储器)中通过堆栈指针可以处理器哪里操作堆栈。指针向下移动则分配新的内存；若向上移动则释放那些内存，速度公次于存储器，但Java必须知道存储在堆栈内所有项的确切生命周期，以便上下移动指针。这限制了程序的灵活性，所以只有某些Java数据存储于堆栈中(对象的引用)，Java对象并不存放于其中。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<strong>3).堆：</strong>通用的内存池，用于存放所有的Java对象。存储在堆里的数据编译器不需要知道存活多长时间。当使用new创建一个对象时，会自动在堆里存储分配。为了这种灵活性也牺牲更多的时间。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<strong>4).常量存储：</strong>常量通过直接存放于代码的内部，因为他们永远不会被改变。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<strong>5).非RAM存储：</strong>该存储于程序之外，即使程序停止依然保持自己的状态如(流对象，持久化对象)。对象转化为字节流，发送给另一台机器，&#8220;持久化对象&#8221;即对象被存储于磁盘或者其他媒介上，在需要时可恢复常规对象。<br />
<h4>
2.2.基本数据类型</h4>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
在Java中经常用到这样一系列特殊对象的&#8220;基本类型&#8221;，new创建对象会存储在&#8220;堆&#8221;里，如果是一些特别小的、简单的类型，往往不是那么有效，在Java中提供一些不需要使用new创建变量，而是创建一个<span style="color: red;">并非引用</span>的&#8220;自动&#8221;变量。这个变量直接存储&#8220;值&#8221;并存放于堆栈中。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Java中的所有基本类型所占的存储空间大小是固定的，不会因为硬件架构变化而变化。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <img alt="" src="http://www.blogjava.net/images/blogjava_net/grasszring/javase/java-base-type.jpg" /><br />
<h3>3.第一个Java程序</h3>
<div style="background-color: rgb(238, 238, 238); font-size: 13px; border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 255);">package</span><span style="color: rgb(0, 0, 0);">&nbsp;com.onlyeffort.java.concurrency;<br />
<br />
</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;可替换为：import&nbsp;java.util.*;</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);">&nbsp;java.util.Random;<br />
<br />
</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">定义一个公共类名为：HelloWorld</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;HelloWorld&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;main方法，程序的入口，结构不可变，主体可变</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;main(String[]&nbsp;args)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;body&nbsp;start..大括号开始<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;创建一个对象</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HelloWorld&nbsp;hw&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;HelloWorld();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;使用hw引用调用say方法</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(hw.say());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;body&nbsp;end..大括号结束</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128, 128, 128);">@return</span><span style="color: rgb(0, 128, 0);">&nbsp;返回一个字符串,并打出出值.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;String&nbsp;say()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Random&nbsp;rand&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;Random();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Hello,World!</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">&nbsp;rand.nextInt();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 第一行为包声明语句，包名全为小写，一般为域名的反转形式，防止出现冲突，因为域名在全球是唯一的。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当我们需要使用其它公共的类组件时需要使用import语句引入类。但java编译器在每个Java文件编译时会自动引用java.lang.*;下面的所有类，只是lang包下面的所有，但并不包含lang下面的子包，如果我们需要使用java.lang.reflect.Array;时，还需要我们手动引用。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; main方法是Java运行时程序的入口，结构单一不可改变。在main方法中我们创建了一个HelloWorld对象，并把它赋值给hw，此时hw是一个HelloWorld对象的一个引用，hw并非是一个对象。在后面我们调用了HelloWorld的say方法，此方法返回一个字符串，在say方法中，我们创建了一个随机数，并把它与一个字符串相连接。rand.nextInt()方法会返回一个int类型的整数，这里Java编译器会执行类型转换，把int类型转换为String类型并执行字符串连接。在最后我们使用了return语句返回这个方法的返回值。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return在Java程序中有两种作用，一：会结束当前方法(return;);二：返回某个方法的返回值(return value;)。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在这个HelloWorld中出现了&#8220;//&#8221;、&#8220;/***/&#8221;这都是Java当中的注释。Java编译器编译时会忽略注释后面的所有内容。<br />
<br />
<img src ="http://www.blogjava.net/grasszring/aggbug/322430.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/grasszring/" target="_blank">Aidan</a> 2010-06-02 15:24 <a href="http://www.blogjava.net/grasszring/articles/322430.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>