Think in Java 2 理解笔记 第二章 万事万物皆对象

欢迎各位兄弟有不同的见解!多多提出。让小弟得以理解!

[size=medium]Reference 是操控对象之钥匙[/size]
Reference(引用、参照、指引) 学了点C,我就把他当着指针,存在Stack(栈) 中地址,指向在Heap(堆)中的起启地址,还包括一些就不知道了。
在传递的时候:是传送引用的复制,不是对象。所以传过去的引用还是指像原来那个对象。一般说的传值也就是传送,值的复制。
String s; 引用 = null; String = "a"; 引用 = a 在Heap中的地址

[size=medium]所有对象都必须由你建立[/size]
String s = new String("asdf");这行代码产生多少个对象呢?呵呵,网站很有争议。有人能证明吗?1个2个还是3个?附:http://develop.csai.cn/java/200608221456051309.htm
感觉还有道理好像是说一个,大部分人说2个对象。
它们都存储在哪里?
1.寄存器(Registers)
速度最快的存储场所,位于CPU内你说能不快吗?至于存什么东西。编译器自身分配使用。
2.Stack(栈)
位于RAM中,速度仅次于寄存器。它于编译器产生stack指针移动和操作的。通常是保存方法(函数)中的参数,局部变量.对象引用。一般存数据都有大小和存活时间的限制。
3.Heap(堆)
存在RAM中,数据产生基本是用new进去的。弹性比stack好。可以动态给对象分配空间。但耗费的时间多了很多。
4.静态存储空间(Static storage)
存在RAM中,static修饰的数据都存在这里
5.常量存储空间
存在ROM,只读的所以是安全的。C#中的静态常量,和动态常量public static readonly runtimeConstant = 1;这个就是很清楚了
6.Non-RAM 存储空间
存在于程序之外,如果streamed objects(串流化对象)和persistent objects(持久化对象)
串流化对象就不就是以二进制的流行式。持久化对象就是可以存在其它介质上。java--轻量级持久性(待解)

[size=medium]特例:基本型别(primitive types)[/size]
基本类别(non-ojbect):boolean btye chart long int double float void
包装类别(对基本类别相应的包装对象):Boolean Btye Character Long Integer Double Float Void
还有两个高精度数值类:
BigInteger 有大数存多大数,BigDecimal 对应高精度浮点数(有了这两个类型,你有多少钱都不怕。丢失了和存不下了)
基本型类大不小和硬件架构而改变!高度可携性牛!
不过在程序中还是得知道他们的大不,这里略,因为越界他会给你乱码的!
[size=medium]Java中的数组(array)[/size]
JAVA保证数据一定初始化,多开一点空间用来对数组进行检查。

[size=medium]你再也不需要摧毁对象[/size]
GC有java回收机制(这是一个神奇的东西,哈哈)

[size=medium]生存空间[/size]
java是一种自由格式(free-form)的语言,不论空白,跳格,换行,不会影响程序
除对对象外生存空间一般生存在外面一对{}之内--从定义当条到}结束,但要注意C/C++ 与 JAVA有区别下面JAVA是不允许的:


int x = 100;
{
int x = 200;
}



[size=medium]对象的生存空间[/size]
{String s = new String("abc")}
只要new出来就存生了但过了}new出的引用将会消失。最后回收还是GC

[size=medium]建立新的数据型别:class[/size]
对象的外观就是class MyClass{/*程序体*/}

[size=medium]数据成员(field) 和 函数(methods)[/size]
类,除了成员,就是函数(我喜欢说方法)
基本成员缺省0 但有两个特殊的 boolean = false ,char='\u0000'(null)
对象 为null
{int x } 如果在方法体中 JAVA会语法检查中报错。强制要你赋初值 对象也一样

