Java编程思想(第4版)1——3章节小结 - Angel's Blog.

ing
 
 
软件开发,程序设计,前端设计
 
 
首页 > code > Java编程思想(第4版)1——3章节小结

Java编程思想(第4版)1——3章节小结

 

昨天下午翻阅了一下Java编程思想(第四版)的pdf,这本书是我的同学(小胖子)推荐给我看的,当然了,他还提供给我几个其他的java读物(其实我最痛恨没有价值的读物,不仅仅牺牲了读者的时间,而且还把读者带进了误区),其中这本“Java编程思想(第四版)”,我强烈地推荐给初学java或者已经学过logic javajava oop的人群(最好先系统地学一便logic javajava oop,当你学完之后再回来阅读这个pdf,你会有一种很亲切的感觉),而且作为我个人,一个学生来讲,这本书还是很值得去读的(好书不多)。

额。。我来总结一下我昨天阅读“Java编程思想(第4版)”其中的1——3章的内容,用来作为小结吧(总结的有些东西是以前没有注意或者没有接触过的),希望大家多多指点:

1) Java中创建引用的同时记得要初始化(规范)。

在Java中,对象的引用存储在堆栈中;

Java创建的所有对象都存储在堆中。

2)Java的基本类型:

1.boolean;2.char:16-bit;3.byte:8bit;4.short:16bit;5.int:32bit;6.long:64bit;7.float:32bit;8.double:64bit

注意:在java中,String  为引用类型:

String i = "";//引用类型

3)java中的垃圾回收器的强大:

可以用来监视所有new的对象,并去辨认那些不会再被引用的对象;

然后释放这些对象占用的空间,以便其他的对象使用,这样也就避免了“内存泄露”。

4)static:

用static定义的属性和方法,可以通过 类名.访问,无须通过实例化对象.访问属性或者方法;所以被static定义的属性和方法也可以称为 类变量 类方法。

在这里,使用类名是引用static 变量的首选方式,不仅仅是因为它强调了变量的static结构,而且在某些情况下它还为编译器进行优化提供了更好的机会。

static作用于某个字段时,肯定会改变数据创建的方式;static字段对每个类都只有一份存储空间,而非static字段则是对每个对象有一个存储空间。

5)java的基本运算符(一元运算符):+ – * / =%;要注意操作符的优先级;

java中,例外的操作符是“=”、“==”、“!=”;*其中,String 类型支持“=”和“+=”操作符

6)java中,对基本的数据类型赋值很容易,基本类型存储了实际的数值,而并非指向一个对象的引用,所以在为其赋值的时候,是直接将一个地方的内容复制到了另一个地方。

java中的别名现象:实例化两个对象t1 和t2,将t2对象赋给t1,就等于将t2对象复制一份,然后t1和t2就引入了同一个对象了;这样,在这种情况下,无论是修改t1对象属性,还是修改t2对象的属性,都会修改引入的同一对象的属性。如若避免这样的现象,可以通过对象“t1.属性 = t2.属性”这个赋值操作,保持了两个对象的独立。

运算操作符“++、–”的前缀式和后缀式:

前缀式:“++i、–j”:操作符位于变量或者表达式的前面;

后缀式:“i–、j–”:操作符位于变量或表达式的后面;

对于前缀式:先执行计算,后执行生成值的操作;

后缀式:先执行生成值的操作,后执行运算。

关于方法调用别名可能遇到的问题:

 

public class PassObject
{
	static void functions(Letter lt)
	{
		lt.c = "34455";
	}
	public static void main(String[] args)
	{
		Letter ltpo = new Letter();
		ltpo.c = "aaa";
		System.out.println(ltpo.c);
		System.out.println("===============");
		functions(ltpo);
		System.out.println(ltpo.c);
	}
}

class Letter
{
	String c = null;
}
//看看打印结果是什么?

7)关系操作符:

 

public class TestQuote
{
	public static void main(String[] args)
	{
		Integer i = new Integer(88);
		Integer j = new Integer(88);
		//i = j;①
		//System.out.println(i.equals(j));②
		System.out.println(i == j);
		System.out.println("===========");
		System.out.println(i != j);
	}
}

如果将注释部分注释而不使用,也许你可能看到代码的第一个感觉:先打印true,然后再打印false;

但是需要注意,i和j这两个对象,虽然对象中的内容(属性和方法)相同,但是他俩不是引用的同一个对象,所以比较产生的结果就是false。

解决方案:引入同一个对象:将j对象复制给i上面一份,如注释①处。

或者,可以通过“equals()进行比较,如注释②处(注意:equals不适合基本数据类型的对象的比较)”

在这里,equals()是用来比较对象中的内容,而不是比较对象的引用。

8)逻辑操作符:

短路:

使用逻辑操作符&或者|,有的时候会遇到短路的情况:

 

