Java逍遥游记读书笔记

前言

必须先来一句,这是入门级别,高手勿喷~

写Android的时候总有一些语句不是很理解,其实大部分是Java的内容,所以想系统的学下Java。

这本书——《Java逍遥游记》是在图书馆偶然看到的,被横放在书架上,看来是被人翻过直接丢那里了,索性拿来看一看。

很基础的一本书,废话很多,比如孙悟空想学编程什么什么的,但可以理解作者的一片苦心。既然如此水,那就把它借回来想快速扫一下以增加成就感,用一种查漏补缺的态度,看到哪里不会就记下来,最终目标就是这本书就作废了,对我有价值的东西都在笔记上,所以就有了这几篇笔记。

Anyway,一千个人眼中有一千个哈姆雷特,我记下的东西不一定适合所有人,这里面既有Java的内容,也有些是我在学C++的时候的一些遗漏(语言都是相通的~),所以抱着交流学习的态度的同时更多的是对自己知识的归纳整理。若这些东西对你有用,那便是极好的。

另外大神读书都是1,2天一本,我做不到,但还是力求能快速看完,截止到现在2013-09-22 20:20:14,已看完1-9章,剩下的10-22章,暂定一个星期,在国庆节到来之前结束这本书的阅读,同时做好笔记。

HelloWorld

一、前提:已安装好Jdk。

二、配置环境变量:

新建环境变量JAVA_HOME:F:\JDK      (这是我的路径)

编辑path变量:添加%JAVA_HOME%\bin;

编辑CLASSPATH变量:C:\Users\Administrator\Desktop;

有必要解释下ClassPath变量,你通过javac编译出来的.class文件必须放置在ClassPath中任意路径中,才能运行成功,比如我把Hello.class放在桌面,那么为了运行成功,我就在ClassPath中添加桌面的路径C:\Users\Administrator\Desktop;否则会出现

错误:找不到或无法加载主类

运行cmd

定位到Hello.java所在位置

键入javac Hello.java

键入 java Hello (注意没有.class)

public class Hello
{
public static void main(String[] args)
{
System.out.println("Hello, world!");
}
}

Hello.java

public class Hello
{
public static void main(String[] args)
{
System.out.println("Hello, world!");
}
}

程序入口main函数

必须是public,static,void,String数组参数,缺一不可。

public static void main(String[] args){}

Java的编译与运行

Java源文件结构

每个Java源文件可以有多个类的定义,但最多只能有一个类是public的,而且该源文件必须以public类的名字命名。

(注:Java中类的定义后面分号不是必须的)

public class Test{}

class Sample1{}

class Sample2{}
public class Test{}

class Sample1{}

class Sample2{}

包的引入

假如com.java.school里有一些类,同时还有一个文件夹classes,那么

import com.java.school.*;

只会引入school根目录下的所有类(*表示所有),而不会引入classes目录下的类。若还想继续引用classes下的类,则应当这样写。

import com.java.school.*;
import com.java.school.classes.*;

编程规范

  • 类:所有单词首字母大写。如Monkey、SmartMonkey
  • 方法和变量:首字母小写,其余单词首字母大写。如add、listAll
  • 包:全部小写。如com.java.school.classes
  • 常量:全部大写,若多个单词则加下划线隔开。如final String COLOR_OF_MONKET = “red”;

实例变量和静态变量(类变量)

  • 无论你创建了多少实例,类的静态变量在内存中只有一个,被类的所有实例共享。
  • 静态变量可以通过实例名访问,也可以通过类名被访问。
  • 每创建一个实例,系统就会为实例变量分配一次内存。
  • 实例变量只能通过实例名访问。

具体看下例子就可以懂了。

public class Person
{
public int id = 0; //Java支持在声明时初始化

public static int sum = 0; //Java支持在声明时初始化

public Person()
{
id++;

sum++;
}

public static void main(String[] args)
{
Person p1 = new Person();

Person p2 = new Person();

System.out.println(p1.id); //输出1

System.out.println(p2.id); //输出1

System.out.println(Person.sum); //输出2 静态变量可以通过类名访问
}
}

Person.java

Person.java

public class Person
{
public int id = 0; //Java支持在声明时初始化 public static int sum = 0; //Java支持在声明时初始化 public Person()
{
id++; sum++;
} public static void main(String[] args)
{
Person p1 = new Person(); Person p2 = new Person(); System.out.println(p1.id); //输出1 System.out.println(p2.id); //输出1 System.out.println(Person.sum); //输出2 静态变量可以通过类名访问
}
} Person.java

操作符& |

&&和&都是与操作,那么有什么区别呢?

public class Test
{
public static void main(String[] args)
{
int a = -1, b = -1;
if ((a = 0) == 1 && (b = 1) == 1)
{}
System.out.println(a); //输出0赋值成功
System.out.println(b); //输出-1赋值失败

a = -1; b = -1;
if ((a = 0) == 1 & (b = 1) == 1)
{}
System.out.println(a); //输出0赋值成功
System.out.println(b); //输出1赋值成功
}
}

Test.java

public class Test
{
public static void main(String[] args)
{
int a = -1, b = -1;
if ((a = 0) == 1 && (b = 1) == 1)
{}
System.out.println(a); //输出0赋值成功
System.out.println(b); //输出-1赋值失败 a = -1; b = -1;
if ((a = 0) == 1 & (b = 1) == 1)
{}
System.out.println(a); //输出0赋值成功
System.out.println(b); //输出1赋值成功
}
}

可以看到,当第一条件判断为false的时候,&&是不会继续执行、判断第二个条件的,但&会。|也同理。

==操作符与equals()方法

这个已经被坑过很多很多次了。String的比较全部用equals()不能用==就一定不会错……

若是基本类型,如int,double,string等等,用==就可以比较相等。

若是引用类型,如String,Integer或自己写的类等等,用==比较的是是否同一个对象(内存地址是否相同),但我们一般要比价的是内容,所以应该有equals()方法。

public class Test
{
public static void main(String[] args)
{
String s1 = "123", s2 = "123";

String s3 = new String("123"), s4 = new String("123");

String s5 = s3;

System.out.println(s1 == s2); //true

System.out.println(s3 == s4); //false

System.out.println(s3 == s5); //true

System.out.println(s3.equals(s4)); //true

Integer i1 = new Integer(1), i2 = new Integer(1);

System.out.println(i1 == i2); //false

System.out.println(i1.equals(i2)); //true
}
}

Test.java

public class Test
{
public static void main(String[] args)
{
String s1 = "123", s2 = "123"; String s3 = new String("123"), s4 = new String("123"); String s5 = s3; System.out.println(s1 == s2); //true System.out.println(s3 == s4); //false System.out.println(s3 == s5); //true System.out.println(s3.equals(s4)); //true Integer i1 = new Integer(1), i2 = new Integer(1); System.out.println(i1 == i2); //false System.out.println(i1.equals(i2)); //true
}
}

必要时可以覆盖equals()方法

public class Student
{
public String name;

public int age;

public boolean equals(Object o)
{
if (this == o)
return true;
if (!(o instanceof Student)) //判断是否Student的实例
return false;

final Student student = (Student)o; //强制类型转换

return this.name.equals(student.name);
}

public Student(String name, int age)
{
this.name = name;

this.age = age;
}

public static void main(String[] args)
{
Student m1 = new Student("Norcy", 22), m2 = new Student("Fiona", 21), m3 = new Student("Norcy", 23);

System.out.println(m1.equals(m2)); //false

System.out.println(m1.equals(m3)); //true
}

}

Student.java

public class Student
{
public String name; public int age; public boolean equals(Object o)
{
if (this == o)
return true;
if (!(o instanceof Student)) //判断是否Student的实例
return false; final Student student = (Student)o; //强制类型转换 return this.name.equals(student.name);
} public Student(String name, int age)
{
this.name = name; this.age = age;
} public static void main(String[] args)
{
Student m1 = new Student("Norcy", 22), m2 = new Student("Fiona", 21), m3 = new Student("Norcy", 23); System.out.println(m1.equals(m2)); //false System.out.println(m1.equals(m3)); //true
} }

instanceof操作符

判断一个对象是否为一个类的实例。

假如s1是Student类的实例,那么对于表达式“s instanceof XXX”,当XXX为以下值的时候,表达式的值为true.

  • Student
  • Student的直接父类或间接父类(即祖先)
  • Student类实现的接口的名字(接口是什么,以后再学)

4种访问控制级别

public    对外公开

protected  向子类和同一个包中的所有类公开

默认     向同一个包中的所有类公开

private     只有类本身可以访问,不对外公开

访问级别:public > protected > default > private

若一个子类与父类在不同包,则这种情况属于不同包,不属于子类。

访问级别

同类

同包

子类

不同包

public

protected

默认

private

Nice To Meet You! 请多多指教哈~
 
分类: Java
标签: Java

