学习java第二季学习笔记

405 查看

学习java第二季学习笔记
主题一:类和对象
1.什么是类和对象
答:我们向来说什么是面向对象就是人面对这对象
对象:客观存在的都是对象
类:确定对象将拥有的特征(属性)和行为(方法)
类和对象的关系:类是抽象的概念,仅仅是模板,比如说手机,而对象是一个你可以看到,摸到的具体实体比如我的iPhone6s;详见下图:图片描述从字面上看:图片描述对于计算机来讲我们更关注对象的信息图片描述
例子:我们要买的苹果6s就是一个对象,卖家要我们描述手机的配置就是一个类,这里我们的描述只是抽象的不存在一个类;
2.如何定义java中的类
答:使用class来定义类,所有的java程序都以类为组织单元
public class MyClass{属性和方法};详见下图:图片描述图片描述
3.如何使用java中的对象
答:通过类名 对象名 = new 类名();这样我们就实例化个对象放到内存中
如Telphone phone = new Telphone(); 其中new Telphone()就是一个对象 ,Telphone()是个构造方法,通过phone来引用,可以phone.属性来调用对象属性,也可以phone.方法来调用对象的方法;详见下图:类是以代码形式保存到文件中,当我们把文件的信息放到内存当中,此时这些信息的集合就是对象(实例化)图片描述图片描述
4.java中的成员变量和局部变量
答:成员变量:在类中定义用来描述对象将要有什么;本类中的方法访问后其他类,也可以说是这个类都可见得;
局部变量:在类的方法中定义,在方法中临时保存数据;本方法中使用;
假如遇到变量名相同时,局部变量的优先级更高
详见下图:图片描述图片描述图片描述
不同类型的变量的默认值不同:
基本类型 默认值
byte 0
short 0
int 0
long 0L
float 0.0f
double 0.0d
char '\u0000'
boolean false
String的默认值为null
5.java中的构造方法
答:构造方法:用来创建个对象和初始化对象的属性,名称和类名相同并没有返回值
如:public Love(){},如果我们没有写构造方法,系统会默认生成一个无参数的构造方法,反之亦然;
详见下图:图片描述是没有返回值类型不是无返回值类型图片描述图片描述
6.java中的static使用之静态变量
答:Java 中被 static 修饰的成员称为静态成员或类成员。它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享;
详见下图:图片描述
7.java中的static使用之静态方法
答:与静态变量一样,我们也可以使用 static 修饰方法,称为静态方法或类方法。其实之前我们一直写的 main 方法就是静态方法
(1)、 静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员。
(2)、 在普通成员方法中,则可以直接访问同类的非静态变量和静态变量
(3)、 静态方法中不能直接调用非静态方法,需要通过对象来访问非静态方法。详见下图:图片描述图片描述

8.java中的static使用之静态初始化块
答(1)静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量。
(2)在类的声明中,可以包含多个初始化块,当创建类的实例时,就会依次执行这些代码块。如果使用 static 修饰初始化块,就称为静态初始化块。详见下图:图片描述图片描述图片描述
主题二:封装
9.什么是java中的封装
答:将类的信息隐藏到类内部,不允许外部程序直接访问,只是通过方法来访问和操作
封装步骤:属性设为private,使用getter/setter放来来操作属性,在getter/setter中可以限制访问和操作;详见下图:图片描述图片描述
10.使用包管理java中的类
答:包类似于文件夹,不同的包类可以相同
语法:package 报名; 必须要放到java源代码的第一行,包名间可以用“.”号来隔开,报名都是小写
例子:package com.myweb.MyClass;
11.java中的访问修饰符
答:访问修饰符可以修饰我们的属性和方法的范围;修饰方法和属性
private:本类
默认 本类和同包
protected:本类、同包、子类
public:本类、同包、子类、其他;详见下图:图片描述
例子:我们的钱包就是private,那默认情况下我自己可以,在一个房间的我媳妇也可以用,我儿子也可以用protected,public就是任何人都可以用
12.java中的this关键字
答this关键字代表当前对象;
this.属性操作当前对象的属性
封装对象时常用到this;
this.方法 调用当前对象的方法
详见下图:图片描述
13.什么是java中的内部类
答:内部类( Inner Class )就是定义在另外一个类里面的类。与之对应,包含内部类的类被称为外部类。
(1). 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类
(2). 内部类的方法可以直接访问外部类的所有数据,包括私有的数据
(3). 内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便
内部类可以分为以下几种:成员/静态/方法/匿名/内部类;
14.java中的成员内部类
答:(1)、 Inner 类定义在 Outer 类的内部,相当于 Outer 类的一个成员变量的位置,Inner 类可以使用任意访问控制符,如 public 、 protected 、 private 等
(2)、 Inner 类中定义的 test() 方法可以直接访问 Outer 类中的数据,而不受访问控制符的影响,如直接访问 Outer 类中的私有属性a
(3)、 定义了成员内部类后,必须使用外部类对象来创建内部类对象,而不能直接去 new 一个内部类对象,即:内部类 对象名 = 外部类对象.new 内部类( );
(4)、 编译上面的程序后,会发现产生了两个 .class 文件

