1 定义类,成员变量和方法

类和对象

定义类

java的类名由一个或者多个有意义的单词组合而成,每个单词的首字母大写,其他的全部消协,并且单词之间没有分隔符。

成员变量:用于定义该类或者实例的所包含的状态数据。

方法:用于定义该类或者实例所包含的功能实现和行为特征。

构造器:用于构造该类的实例。

定义成员变量的语法格式:

[修饰符] 类型 成员变量名;

1,修饰符可以没有,也可以是public ,protected,private,static,final.前三个最多出现一个,可以与static final组合起来修饰成员变量

2,类型:任何类型,

3,成员变量名,第一个单词的首字母小写,其他的大写,用英文名词

4,默认值:定义成员变量可以指定一个可选的默认值。

定义方法的语法格式

[修饰符]返回值类型 方法名(形参列表)

//由0条或者多条可执行的语句构成的方法体

1,修饰符:可以省略,public protected private static final abstract 前三个可以出现一个,final和abstract 只能出现其中之一,他们与static组合起来修饰方法

2,返回值类型:任何类型。如果生命了返回值类型,必须有有效的return语句,否则用void.

3,方法名 ,基本和成员变量的一样,最好用英文动词。

4,形参列表:0组到多组的“参数类型 形参名,参数类型 形参名,,,”

static关键字

static修饰的成员表示他是属于类的,类变量类方法。也叫静态。静态成员不能直接访问非静态成员。

static真正的作用是用来区分成员变量,方法,内部类,初始化块属于类本身还是属于实例。

定义构造器语法格式

[修饰符] 构造器名 (形参列表)

1,修饰符可以是省略,public protected private其中之一

2,构造器名必须与类名相同

3,与方法的相同

java类的大致作用

定义变量

创建对象

调用类的类方法,或者访问类的类变量

创建并使用对象

对象的产生和使用

Person p=new Person();

p.say("你真棒");

p.name(“李刚”);//直接给成员变量赋值

对象和引用

堆里面的对象可以有多个引用。

Person p1=p;

这时p1和p指向同一个对象。

如果希望通知垃圾回收机制回收某个对象,把引用变量赋值为null

this

this关键字总是指向调用该方法的对象,谁调用它,他就指向谁,就可以获取成员变量和方法。

