Java学习笔记3

static(静态的)

在同一个类的一个对象里改变static属性,会导致同类的另一个对象的该属性也一起变

tag

在这里插入图片描述
静态变量的创建早于对象的创建早于实例变量的创建
静态变量随着类的加载而加载
由于类只会加载一次,则静态变量在内存中也只会存在一份,存在方法区的静态域里面
因为静态方法比对象更早加载于内存中,所以可以直接调用该类的方法而不需要先new一个对象,可以用过“类.静态方法”的方式进行调用
在静态的方法内,不能使用super、this;因为static修饰后,他们对象都没建起来的时候更没有this和super,但已经有static的了(所以前面调用的格式是类.方法)
非静态和对象一起消亡,静态和类一起消亡

判断属性和方法是否应该static

属性要是被多个对象共享且不会随对象不同而不同的就是static,如银行利率
方法如果是用来操作静态属性、或工具类的方法,就用static

类中的方法中的static变量直接存放在方法区中,new的对象中的该变量也在方法区中

main方法

1、main方法作为程序的入口
2、main方法也是一个普通的静态方法
3、main方法要public是因为他权限不大的话就调不了别的包的变量
4、main方法可以作为我们与控制台交互的方式

每个.java文件中只能有一个public类

但是每个类中都可以有main方法,即可以有多个main方法
不过在run的时候要选择一个作为入口
不能在main方法里面调用非静态变量,因为main方法是静态,静态只能调静态,只能调对象里的非静态。但如果该变量就是要写成静态的,就没必要写个对象了
在这里插入图片描述

代码块

在这里插入图片描述

静态代码块

内部可以有输出语句
随着类的加载而执行,而且只执行一次

非静态代码块

内部可以有输出语句
随着对象的创建二执行
每创建一个对象,就执行一次非静态代码块
作用:可以在创建对象时对对象的属性进行初始化

执行顺序

对于同类代码块,按声明的顺序先后执行
对于静态和非静态的代码块,静态优先

random

用法同Scanner
随机产生一个不超过当前数据类型范围的数
每次运行数都不一样
在这里插入图片描述
生成指定范围的随机数:
在这里插入图片描述
如果想要1~10的,就num=r.nextInt(9)+1;

final(最终的)(还要再看视频)

可以用来修饰方法、类、变量
用final修饰类后表示该类不能被继承了
修饰方法表明该方法不能被重写了
final和bool在强调这个变量的类型的作用上是一样的
final修饰变量,表明这个变量是常量了

abstract(抽象的)

可以用来修饰类和方法,不能修饰属性、构造器、私有方法(不能被重写)、静态方法(不能被重写)、final(不能被重写)

修饰类:

此类不能实例化(造对象)
抽象类中一定有构造器,便于子类调用
开发中都会提供抽象类的子类

修饰方法

抽象方法只有方法声明,没有方法体(花括号也不能有)如public abstreact void fun();
包含抽象方法的类,必须是一个抽象类(不然类能造对象就能调用该抽象方法,这是不行的)
若子类重写了父类中所有的抽象方法后,此子类方可实例化
若子类没有重写父类中的所以抽象犯法,此子类必须也要是抽象类

抽象类应用

在这里插入图片描述

interface接口

1、Java中接口和并列的两个结构
2、在这里插入图片描述

在这里插入图片描述
3、接口中不能定义构造器,意味着接口不能实例化
4、Java开发中,接口通过让类去implements(实现)的方式来使用
如果实现类覆盖了(也可看做重写)接口中的所以抽象方法,即可实例化,否则不能,且此实现类仍为一个抽象类
在这里插入图片描述
Java8中允许在接口中定义defalt修饰的默认方法,可以使接口中添加方法而不用修改实现该接口的类的方法,使接口升级;并且也使接口不一定必须只能定义抽象方法

Java8中还允许在接口中定义静态方法,其他类实现该接口的操作不变,不过在调用该静态方法时只需要接口名. (这里是个点)静态方法名就可以调用

Java9中允许定义私有方法
作用是防止实现类可以调用该方法
该方法只能是由接口中的默认方法调用
对于静态默认方法就定义静态私有方法

接口中的常量定义和使用

完整写的话就是 public static final type name =value;
只写 type name =value 也没问题
该常量的命名使用全大写,用下划线分隔

接口是没有静态代码块和构造方法的

Java类可以实现多个接口

弥补了Java的只能单继承缺点
如下如图,flyable和attackable都是接口,用逗号隔开
接口和接口之间可以继承,且能多继承

如果继承和实现都要写,先写继承再写实现
继承优先于接口,对于重复方法,优先调用父类中的该方法

如果实现类所实现的多个接口中存在重复的抽象方法,那么只需要重写一个即可

如果存在重复的默认方法,则必须对冲突的默认方法进行覆盖重写
在这里插入图片描述

接口与接口之间多继承

类与类之间是单继承,直接父类只有一个
类与接口之间是多实现的,一个类可以实现多个接口
接口与接口之间是多继承

注意事项
1、多个父接口当中的抽象方法如果重复,没关系
2、多个父接口当中的默认方法如果重复,则必须进行默认方法的重写,并带上default关键字

内部类

分类:成员内部类、局部内部类(包括匿名内部类)
成员内部类的定义格式:
修饰符 class 外部类名称
{
修饰符 class 内部类名称
{
。。。。
}
}
内用外,随意访问,外用内,需要内部类对象

使用成员内部类的两种方式:

1、间接方式:在外部类的方法当中使用内部类;main方法知识调用外部类中的方法
2、直接方法:
外部类名称.内部类名称 对象名 =new 外部类名称().new 内部类名称();

如果外部类与内部类出现重名,则在内部类调用的话遵守就近原则,会调用内部类方法的局部变量,如果想要调用外部类的该变量时,格式是:外部类名称.this.外部类成员变量名

包装类

包装类使得基本数据类型的变量具有类的特征

这里的toString这是将他变成了字符串输出,可以直接system.ou.println(in1)
在这里插入图片描述
将包装类–>基本数据类型的用途:对象不能四则运算,基本数据类型才行在这里插入图片描述
Java5.0新特性 自动装箱 这样就不用像上面那样调用构造器装箱了****在这里插入图片描述
自动拆箱在这里插入图片描述在这里插入图片描述
在这里插入图片描述
面试题:Integer的源码中把-128~127范围的数直接赋值,但是超过127的就要new对象,此时返回的就是地址值了(好像是这么回事)

单例设计模式

就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例
要求:
1、私有化类的构造器 2、内部创建类的静态对象 3、提供公共的静态方法,返回类的对象(静态是因为要创建对象,不然就会出现“为了创建对象而要创建对象”的问题)

这样子实例化多次,获得的多个对象地址值都是相同的,即只有一个对象实例

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值