[size=medium]方法(Methods),引数(arguments),返回值(return values)[/size]
最基本形式:
返回值 方法名称(引数列表...) {
方法体

调用方法 对象.方法名称

[size=medium]引数列(The argument list)[/size]
void setString(String s){
return;
}
上面return;表示可以跳出方法体。String 传送的是s对象。传送是s的引用。
参数传递机制
call-by-value 值调用:将实际参数的内容拷贝到被调用方法
call-by-reference 引用调用:将实际参数的地址作为形式参数的值被传递到被调用方法
名调用:早期程序设计语言Algol 60使用。
值调用:
虽然Java使用值调用,但只要我们把一个对象的名字传递给一个被调用过程,那个过程受到的值实际上是这个对象的指针。因此,被调用过程是可以改变这个对象本身的值的。
引用调用:
Java语言解决数组、字符串、和其他对象的参数传递问题的方法是仅仅复制这些对象的引用。结果是,Java运行时就好像它对所有不是基本类型(比如整数、实数等)的参数都使用了引用调用。

[size=medium]名称的可视性(Name visibility)[/size]
"名称管理"(我们说的“包”)C++/C#用“命名空间”
程序怎么命名呢。像我的域名 snail-java.iteye.com
包名就可以com.javaeye.snailjava 就这样。

[size=medium]使用其他组件(component)[/size]
引用其它组件包用关键字import
import java.util.ArrayList; 表求引用ArrayList类
import java.lang.*; lang 是默认导入包,不需要程序员显示导入。.*表示所有 lang.* 表示lang包下所有的类。所以.*导入比较方便,但影响编译时间,不建议。

[size=medium]关键字static[/size]
被关键字修饰过的数据被存在静态存储空间(Static storage),只有一份。它不是所属对象,而是所有class都共享,如果程序中出现成篇成篇使用static你就要想想你的oop问题了。static有时感觉很不安全。有些特定功能总能派上用场。特别是一些效率问题。

[size=medium]第一个Java程序[/size]
好累呀!终于开始写代码了。写个超经典的HelloWorld吧!文件名:HolleWorldOne

//public class HolleWorldOne
class HolleWorldOne {
public void method1() {
System.out.println("method one");
}
public static void main(String[] args) {
System.out.println("HolleWorld one!");
}
}
class HolleWorldTwo{
public static void main(String[] args) {
System.out.println("HolleWorld two!");
}
}

public :公共修饰词,修饰class一个件只能有一个public,对其它同包文件可见。而且修饰的class Name必须和文件字一致。上面代码如果要修饰class就只能是HolleWorldOne,编辑HolleWorldOne,编辑器将HolleWorldTwo会连同一起编辑!
main(String[] args) :main方法是程序的入口,程序程序也人将运行一个main,String[] args 是从控制台输入的String数据。
static:这里是必需的,main 是属整个程序,而且运行过程只也只有一份。虽然编辑得过,一运行:Exception in thread "main" java.lang.NoSuchMethodError: main

[size=medium]编译与执行[/size]
在编译前请安全Java 的JDK,在设置好JDK的path
面试中经常会问到path 和 classpath的区别
path:是操作系统寻找JDK的路径,操作系统平台找程序的路径。
classpath:JAVA也可以说一个运行平台,是它找.class文件的路径。
编译:进入cmd,转到java文件当前目录 or 当前磁盘
javac [path]MyClaa.java
运行: java[path] MyClass

[size=medium]注解及内嵌式文档[/size]
一位美女再好看也得穿衣服包装一下,注解就是那件衣服了。支持有自己的个性。
附:[url]http://tmsoft.lsxy.com/index.php?id=476&load=read[/url]
这件衣服不错,款式大众化!好的代码习惯从注解开始。
文档的一些常用标签:
@author 对类的说明 标明开发该类模块的作者
@version 对类的说明 标明该类模块的版本
@see 对类、属性、方法的说明 参考转向,也就是相关主题
@param 对方法的说明 对方法中某参数的说明
@return 对方法的说明 对方法返回值的说明
@exception 对方法的说明 对方法可能抛出的异常进行说明
文档的制作:
cmd -- javadoc [path]MyClass.java
其上// /* */ 这样的注解是不能显示到doc文档中的。
/** */文档注解。

[size=medium]编码风格(Coding style)[/size]
JAVA但只有几种,不过有些公司有特定的风格。没有就看喜好办。
类名:英文单词首字母大写;
方法名:第一个单词用动词,驼峰命名法(首单词,首字母小写,其它首字母大写!)
变量:驼峰命名法
包名:全小写(jdk早版本是本大写)
{}这东东看喜好了。
style()
{
C/C++风格,感觉层次清晰

style() {
JAVA风格,代码又少了一行,是不是感觉更专业一点呢。
}

PS:-.-这是我写的第二篇文章了,虽然看的兄弟们也很多,从来没人评论一句。是我写得太好 or 太差了? 自己当然知道是大家看了这种垃圾东东都不想浪费手指几下力气!!!渴望大家的指点和支持!。那怕您是说我的HelloWorld 写成 HolleWorld!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值