public class Dog {

public void jump()

{

System.out.println("正在执行jump方法");

}

public void run()

{

//如果想在这个方法里面调用另一个方法

//如果没有this,则必须再创建一个对象

//有了this,就不需要创建了,因为this就是指向调用该方法的对象

this.jump();

jump();

}

static修饰的方法,是用类来直接调用的,因此不需要再创建一个对象,因此也就不使用this,因此static对象不能访问非静态成员

public class StaticAccessNonStatic {

public void info()

{

System.out.println("简单的方法");

}

public static void main(String[] args) {

// TODO Auto-generated method stub

new StaticAccessNonStatic().info();

}

}

大部分时候,普通方法访问其他方法,成员变量无需使用this,但是如果方法里面有局部变量和成员变量同名,但是又需要在方法里面访问,则必须适应this

this也可以用于构造器作为默认引用。代表构造器正在初始化的对象。

public class ThisInConstructor {

//定义一个名为foo的成员变量

public int foo;

public ThisInConstructor ()

{

// 在构造器中又定义了一个foo

//this代表正在初始化的对象,把他的foo成员变量设为6

int foo=0;

this.foo=6;

}

this还可以作为普通方法的返回值,表示返回调用该方法的对象

方法必须属于类或者对象

java里面的类不能独立存在,必须放在类里面

方法的所属性

2 java方法的参数传递机制

值传递

参数传递方式是一种值传递方式。也就是实参的副本保存在形参中。如果形参是基本类型,那么方法中对形参的修改不会改变实参;如果形参是引用类型,仍然是指传递,由于引用类型是指针,保存的是地址,所以方法中对形参的修改会改变实参的值,但是如果在方法中把形参的引用赋值为null,则实参不会改变。

class DataWrap

{

int a;

int b;

}

public class ReferenceTransferTest {

public static void swap(DataWrap dw)

{

int temp=dw.a;

dw.a=dw.b;

dw.b=temp;

System.out.println("在swap方法里面a是"+dw.a+"b是"+dw.b);

}

public static void main(String[] args) {

// TODO Auto-generated method stub

ReferenceTransferTest rf=new ReferenceTransferTest();

DataWrap dw=new DataWrap();

dw.a=9;

dw.b=4;

rf.swap(dw);

System.out.println("交换结束后a是"+dw.a+"b是"+dw.b);

}

}

参数个数可变的方法

在最后一个形参的类型后面加上"...", 表示形参可以接受多个参数。本质上就是一个数组类型的形参。传入的实参可以是多个参数,也可以是一个数组。

但是参数个数可变的形参必须处于形参列表的最后,且只能有一个。

如果形参是数组的话,传递的方式是

test(new String[]{"abs","cps"});

如果形参时参数可变的,传递方式除了上边的方式,还可以是

test("abs","cds");

public class Varargs {

//定义一个参数可变的方法

public static void test(int a,String ...books)

{

//books被当作数组处理

for(String tmp:books)

{

System.out.println(tmp);

}

}

public static void main(String[] args) {

// TODO Auto-generated method stub

test(4,"ans","csd");

}

}

3 递归方法

定义:一个方法体内调用自身。

只要一个方法的方法体实现中再次调用了自身方法,就是递归。递归必须向已知方向递归

public class Recursive {

public static int fn(int n)

{

if(n==1)

{

return 1;

}else if(n==2)

{

return 2;

}

else

{

//方法中调用自身

return 2*fn(n-1)+fn(n-2);

}

}

public static void main(String[] args) {

// TODO Auto-generated method stub

System.out.println(fn(10));

}

}

4 方法的重载

“两同一不同”

同一个类中方法名相同,参数列表不同。

注意被重载的方法里面包含了参数可变的形参。

public class OverloadVarargs {

public void test(String msg)

{

System.out.println("只有一个形参的test方法");

}

public void test(String ... books)

{

System.out.println("多个形参的test方法");

}

public static void main(String[] args) {

// TODO Auto-generated method stub

OverloadVarargs olV =new OverloadVarargs();

olV.test("aa");

olV.test("bb","cc","dd");

olV.test();

olV.test(new String[]{"aa"});

}

}

5 成员变量和局部变量

必须先给方法局部变量和代码块局部变量现实初始化,即指定初始值。否则不可以访问。

一个类不能有两个同名的成员变量,一个方法也不能有两个同名的方法局部变量。但是两个代码块里面的代码块局部变量可以同名。

如果先定义代码块局部变量,后定义方法局部变量。代码块和方法里面的局部变量也可以同名。

允许局部变量和成员变量同名。此时局部变量覆盖成员变量,如果想访问成员变量,要用this。

成员变量的初始化和内存中的运行机制

类变量和成员变量都在堆中保存。只是不再同一个地方。成员变量属于实例,类变量属于类。

局部变量的初始化和内存中的运行机制

局部变量保存在栈中,不需要垃圾回收,占的内存很小。直到被付初值才会被分配内存

变量的使用规则

成员变量的使用情形

某个类或者实例的固有信息。如果个个实例都是一样的,用类变量。如果不是一样的,用实例变量。

保存该类或者实例运行时候的状态信息。

多个方法都要用到。

6 实现良好的封装

理解封装

通过访问控制符把该隐藏的隐藏起来,该暴露的暴露出来。

使用访问控制符

private 类访问权限

default 包访问权限

protected 子类访问权限

public 公共访问权限

关于访问控制符的使用

绝大部分成员变量都用private,只有少部分用static,类似全局变量的成员变量用public。除此之外,辅助实现该类的其他方法的工具类也用private。

如果某个类主要做其他类的父类,则用protected.

构造器用public。大部分外部类用public。

7 使用package和import

package ,import,import static

同一个包下的类可以自由访问,但是子包里面的还是必须要写全名

import可以导入包下面的全部类,子包单独import

import static导入静态成员变量,方法

java 常用包

8 构造器的作用和构造器重载

8.1使用构造器执行初始化

在系统执行构造器的执行体之前,系统已经创建了一个对象,只是还不能被外部访问。

9 继承的特点和用法

9.1继承的特点

java是单继承,只能有一个直接父类,但是可以有多个间接父类。

子类是父类的扩展。子类不能获得父类的构造函数。

10 重写父类方法

如果子类对于继承下来的父类的方法不满意,可以重写这个方法。

‘两同两小一大原则’

“两同” 方法名相同,参数列表相同

“两小” 返回值类型要小,抛出的异常要小

“一大” 权限要大

重载和重写:是两个东西。重载是一个类的多个方法,由于形参列表不同所以不同;重写是子类又写了一个和父类对应的方法。

11 super关键字的用法

super用来限定该对象调用父类被覆盖的实例方法。不能够用于static修饰的方法中,因为static是作用于类的。

创建一个子类对象时,系统会给该类中定义的实例变量和父类继承来的实力变量分配内存,即使二者同名。

11.2调用父类构造器

用super可以显式调用父类构造器。必须出现在子类构造器执行体的第一行,因此不能和this同时出现。

当调用子类构造器初始化子类对象,父类构造器一定会在子类构造器之前执行。

12 继承和多态

12.1多态性

java引用变量有两个类型,一个是编译时候的类型,一个是运行时候的类型。编译时候的类型和声明的类型相同,运行时候的类型由实际赋给该变量的对象决定。称为多态。

相同类型的变量,调用同一个方法时呈现出多种不同的行为特征,这就是多态。

成员变量不具有多态性。

12.2 引用变量的强制类型转换

如果想让引用变量调用它运行时的类型的方法,则需要强制类型转换。只能是具有继承关系的两个类型之间。如果是两个没有任何关系的,无法通过编译。如果父类实例转化成子类实例,则这个对象在运行时候必须是子类实例才行,否则会有异常。用instanceof处理。

12.3 instanceof运算符

instanceof运算符前一个是引用变量,后一个是一个类型。用于判断前面的对象是不是后面的类,或者是不是他的子类,或者实现类的实例。如果是,返回true

前面操作数的编译时候的类型要么和后面的类型相同,要么和后面的有父子继承关系(不一定是子类,可以是父类),否则编译有错误。

编译想通过的话,只要有继承关系就行。想返回true,前面的不能是后 面的父类。

13 继承和组合的关系

13.1 使用继承的注意点

尽量隐藏父类的内部数据

不要让子类可以随便访问更改父类的方法。辅助方法设置成private;

如果父类中的方法需要被外部类调用,但是又不想让子类重写这个方法,可以加final;

如果希望子类重写该方法,但是不希望其他类自由调用,用protected

父类的构造器里面不要有子类会修改的方法。否则容易出现空指针。

因为创建子类的对象的时候,一定会先调用父类的构造器,构造器里面调用的方法已经被子类覆盖,所以运行时用的方法是子类的方法。但是子类还没有创建,因此会有空指针的可能性。

什么时候从父类派生子类?

增加了新的属性

增加了新的方法

使用组合来实现复用

组合是一种“has”的关系,譬如人有胳膊,腿。

组合和继承的开销一样。

至于怎么用的,书里面写的太少了。没有看明白

先定义private的父类的成员变量,然后在子类的构造器的形参中加入这个成员变量。然后把父类里面所有的public再写一次。(父类子类并不是这样,只是我不知道怎么能够说清楚)

13 构造器和初始化块的作用及区别

13.1 使用初始化块

java类里面可以出现的第四种成员。修饰符只能是static。当创建java对象时,总是先调用该类里面定义的初始化模块,再调用构造函数。

13.2 初始化块和构造器

如果两个构造器里面有相同的代码初始化代码,且这些初始化代码无需接受参数,就可以把它们放在初始化块中定义。

13.3 静态初始化块

如果希望加载类时,对整个类进行某些初始化操作,使用static关键字来修饰初始化模块。叫做类初始化块。

java疯狂讲义第四版第五章答案_疯狂java讲义第五章笔记相关推荐