其中,第二个是外部类的 .class 文件,第一个是内部类的 .class 文件,即成员内部类的 .class 文件总是这样:外部类名$内部类名.class
提示:
(3)、 外部类是不能直接使用内部类的成员和方法滴
可先创建内部类的对象,然后通过内部类的对象来访问其成员变量和方法。
(4)、 如果外部类和内部类具有相同的成员变量或方法,内部类默认访问自己的成员变量或方法,如果要访问外部类的成员变量,可以使用 this 关键字。
详见下图:图片描述图片描述图片描述图片描述
15.java中的静态内部类
答:(1)、 静态内部类不能直接访问外部类的非静态成员,但可以通过 new 外部类().成员 的方式访问
(2)、 如果外部类的静态成员与内部类的成员名称相同,可通过“类名.静态成员”访问外部类的静态成员;如果外部类的静态成员与内部类的成员名称不相同,则可通过“成员名”直接调用外部类的静态成员
(3)、 创建静态内部类的对象时,不需要外部类的对象,可以直接创建 内部类 对象名= new 内部类();
详见下图:图片描述图片描述
16.java中的方法内部类
答:方法内部类就是内部类定义在外部类的方法中,方法内部类只在该方法的内部可见,即只在该方法内可以使用。
一定要注意哦:由于方法内部类不能在外部类的方法以外的地方使用,因此方法内部类不能使用访问控制符和 static 修饰符。详见下图:图片描述方法内部类:只能用内对象来调用,可以访问外部类的所有资源;
主题三: 继承
17.java中的继承
答:java是单继承,有个好父亲就少奋斗
语法class 子类 extends 父类{*}
动物:父类
鸭:子类
有点像类和对象
详见图下:图片描述图片描述图片描述
18.java中的方法重写
答:重写方法后会优先掉用子类方法;详见图下:图片描述
19.java中的继承初始化的顺序
答:(1)初始化父亲再初始子类
(2)先执行初始化对象中的属性,在执行构造方法中的初始化
详见下图:图片描述
20.java中的final的使用
答:final就是最终的,
详见下图:图片描述
21.java中的super的使用
答:(1)在对象的内部使用,可以代表父类的对象
详见图:图片描述2)子类的构造过程当中必须调用父类的构造方法(隐式显示,也就是说不管咋样子类一定调用父类方法);
显示调用必须放到构造方法的第一行;
图片描述
22.java中的object类1
默认返回的是对象地址哈希值,要重写返回对象属性值(默认继承 Object 的 toString( ) 方法,输出对象引用地址哈希值)
详见图:图片描述图片描述图片描述继承关系:图片描述hash算法:图片描述重写toString方法后:图片描述