public class TestShortRouter {
	public boolean result1()
	{
		boolean x1 = 3 > 1 ;
		System.out.println("真假?" + x1);
		return x1;
	}

	public boolean result2()
	{
		boolean x2 = 4 < 1;
		System.out.println("真假呢?" + x2);
		return x2;
	}
	public boolean result3()
	{
		boolean x3 = 5 < 2;
		System.out.println("真与假?" + x3);
		return x3;
	}
	public static void main(String[] args) {
		TestShortRouter tsr = new TestShortRouter();
		boolean results =  tsr.result1() & tsr.result2() & tsr.result3();
		System.out.println("短路产生的boolean值:" + results);
	}
}

在这里,你可能认为tsr.result1().result2()和.result3()方法返回的值(boolean结果)进行比较;

其实,如果你仔细查看result1和result2 方法中print的结果,你就可能知道了,如果result1()和result2()比较的结果为false,也就没有必要再比较下去了,因为在这样的情况下,整个结果都是false。

9)直接常量:

譬如使用float类型:

 

float x = 1.0f;

注意,1.0后面的”f”(也可以是大写的F)就是指明了其类型(float),它“标志”了它的的类型。

以此类似,L(或者l)代表long;D(或者d)代表了double。

10)三元操作符:

顾名思义,三元操作符就应该有三个操作数,被称为条件操作符;

booleanResult ? totals:totals1

一个简单的代码片段,欢迎围观:

 

public class AllConst {
	public static void main(String[] args) {
		AllConst ac = new AllConst();
		int myAge = ac.info(25);
		System.out.println(myAge);
		int youAge = ac.info(10);
		System.out.println(youAge);
	}
	public int info(int age)
	{
		return age < 18 ? 18 : age;
	}
}

这个info()方法中的return age就相当于:“if (age < 18) {return 18;} else{return age}”;

11)截尾和舍入:

将一个float类型的数转换成int类型的值,对该数字执行截尾;

注意:如果想要得到舍入的结果,需要使用java中的Math.round()(使用的时候需要 import对应的包)。

补充:关于Java异常处理——Checked Exception和Runtime Exception:

Runtime Exception(运行时异常):

到网络上搜索了下,Runtime Exception归为“Unchecked exception”?定义方法允许不声明此方法(Runtime Exception)可能发生此类型的异常,同时在使用这个方法的时候也不需要捕获这个异常,也就是说,可以不去处理此类的异常,编译继续通过;

Runtime Exception来自于java.lang.RuntimeException

Checked Exception:

定义方法声明可能会抛出的异常,调用方法的时候需要捕获执行该方法可能发生的异常,必须主动处理,否则无法通过(在使用接口实现方法也需要注意声明处的throws)。

好吧,这些都是我个人的小结,可能总结的不是很好,嘿嘿,一点点来吧;争取近两天时间把这本书阅读完;

学习java很浅,不过我也下定决心从事java方向(一看到我们的课程体系,我的头就大,分明就是在培养.net程序员嘛…),唉,,自学的东西太多了。

或者通过RSS 关注本站的更新 ^ O ^ 。” —  by  转载请注明:来自 Angel's Blog.
本文永久链接: http://www.0ee.com/2010/12/27/summary-thinking-in-java-1-3-chapter.html
 
分类: code标签: ,
 
  • QQ书签
  • Del.icio.us
  • 百度收藏
  • Google
  • 饭否
  • FriendFeed
 

 
评论 (11) Trackbacks (0)
发表评论 Trackback
 
11 Comments Contributed by Visitors
  1.     Angel 2010年12月29日05:05 11#

    @智能水表
    还好吧,thinking in java比较经典,java coder必读,所以不管老不老,不要总拿时间衡量它的价值(毕竟它不是女人,女人怕老),想学java必须读它,聪明的人也会去选择它,因为它是一本非常难得的资料。

Leave Comments Here...

:) :-D :( :-o 8-O :-? 8) lol :-x :-P oops cry evil twisted wink ? idea :-| arrow mrgreen roll !

(required)

(required)

网址随您("http://"可以省略)

(Ctrl+Enter)

  • 本站不会泄露您的 Email 地址, 敬请放心.
  • 本站已开启缓存, 请不要重复提交评论.
  • 请注意: 带有 《广告(链)、不健康、或者 产品名字》 的评论一律视为spam.
  • 支持常用 HTML 标签调用, 插入 HTML 标签需注意: < == &lt;> == &gt;.
  • 仅当某人针对您的评论做出回应时, 您才会收到由本站发出的邮件通知.
  • 如您希望以相同方式通知某位网友, 请点击  按钮进行回复.
  • 允许在评论中使用如下代码: 
    <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> 
    <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> 
    .
  • 鼠标悬浮到评论中的 @someone 区域即可自动显示 someone 的评论内容.
 
 
  • 正在加载...