面向对象(下)

1. Instanceof

我们可以通过Instanceof关键词可以判断当前对象是否为某某类得父类

Object instanceof Student //true

注意:只有是两个类存在父子关系的时候,instanceof才会返回true

package pro;
import pro.Student; public class App {
public static void main(String[] args){
Object obj = new Student(); System.out.println(obj instanceof Student); //true
System.out.println(obj instanceof Person); //true
System.out.println(obj instanceof String); //false
System.out.println(obj instanceof Teacher); //false
}
}

如果比较两者之间没有一点联系的话在编译的时候就会报错

package pro;
import pro.Student; public class App {
public static void main(String[] args){
Object obj = new Student();
Student stu = new Student();
System.out.println(obj instanceof Student); //true
System.out.println(obj instanceof Person); //true
System.out.println(obj instanceof String); //false
System.out.println(obj instanceof Teacher); //false
System.out.println(stu instanceof String); //error
}
}

语法规则:X instance Y

  • 判断是否才父子关系返回true
  • X指向的子类型和Y有关系的也会返回true

2.static

static关键词修饰方法的时候我们称为静态方法

static关键词修饰属性的时候我们称为静态属性

区别:

  • 被static修饰的属性或者方法可以直接在main方法内部调用,也可以通过创建创建类的方法调用
  • 不被static修饰的属性或者方法只能通过创建类的方法调用
package pro;
import pro.Student; public class App {
static int num1 = 10;
int num2 = 103; static void run(){ } void running(){ }
public static void main(String[] args){
App ap = new App();
System.out.println(ap.num2); //true
System.out.println(ap.num1); //true num1 = 20; //true
num2 = 20; //error ap.running(); //true
ap.run(); //true run(); //true
running()//error }
}

3.匿名代码块

在Java中可以使用两个花括号来定义一个匿名代码块,如果使用static修饰匿名代码块,那么被修饰的匿名代码块就会在程序开始就创建且只执行一次

package pro;
import pro.Student; public class App { {
System.out.println("匿名代码块"); // 2
} static{
System.out.println("static"); // 1
} App(){
System.out.println("App"); // 3
}
public static void main(String[] args){
App ap1 = new App();
System.out.println("=======");
App ap2 = new App(); }
}

通过上面的代码我们可以得出,程序运行时,执行的顺序是

静态代码块 =>匿名代码块=>构造器

在第二次创建App对象ap2时,静态代码将不再执行

匿名代码块===>构造器

拓展:静态导入包

可以通过static来修饰类的方法,方便直接调用

package pro;
import static java.lang.Math.random; public class App {
public static void main(String[] args){
System.out.println(random());
}
}

拓展:final修饰类

如果一个类被final修饰,那么这个类就不能被继承了

3.抽象类

一个比类还抽象的抽象类

在Java中可以通过abstract关键词来修饰类,则类即为抽象类

如果absctrat关键词来修饰方法的话,那么方法为就是抽象方法

package pro;

public abstract class Worker {
public abstract void doSomething();
}

抽象方法:只有定义没有实现,具体的实现由子类来实现

注意:抽象化方法只能在抽象类中定义,子类方法继承抽象类的父类,必须实例化里面的抽象方法,除非子类也是抽象类方法

package pro;

public class Teacher extends Worker{

    public void doSomething(){

    }
}

不能new 一个抽象类,只能靠子类去实现它

但可以在new的过程中去实现抽象方法

抽象类是单继承

4.接口

普通类:只有具体实现

抽象类:具体事项和规范(抽象方法)都有

接口:只有规范!方法自己写

接口的本质的就是契约!!!

在创建一个Java文件中,可以通过interface去替换闯创建Java文件的class关键词,达到定义接口的效果

package pro;

public interface UserC {

}

接口里面的方法,都是public的抽象类方法

package pro;

public interface UserC {
void add(String temp);
void delete(int id);
void change(int id,String temp);
void search(String temp);
void search(int id);
}

对此可以创建一个类通过implements去继承我们的接口(必须去实现接口中函数的方法

package jk;

public class UserCImpl implements UserC{
public void add(String name){ }
public void change(int id,String temp){ }
public void delete(int id){ }
public void search(int id){ }
public void search(String name){ } }

接口不同于抽象类,接口可以实现多继承,可以创建以下接口

package jk;

public interface Time {
void timer();
}

通过前面的例子,通过都好分割实现多接口继承

package jk;

public class UserCImpl implements UserC,Time{
public void add(String name){ }
public void change(int id,String temp){ }
public void delete(int id){ }
public void search(int id){ }
public void search(String name){ }
public void timer(){ } }

总结

  • 约束

  • 定义一些方法,让不同的人实现

  • 在接口定义的属性,都是常量(一般不这么用)

  • 接口不能被实例化 接口中没有构造方法

  • 接口可以实现多个接口

    • 必须要重写接口的方法

5.Java内部类

在一个类的内部再写一个类就叫内部类

内部类


在Java中我们可以在一个类的内部在创建一个类,可以通过外部类方法去new一个外部类中的内部类

package outerClass;

import java.sql.SQLOutput;

//这是外部类
public class Outer { private int id = 10; public void say(){
System.out.println("这是外部类");
} //这是内部类
public class In{
public void main(){
System.out.println("这是内部类");
} public void getId(){
System.out.println(id); //id?
}
}
}

创建一个App的主方法去创建new一个In对象

package outerClass;

public class App {
public static void main(String[] args) {
Outer outer = new Outer();
Outer.In in = outer.new In();
}
}

根据上例代码,我们发现为什么In这个类里面的getId方法这么写也不会报错?

内部类的一个很重要的属性:可以访问外部类私有的方法

静态内部类


在原有的内部类的情况下 通过static修饰,就叫静态外部类。

静态外部类不能访问私有的属性,除非是静态属性

(此处省略一亿八千三百六十五万三千零就是行)

局部内部类


在方法内部定义的类,称之为具备局部内部类

package outerClass;

public class App {
public static void main(String[] args) {
class app{
private int id = 0;
public void setId(int ids){
this.id = ids;
}
}
}
}

零基础入门学习JAVA课堂笔记 ——DAY07的更多相关文章

  1. 学习参考《零基础入门学习Python》电子书PDF+笔记+课后题及答案

    国内编写的关于python入门的书,初学者可以看看. 参考: <零基础入门学习Python>电子书PDF+笔记+课后题及答案 Python3入门必备; 小甲鱼手把手教授Python; 包含 ...

  2. 学习《零基础入门学习Python》电子书PDF+笔记+课后题及答案

    初学python入门建议学习<零基础入门学习Python>.适合新手入门,很简单很易懂.前一半将语法,后一半讲了实际的应用. Python3入门必备,小甲鱼手把手教授Python,包含电子 ...

  3. 《零基础入门学习Python》【第一版】视频课后答案第001讲

    测试题答案: 0. Python 是什么类型的语言? Python是脚本语言 脚本语言(Scripting language)是电脑编程语言,因此也能让开发者藉以编写出让电脑听命行事的程序.以简单的方 ...

  4. 零基础入门学习Python(1)--我和Python的第一次亲密接触

    前言 最近在学习Python编程语言,于是乎就在网上找资源.其中小甲鱼<零基础入门学习Python>试听了几节课,感觉还挺不错,里面的视频都是免费下载,小甲鱼讲话也挺幽默风趣的,所以呢,就 ...

  5. 093 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 03 static关键字(下)

    093 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...

  6. 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 02 封装的代码实现

    088 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 02 封装的代码实现 本文知识点:Java封装的代码实现 说明:因为时间紧张,本人写博客过程中只 ...

  7. 080 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 05 单一职责原则

    080 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 05 单一职责原则 本文知识点:单一职责原则 说明:因为时间紧张,本人写博客过程中只是 ...

  8. 057 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 04 案例:求整型数组的数组元素的元素值累加和

    057 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 04 案例:求整型数组的数组元素的元素值累加和 本文知识点:求整型数组的数组元素的元素值累加和 案例:求整型数 ...

  9. 056 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 03 一维数组的应用

    056 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 03 一维数组的应用 本文知识点:数组的实际应用 程序开发中如何应用数组? 程序代码及其运行结果: 不同数据类 ...

  10. 055 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 02 数组的概念

    055 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 02 数组的概念 本文知识点:数组的概念 数组的声明创建.初始化 在学习数组的声明创建.初始化前,我们可以和之 ...

随机推荐

  1. java获取部门树的方法实例

    开发中如何获取一个树结构是非常常见的需求,本示例演示一下该功能如何实现. 1.数据准备(mysql) CREATE TABLE `dept` ( `dept_id` int NOT NULL AUTO ...

  2. 无向图求割点 UVA 315

    ***割点概念:去掉一个点后图不连通,该点就为割点 割点满足的条件: 一个顶点u是割点,当且仅当满足(1)或(2) (1) u为树根,且u有多于一个子树. (2) u不为树根,且满足存在(u,v)为树 ...

  3. Oracle实例的启动和关闭

    启动模式 1.NoMount 模式(启动实例不加载数据库) 命令:startup nomount 讲解:这种启动模式只会创建实例,并不加载数据库,Oracle仅为实例创建各种内存结构和服务进程,不会打 ...

  4. 【C/C++】输出文件的相对路径

    FILE 在有些编译器上会输出带路径的文件名,删除路径可使用函数 strrchr #include <string.h> #include <stdio.h> #define ...

  5. [转帖]Python执行Linux系统命令的4种方法

    https://www.cnblogs.com/pennyy/p/4248934.html (1) os.system 仅仅在一个子终端运行系统命令,而不能获取命令执行后的返回信息 代码如下: sys ...

  6. [转帖]十九、Linux性能优化实战学习笔记- 为什么系统的Swap变高了?

    目录 一.什么是文件页?什么是脏页?什么是匿名页? 二.linux swap原理 换出 换入 三.内存回收的时机 1.直接内存回收 2.kswapd0内核线程 四.NUMA 与 Swap关系 五.sw ...

  7. [转帖]MySQL定点数类型DECIMAL用法详解

    https://www.cnblogs.com/danielzzz/p/16824214.html 一.MySQL DECIMAL 的使用 DECIMAL 数据类型用于在数据库中存储精确的数值,我们经 ...

  8. [转帖]Jmeter学习笔记(九)——响应断言

    Jmeter学习笔记(九)--响应断言 https://www.cnblogs.com/pachongshangdexuebi/p/11571348.html Jmeter中又一个元件叫断言,用于检查 ...

  9. [转帖]JSR223控件简介

    JSR223控件简介 1.调用内置函数 2.执行外部java文件 3.执行jar包 JSR223取样器允许执行JSR223脚本代码用于创建/更新所需的某些变量. 由于JSR223脚本编译方式基本相同, ...

  10. 关于信创CPU测试的一些想法和思路

    关于信创CPU测试的一些想法和思路 背景 最近荷兰政府颁布了关于半导体设备出口管制的最新条例. 好像45nm以下的工艺的设备都可能收到限制. 对中国的相关厂商比如长鑫还有华虹的影响应该都比较大. 认为 ...