Java读书笔记1的更多相关文章

  1. think in java 读书笔记 3 —— 数据报

    目录 think in java 读书笔记 1 ——移位 think in java 读书笔记 2 —— 套接字 think in java 读书笔记 3 —— 数据报 概要 1. 数据报基本知识 2 ...

  2. think in java 读书笔记 2 —— 套接字

    目录 think in java 读书笔记 1 ——移位 think in java 读书笔记 2 —— 套接字 think in java 读书笔记 3 —— 数据报 概要 1. 套接字基本知识 2 ...

  3. think in java 读书笔记 1 ——移位

    目录 think in java 读书笔记 1 ——移位 think in java 读书笔记 2 —— 套接字 think in java 读书笔记 3 —— 数据报 在Think in Java中 ...

  4. Thinking In Java读书笔记--对象导论

    Thinking In Java读书笔记--对象导论[对象]服务提供者==>将对象看做一个服务提供者[程序员分类][类创造者]/[客户端程序员] [访问控制存在的原因?][1]客户端程序员无法触 ...

  5. head first java读书笔记

    head first java读书笔记 1. 基本信息 页数:689 阅读起止日期:20170104-20170215 2. 标签 Java入门 3. 价值 8分 4. 主题 使用面向对象的思路介绍J ...

  6. java读书笔记二

    这是我的一些读书笔记: 我研究了一下面向对象: 面向对象符合人类看待事物的一般规律,对象的方法的实现细节是包装的,只有对象方法的实现者了解细节 我觉得面向过程是由过程.步骤.函数组成,过程是核心,面向 ...

  7. Effective Java读书笔记完结啦

    Effective Java是一本经典的书, 很实用的Java进阶读物, 提供了各个方面的best practices. 最近终于做完了Effective Java的读书笔记, 发布出来与大家共享. ...

  8. Effective java读书笔记

    2015年进步很小,看的书也不是很多,感觉自己都要废了,2016是沉淀的一年,在这一年中要不断学习.看书,努力提升自己 计在16年要看12本书,主要涉及java基础.Spring研究.java并发.J ...

  9. 【java读书笔记】——java开篇宏观把控 + HelloWorld

    学完java有一段时间了,一直没有做对应的总结,总认为有一种缺憾.从这篇博客開始,将自己平时的学习笔记进行总结归纳,分享给大家. 这篇博客主要简单的介绍一下java的基础知识,基本的目的是扫盲.原来仅 ...

随机推荐

  1. 解决Unity3d 4.3 动画系统带来的烦恼

    近期有非常多同学问我关于unity3d 4.3更新之后动画系统和曾经不一样了,并且之前用的非常熟练的创建动画和修修改画非常多操作都不好用了,那么在这里和大家分享一下三杀的个人经验,方便大家使用unit ...

  2. Swift游戏开发实战教程(霸内部信息大学)

    Swift游戏开发实战教程(大学霸内部资料) 试读下载地址:http://pan.baidu.com/s/1sj7DvQH 介绍:本教程是国内第一本Swift游戏开发专向资料. 本教程具体解说记忆配对 ...

  3. Asp.net实现URL重写

    原文:Asp.net实现URL重写 [概述] URL重写就是首先获得一个进入的URL请求然后把它重新写成网站可以处理的另一个URL的过程.重写URL是非常有用的一个功能,因为它可以让你提高搜索引擎阅读 ...

  4. 详细的图文介绍如何利用XAMPP本地建站的环境配置教程

    原文:详细的图文介绍如何利用XAMPP本地建站的环境配置教程 WordPress 是一个简便快捷,用途广,人气旺的一个开源的博客建站程序.很有很多等您去发现. 简便快捷:在性能上易于操作.易于浏览: ...

  5. [CLR via C#]1.2 将托管模块合并成程序集

    原文:[CLR via C#]1.2 将托管模块合并成程序集 1.CLR是不和托管模块一起工作的,CLR是和程序集一起工作的. 2. 程序集是一个或多个托管模块/资源文件的逻辑性分组.   3. 程序 ...

  6. C#中使用ref 和 out 的一点认识

    ref 通常我们向方法中传递的是值,方法获得的是这些值的一个拷贝,然后使用这些拷贝,当方法运行完毕后,这些拷贝将被丢弃,而原来的值不会受到影响. 这种情况是通常的,当然还有另外一种情况,我们向方法传递 ...

  7. Archlinux YouCompleteMe+syntastic vim自己主动补全插件,显示缩进和状态栏美化,爽心悦目的vim

    Archlinux 安装和配置vim补全插件YouCompleteMe的过程. 參考: https://github.com/Valloric/YouCompleteMe https://github ...

  8. Swift入门教程:基本运算符

    基本运算符 Swift所支持的基本运算符 赋值运算符:= 复合赋值运算符:+=.-= 算数运算符:+.-.*./ 求余运算符:% 自增.自减运算符:++.-- 比较运算符:==.!=.>.< ...

  9. oracle 电子商务解决方案讲义

    1. 电商营销(CRM) - 高端客户体验 2. 当当网李国庆做 "千千面"购物体验 3. 所使用的唯一的产品oracle的CRM 4. 个人的事情.谁在世界上是用户体验. 5. ...

  10. ios基金会-XCode温馨提示

    (一个)代号规格pragma mark 1.定义 #pragma 开头的代码是一条编译器指令,是一个特定于程序或编译器的指令. 不一定适用于其他编译器或其他环境.假设编译器不能识别该指令.则会将其忽略 ...