22.java中的object类11
答:默认的equal方法就是比较对象的引用是否指定同一块内存地址相等
但是我们生活中是通过属性是否相等来判断是否对象相等
详见图:图片描述dog可以看遥控器,对象看做事电视图片描述(1). 我丢的手机和你偷我的手机(不重写equal方法的情况)
(2). 我和我媳妇一起买的两个一模一样的iphone6s手机(重写equal方法后,通过属性来判断对象是否相等,来判断是否是相同的对象)图片描述在没有重写equal方法时(只是比较这两个对象的引用地址是否相等,由于我new了两次开辟了两个内存区域,所以两个对象的引用是不相同的):图片描述虽然是两个对象,但是我想判断对象的数据是否相同?哈哈就要重写equal方法

  1. 首先判断两个对象的引用是否相等
  2. 如果另外的对象是空
  3. 判断类对象是否相等
  4. 两个类的类型是相同的
  5. 判断属性值是否相等
    图片描述图片描述obj:我们关注的属性值的信息;obj.getClass;描述的类的胆码信息就是这个类有哪些属性,它是哪些类型,变量名是什么,有哪些方法图片描述
    主题四: 多态
    23.java中的多态
    答:多态:对象的多种状态(1引用的多态,2.方法的多态)
    继承是多态的基础
    详见图:图片描述(0)对象的引用
    (1)都是父类引用调用方法时,执行的是不同的方法
    (2)子类继承父类的方法:
    (3)父类的引用是不可以掉用子类独有的方法:
    图片描述
    24.多态中的引用类型装换
    答:详见下图:图片描述首先都有的dog引用,可以向上转换Animal类型的;但要是向下转换时由于它是一个Dog类型的不是Cat类型的
    所以不能转换成Cat类型的,所以再转换之前用instanceof来判断(要想向下类型转换必须先向上类型装换);
    图片描述
    25.java中的抽象类
    答:抽象类用abstract关键字来修饰(默认还有public)
    详见下图:(1)作用:继承的子类必须实现抽象类里所有的方法图片描述2)使用规则:抽象类里面的所有方法没有方法体图片描述抽象类中的子类要实现所有的方法?
    答:抽象类里面的抽象方法子类必须都要重写,而普通方法则看情况;
    接口是抽象类的一种特殊情况
    实现(implements)和继承(extends)是有区别的,实现要重写全部父类的,继承就不一定可以重写父类也可以不重写
    抽象类是可以有私有方法或私有变量(没有接口开放)
    例子:用父类来约束子类,智能机和普通电话都可以打电话和发信息(抽象类来定义),子类分别去实现,智能机可以通过语音来打电话和发信息,普通手机可以通过键盘来打电话和发信息。
    26.java中的接口
    答:实现接口必须实现接口里的所有方法
    详见下图:图片描述图片描述图片描述接口在定义时系统会自动加上abstract 如:abstract interface*;接口可以继承多个父接口:图片描述图片描述![图片描述]图片描述图片描述例子:又上面智能手机例子,这里定义一个接口定义方法打游戏,用智能机去实现;这里的游戏机可以打游戏所以也要实现这个接口;通过接口就可以描述连个不同类型的对象之间的共同特性:图片描述使用接口来引用来操作实例化对象,这里和抽象类一样:图片描述接口实现匿名内部类:图片描述图片描述图片描述
    总结接口一定用public abstract来修饰接口和方法,属性一定是用public static final来修饰(无敌开放);
    接口与抽象类的区别:
    简单来说,
    接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的,
    另外,实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法,一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。
    还有,接口可以实现多重继承,而一个类只能继承一个超类,但可以通过实现多个接口实现多重继承,接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用.

27.UML简介
答详见图下:图片描述图片描述图片描述图片描述图片描述图片描述图片描述图片描述图片描述图片描述使用PowerDesin来设计:
(1)新建类图:图片描述(2)编写类信息指定这个类是个抽象类:图片描述(3)使用继承箭头来实现类之间的继承关系:图片描述(4)重写父类的方法:图片描述(5)使用实现接口箭头来实现接口:图片描述(6)子类必须实现接口里所有的方法:图片描述图片描述(7)自动生成java单码:图片描述图片描述图片描述

课外题:
抽象方法必须在子类中实现,这句话对吗?
不正确
  包含抽象方法的类叫做抽象类。而抽象方法是类中指那些仅声明,并不做实现的方法。
  这些方法可以作为一个通用的接口,规范子类的实现。
  但是抽象类的子类并不一定就是实体类,也可以是另一个抽象类。在这种情况下,作为抽象类的子类,也可以不实现某些抽象方法,而是等待其子类去实现。
  不过对于继承了抽象类的实体类,则必须实现所有的抽象方法,否则无法用该类声明对象——这在语法上是不允许的。
  抽象方法往往被用做接口。在设计的时候,这种方法常常被用于那些需要和外部模块交互的类。这样可以屏蔽外部对实际工作类细节的了解,避免引入过多的可能导致bug的因素;另一方面,这样可以方便外部和内部交互,双方只要遵循接口的定义交互即可,减少内部对外部的依赖。