  1. 疯狂java的第四章答案_疯狂java讲义第四章第一题

    package chapter04; /**** * 本帖最后由 kongyeeku 于 2012-3-11 23:02 编辑 看到有一些读者询问关于该题的解题思路,其实这个题是有一些很绕的地方. 大 ...

  2. 微波技术与天线第四版王新稳电子版_展会回顾|第十五届中国国际微波及天线技术展览会在上海圆满落幕!...

    更多精彩内容请关注我们 01 上海 IME 活动现场回顾 展会精彩瞬间 2020年10月29日,第十五届中国国际微波及天线技术展览会(IME/China 2020)在上海世博展览馆圆满落幕.这是集射频 ...

  3. python第五单元答案_中国大学MOOC第五单元测试答案_数据结构与算法Python版慕课答案在哪里可以看...

    计算机系统安全通常指的是一种机制,即______.A.只有被授权的人才能使用其相应的资源B.自己的 系统在规定条件下和规定时间内完成规定的功能,这一属性指的是____.A.保密性B.完整性C.可用性D ...

  4. python程序设计第五章答案_中国大学MOOC第五章单元测试答案_Python程序设计期末答案...

    读"中国地形图"回答以下问题(1)我国某省级行政区的地形特征通常描述为"三山夹两盆"这里三山是指图中:①是___ 读我国沿北纬32附近地形剖面图,完成下列问题. ...

  5. Java编程思想第四版——第十五天

    2012-04-23 121-131/913 Java编程思想第四版--第十五天 5.5.3 终结条件 通常不能指望finalize(),必须创建其他的"清理"方法,并明确的调用它 ...

  6. Java编程思想第四版学习总结

    Java编程思想第四版学习总结 文章目录 Java编程思想第四版学习总结 第 1 章 对象入门 1.1 抽象的进步 1.2 对象的接口 1.3 实现方案的隐藏 1.4 方案的重复使用 1.5 继承:重 ...

  7. 计量经济学 第四版 庞皓 课后答案

    某天某人交给我一个任务:让我找到计量经济学 第四版 庞皓 课后答案 通过努力终于找到了第四版的课后练习题的答案,对照教材确认无误 第一章无练习题 第二章 2.1 表2.9中是中国历年国内旅游总花费(Y ...

  8. 开源新作!疯狂java讲义第四版

    一.内存与线程 1.内存结构 内存是计算机的重要部件之一,它是外存与CPU进行沟通的桥梁,计算机中所有程序的运行都在内存中进行,内存性能的强弱影响计算机整体发挥的水平.JVM的内存结构规定Java程序 ...

  9. java编程思想第四版第十四章 类型信息习题

    fda dfa 第三题u package net.mindview.typeinfo.test4;import java.util.ArrayList; import java.util.Arrays ...

最新文章

  1. vuepdf转换html,Vue网页html转换PDF(最低兼容ie10)的思路详解
  2. 【转载记录】Accessing Device Drivers from C#
  3. 计算机信息科学与应用技术学术论,第三届计算机信息科学与应用技术国际学术论坛(ISCISAT .DOC...
  4. 逆向project实战--Afkayas.1
  5. gpasswd 附属组管理,添加用户到附属组中
  6. 虚幻4引擎开发的手游_掌上视觉进化,盘点近年虚幻4引擎开发的手游大作
  7. 终端字符乱码解决方法
  8. 详解黑客的攻击方式1---网络欺骗攻击
  9. 如何获取手机app的签名
  10. 子网划分的计算与可用主机数
  11. Scala——函数式编程、面向对象
  12. php yar2,[原]PHP-yar拓展源码解读二-protocol篇
  13. 探索设计模式之六——单例模式
  14. MSI B450迫击炮装机常见问题解决方法
  15. 不同坐标系下角速度_轨道、重力场与坐标系的混乱关系
  16. 用 Jupyter Notebook 爬取微博图片保存本地!
  17. 鸿蒙os手机评测视频,鸿蒙OS正式发布:荣耀智慧屏首发,一起来体验鸿蒙OS吧
  18. 在Windows上挂载磁盘为非445端口的SAMBA服务(原创)
  19. MySQL 表分区?涨知识了
  20. 众包置信度:改进众包数据标记的贝叶斯推断

热门文章

  1. python练习一(对txt文本的操作:切割,切片,格式化输出)
  2. 各类开发、设计、动画使用软件语言
  3. Pulsar集群 监听mysql8的binlog
  4. ChatGPT教程之 02 ChatGPT 正在经历托马斯爱迪生的时刻,为什么需要获得突破性技术
  5. 编写一个将用户输入的信息输出到网页的js程序 和 用if else验证用户输入的密码是否正确(两个代码)
  6. 【高等数学基础进阶】定积分与反常积分-定积分
  7. JAVA基础之基本类型
  8. 关于将pem证书转为jellyfin可以使用的pkcs12证书
  9. 冰封王座 英雄被动技能评估
  10. Google 国内外镜像地址: