IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> java笔记Day07 -> 正文阅读

[Java知识库]java笔记Day07

instanceof和类型转换

		//Object->Person->Student
        //Object->Person->Teacher
        //Object->String
        //高                 低
        Object obj = new Student();
		//System.out.println(x instanceof y);//能否编译成功却决于x和y是否具有父子关系
        System.out.println(obj instanceof Person);//true
        System.out.println(obj instanceof Student);//true
        System.out.println(obj instanceof Object);//true
        System.out.println(obj instanceof String);//false
        System.out.println(obj instanceof Teacher);//false
        System.out.println("=====================");
        Person person = new Student();
        System.out.println(person instanceof Person);//true
        System.out.println(person instanceof Student);//true
        System.out.println(person instanceof Object);//true
        //System.out.println(person instanceof String);//编译报错!
        System.out.println(person instanceof Teacher);//false
        System.out.println("==========================");
        Student student = new Student();
        System.out.println(student instanceof Person);//true
        System.out.println(student instanceof Student);//true
        System.out.println(student instanceof Object);//true
        //System.out.println(student instanceof String);//编译报错!
        //System.out.println(student instanceof Teacher);//编译报错!

类型之间的转化

        //高 ------------- 低(低转高不需要强制转换)
        Person person = new Student();
        //Student将这个对象转换为Student类型,就可以使用Student类型的方法了!
        //高转低需要强制转换
        //((Student)person).hello();
        Student student = (Student)person;
        student.hello();

        //子类转换为父类可能丢失自己本来的一些方法

static关键字

static静态的

静态变量

static int a = 3;

静态变量和非静态变量的区别是:静态变量被所有对象共享,且内存中只有一个副本,类初始加载时被初始化;非静态变量是对象所拥有的,创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。

静态方法

public static void run(){}

静态方法不依赖对象就可以访问,静态方法不能访问类的非静态成员变量和方法,因为非静态成员变量和方法必须依赖对象调用。非静态成员变量和方法可访问静态成员变量和方法。

静态代码块

static{
	int a= 3;
	int b = 4;
}

static代码块可以放在类中的任何地方,类中可以有多个static代码块,在类被初次加载,按照static的顺序执行每个static代码块,且只执行一次。可以优化程序性能。

静态导入包

import static java.lang.Math.random

import static java.lang.Math.PI

double a = random();

抽象类

abstract修饰符可以用来修饰方法也可以修饰类

抽象方法

public abstract void run();

抽象类

public abstract class Action{}

抽象类中可以没有抽象方法,但是又抽象方法的一定要声明为抽象类。

抽象类不能用new关键字来创建对象,它是用来让子类继承的。

抽象方法只有方法的声明没有方法的实现,方法让子类来实现。

子类继承抽象类,那么就必须要实现抽象类没有实现的抽象方法,否则子类也要声明为抽象类。

抽象类中存在构造方法

抽象类可以有构造方法,只是不能直接创建抽象类的实例对象而已。在继承了抽象类的子类中通过super()或super(参数列表)调用抽象类中的构造方法。

接口

普通类:只有具体实现

抽象类:具体实现和规范(抽象方法)都有!

接口:只有规范!自己无法写方法–专业的约束!约束和实现分离:面向接口编程

接口的本质是契约。

声明接口的关键字是interface

UserService.java

//interface接口定义关键字,接口都需要有实现类
public interface UserService {
    //接口中定义的都是常量public static final
    int AGE = 99;

    //接口中所有定义的都是抽象的 public abstract
    void add(String name);
    void delete(String name);
    void update(String name);
    void query(String name);
}

TimerService.java

public interface TimerService {
    void timer();
}

UserServiceImpl.java

//类 可以实现接口 implements 接口
//实现了接口的类就需要重写接口中的方法
//多继承,利用接口多继承
public class UserServiceImpl implements UserService,TimerService{
    @Override
    public void add(String name) {

    }

    @Override
    public void delete(String name) {

    }

    @Override
    public void update(String name) {

    }

    @Override
    public void query(String name) {

    }

    @Override
    public void timer() {

    }
}

内部类

内部类就是在一个类的内部定义一个类,比如,A类中定义一个B类,那么B类相对A类来说就称为内部类,而A类相对B类来说就是外部类。

  • 1.成员内部类

    public class Outer {
        public static void main(String[] args) {
            Outer outer = new Outer();
            //通过外部类来实例化内部类
            Outer.Inner inner = outer.new Inner();
            inner.getId();
        }
        private int id = 10;
        public void out(){
            System.out.println("这是外部类的方法!");
        }
    
        public class Inner{
            public void in(){
                System.out.println("这是内部类的方法!");
            }
            //获得外部类的私有属性
            public void getId(){
                System.out.println(id);
            }
    
        }
    }
    //也是内部类
    class S{
    
    }
    
  • 2.静态内部类

    public class Outer2 {
        public static void main(String[] args) {
            Outer2 outer = new Outer2();
    
        }
        private int id = 10;
        public void out(){
            System.out.println("这是外部类的方法!");
        }
    
        public static class Inner {
            public void in() {
                System.out.println("这是内部类的方法!");
            }
        }
    }
    
  • 3.局部内部类

    public class Outer2 {
        public static void main(String[] args) {
            Outer2 outer = new Outer2();
    
        }
        private int id = 10;
        public void out(){
            System.out.println("这是外部类的方法!");
        }
    
        public static class Inner {
            public void in() {
                System.out.println("这是内部类的方法!");
            }
        }
    
        //局部内部类
        public void method(){
            //方法中也可以写内部类
            class V{
                public void v(){}
            }
        }
    }
    
  • 4.匿名内部类

    public class Test {
        public static void main(String[] args) {
            //没有名字去初始化类,不用将实例保存到变量中
            new Apple().eat();
            //匿名内部类
            PersonService personService = new PersonService() {
    
                @Override
                public void hello() {
                    System.out.println("hello");
                }
            };
        }
    }
    class Apple{
        public void eat(){
            System.out.println("吃个苹果!");
        }
    }
    interface PersonService{
        void hello();
    }
    
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-01-28 11:45:25  更:2022-01-28 11:48:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:58:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码