Java编程思想(Chapter2、4、6)
一切皆对象
用引用操纵对象
存储位置
作用域
{
int x =12;
{
int x = 96; //illegal
}
}
非法,不能隐藏。
{
String s = new String("str");
}
关于值传递还是引用传递的问题
一个方法不能修改一个基本数据类型的参数
一个方法可以改变一个对象参数的状态
一个方法不能让对象参数引用一个新的对象
初始化与清理
初始化顺序
public class Tag {
public Tag(int marker) {
System.out.println("tag"+marker);
}
}
public class Card {
Tag tag = new Tag(1);
public Card() {
System.out.println("card()");
tag3 = new Tag(33);
}
Tag tag2 = new Tag(2);
void f(){
System.out.println("f()");
}
Tag tag3 = new Tag(3);
}
public class Init01 {
public static void main(String[] args) {
Card card = new Card();
card.f();
}
}
Result
tag1
tag2
tag3
card()
tag33
f()
在此基础上,如果还有静态数据时,顺序如何?
public class Bowl {
public Bowl(int marker) {
System.out.println("bowl "+marker);
}
protected void f(int marker){
System.out.println("f "+marker);
}
}
public class Table {
static Bowl b1 = new Bowl(1);
public Table(){
System.out.println("table()");
b2.f(1);
}
void f2(int marker){
System.out.println("f2 "+marker);
}
static Bowl b2 =new Bowl(2);
}
public class Cupboard {
Bowl b3 =new Bowl(3);
static Bowl b4 = new Bowl(4);
Cupboard(){
System.out.println("cup()");
b4.f(2);
}
void f3(int marker){
System.out.println("f3 "+marker);
}
static Bowl b5 = new Bowl(5);
}
public class Test {
public static void main(String[] args) {
System.out.println("create cup in main");
new Cupboard();
System.out.println("create cup in main");
new Cupboard();
t2.f2(1);
t3.f3(1);
}
static Table t2 = new Table();
static Cupboard t3 = new Cupboard();
}
Result
bowl 1
bowl 2
table()
f 1
bowl 4
bowl 5
bowl 3
cup()
f 2
create cup in main
bowl 3
cup()
f 2
create cup in main
bowl 3
cup()
f 2
f2 1
f3 1
数组的初始化
复用类
带参数的构造器
public class C3 extends C2{
public C3(int i) {
super(i);//
System.out.println("c3");
}
public static void main(String[] args) {
new C3(1);
}
}
class C1{
public C1(int i) {
System.out.println("c1");
}
}
class C2 extends C1{
public C2(int i) {
super(i);//
System.out.println("c2");
}
}
初始化及类的加载
public class Insect {
protected int i = 9;
protected int j;
protected int x3 = print("static Insect.x3 init");
public Insect() {
System.out.println("i="+i+" ,j="+j);
j =39;
}
private static int x1 = print("static Insect.x1 init");
static int print(String s){
System.out.println(s);
return 47;
}
}
public class Beetle extends Insect{
private int k = print("Beetle.k init");
public Beetle() {
System.out.println("k="+k);
System.out.println("j="+j);
}
private static int x2 = print("static Beetle.x2 init");
public static void main(String[] args) {
System.out.println("Beetle construct");
Beetle beetle = new Beetle();
}
}
Result
static Insect.x1 init
static Beetle.x2 init
Beetle construct
static Insect.x3 init
i=9 ,j=0
Beetle.k init
k=47
j=39
可以看出,先进行类的加载,先基类再子类。static变量/块执行于类的初始化时期。new之后按照 先初始化再构造器的顺序执行。
Java编程思想(Chapter2、4、6)的更多相关文章
- JAVA编程思想(第四版)学习笔记----4.8 switch(知识点已更新)
switch语句和if-else语句不同,switch语句可以有多个可能的执行路径.在第四版java编程思想介绍switch语句的语法格式时写到: switch (integral-selector) ...
- 《Java编程思想》学习笔记(二)——类加载及执行顺序
<Java编程思想>学习笔记(二)--类加载及执行顺序 (这是很久之前写的,保存在印象笔记上,今天写在博客上.) 今天看Java编程思想,看到这样一道代码 //: OrderOfIniti ...
- #Java编程思想笔记(一)——static
Java编程思想笔记(一)--static 看<Java编程思想>已经有一段时间了,一直以来都把笔记做在印象笔记上,今天开始写博客来记录. 第一篇笔记来写static关键字. static ...
- [Java编程思想-学习笔记]第3章 操作符
3.1 更简单的打印语句 学习编程语言的通许遇到的第一个程序无非打印"Hello, world"了,然而在Java中要写成 System.out.println("He ...
- Java编程思想重点笔记(Java开发必看)
Java编程思想重点笔记(Java开发必看) Java编程思想,Java学习必读经典,不管是初学者还是大牛都值得一读,这里总结书中的重点知识,这些知识不仅经常出现在各大知名公司的笔试面试过程中,而 ...
- 《java编程思想》读书笔记(一)开篇&第五章(1)
2017 ---新篇章 今天终于找到阅读<java编程思想>这本书方法了,表示打开了一个新世界. 第一章:对象导论 内容不多但也有20页,主要是对整本书的一个概括.因为已经有过完整JAV ...
- Java编程思想——初始化与清理
PS:最近一直忙于项目开发..所以一直没有写博客..趁着空闲期间来一发.. 学习内容: 1.初始化 2.清理 1.初始化 虽然自己的Java基础还是比较良好的..但是在解读编程思想的时候还是发现了 ...
- java编程思想-复用类总结
今天继续读<java 编程思想>,读到了复用类一章,看到总结写的很好,现贴上来,给大家分享. 继承和组合都能从现有类型生成新类型.组合一般是将现有类型作为新类型底层实现的一部分来加以复用, ...
- 注解的基本盘点 -- 《Java编程思想》
注解(元数据)为我们在代码中添加信息提供了一种形式化的方法,使我们可以在之后的某一个时刻非常方便地使用这些数据. ---<Java编程思想> 其实注解可以理解为一个工具类,只要使用了这个工 ...
随机推荐
- 将 ASP.NET Core 1.0 应用作为 docker 镜像发布 (Linux版)
var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...
- [LeetCode]413 Arithmetic Slices
A sequence of number is called arithmetic if it consists of at least three elements and if the diffe ...
- WPF 自定义TextBox,可控制键盘输入内容
非原创,整理之前的代码的时候找出来的,可用,与大家分享一下! public class NumbericBoxWithZero : NumericBox { public NumbericBoxWit ...
- 初探Lambda表达式
简单例子 Expression<Func<; 了解Net方法,没有比IL来得更加容易.反编译IL代码如下(截取部分显示) [] <<int32, bool>> ex ...
- 带回调函数的js运动框架
function startMove(obj, json, endFun) { //开始前关闭之前obj上的定时器 clearInterval(obj.timer); //定时器 obj.timer ...
- .Net MVC中的路由
MVC中的URL也就是路由,不用通过路径访问实际的物理文件而达到向用户展示界面. URL的路由功能 一方面正向 映射到Controller和Action,根据用户输入的URL触发相应的控制器和对应方法 ...
- maven安装nexus私服
从nexus官网下载Nexus Repository Manager OSS 2.x的安装包:nexus-2.14.1-01-bundle.tar.gz,3.x版本需要jdk8及以上 解压 tar x ...
- Service简介
Service是在一段不定的时间运行在后台,不和用户交互应用组件.每个Service必须在manifest中 通过<service>来声明.可以通过contect.startservice ...
- mongoDB研究笔记:分片集群部署
前面几篇文章的分析复制集解决了数据库的备份与自动故障转移,但是围绕数据库的业务中当前还有两个方面的问题变得越来越重要.一是海量数据如何存储?二是如何高效的读写海量数据?尽管复制集也可以实现读写分析,如 ...
- 需要知道关于struct的一些事情
前言 重构代码的时候,会遇到长参数的方法,此时就需要使用“引入参数对象”来封装这些参数.大多数时候,这些参数都是简单类型,而且所有参数的值占用的空间也不是非常的大,此时使用对象真的好吗?对象的特性是堆 ...