JAVA

17 篇文章 0 订阅

插播:在这里插入图片描述
快捷键:
鼠标放在红线上,然后alt+回车,选第一项implement methods,回车


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
B字节(Byte):每逢八位一个字节,数据存储的最小单位。
b位
100Mbps宽带,b:位
百度云速度:15MB/s B:字节

1Byte=8bit
1KB(kilo千(kilometers(千米)))=1024Byte字节
1MB=1024KB
1GB=1024MB
1TB=1024GB
1PB=1024TB
1EB=1024PB
这是一个亿,
参见祖师爷
一个亿,用王健林的话说,这是一个小目标
100,0000,0000.00 一百亿,一百个小目标
正斜杠:上坡/
反斜杠:下坡
在这里插入图片描述
启动:win+R,输入cmd回车
切换盘符 盘符名称
进入文件夹 cd文件夹名称
进入多级文件夹 cd文件夹1\cd文件夹2\文件夹3
返回上一级 cd …
返回根路径 cd
查看当前内容 dir
清屏 cls
退出 exit

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
JVM:java虚拟机,实现跨平台,但本身不是跨平台,相当于韩语翻译机(Lin版JVM),日语翻译机(win版JVM),分别在韩国、日本实现翻译
JRE:JAVA runtime environment java程序运行时的环境,包含JVM和运行时所需要的核心库
JDK:java程序安装开发工具包,包含JRE和开发人员使用的工具
运行一个已有的java程序,只需安装JRE
开发一个全新的JAVA程序,必须安装JDK
在这里插入图片描述
public class HelloWorld {
public static void main(String[] args){
System.out.println(“Hello,W”);
}
}

//#HelloWorld与所在文件名相同
//#String的string注意大写
/第一行:public class后面代表定义一个类的名称,类是java中所有源代码的基本组织单位/
/*第二行固定写法 ,代表main方法,代表程序的起点
*/

public class HelloWorld {
public static void main(String[] args){
System.out.println(“Hello,W”);
}
}

在这里插入图片描述
在这里插入图片描述
黑色界面是为了晚上敲代码的时候不会打扰到女朋友,说的好像就有女朋友一样
在这里插入图片描述
在这里插入图片描述
对于所有源代码,写在project的src下(external libraries相当于JDK)

包是一组文件夹的名称
在这里插入图片描述
cn是一个大包,里面包含了itcast,itcast包含了day04,day04包含了demo01
在这里插入图片描述
定义方法的完整格式:
修饰符 返回值类型 方法名称(参数类型 参数名称,…)
修饰符:现阶段固定写法public static
返回值类型:方法最终产生的数据结果是什么类型
方法名称:方法的名字,规则和变量一样,小驼峰
参数类型:进入方法的数据是什么类型
参数名称:进入方法的数据对应的变量名称
方法体:方法需要做的事情,若干行代码
return:1、停止当前方法
2、将后面的结果数据返回值还给调用处。
返回值:方法执行后最终产生的数据结果
方法的重载是指方法的名称相同而参数列表不同的方法。
这里的参数列表不同主要包括:

参数的类型不同
参数的个数不同(个数不同一定构成重载)
具有多个且类型不同的参数,其顺序不同构成重载
第三种情况是最容易被忽视的。比如
在这里插入图片描述
这里的getMax()方法,参数的个数相同参数的类型种类也相同,但是由于参数的顺序的不同也 构成重载。
这个在笔试题中可能会出现。

方法重载与下列因素有关:
1、参数个数不同
2、参数****类型不同
3、参数的多类型顺序不同在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
另外,方法的重载和访问修饰符以及返回值类型无关。关于返回值类型无关我们可以从构造函数的重载去理解。
我们知道构造函数是可以实现重载的,或参数类型不同或个数不同。同时我们也清楚构造函数是没有返回值类型的(连void也不能写),而构造函数有能实现重载,因此我们可以很容易的得出,方法的重载和返回值类型无关。

方法重载与啥无关:
1、与参数的名称无关
2、与方法的返回值类型无关
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
v在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

定义一个类时所使用的修饰符有哪几个?每个修饰符的作用是什么?是否可以混用?
1、有四个,分别为public、abstract、final、缺省,
2、作用:
public:将一个类声明为公共类,它可以被任何对象方法。
abstract:将一个类声明为抽象类,没有实现方法,需要子类提供方法的实现,所以不能创建该类的实例。
final:将一个类声明为最终类即非继承类,表示他不能被其他类继承.
缺省:缺省修饰符时,表示只有在相同包的对象才能使用这样的类.

6.4成员变量的修饰符有哪些?各修饰符的功能是什么?是否可以混用?
成员变量的修饰符有八个,功能分别为:
Public:公共访问控制符,指定该变量为公共时,它可以被任意对象访问.
Private:私有访问控制符,指定该变量只允许自己类的方法访问,其他任何类(包括子类)的方法均不能访问此变量.
Protected:保护访问控制符,指定该类只可以被他自己的类及其子类
缺省:同一个包中的其他变量其他类可以访问此成员变量,其他包中的类则不能.
Final:最终修饰符,指定此变量的值不能改变.
Static:静态修饰符,指定该变量被所有对象共享,即所有的实例都可以使用该变量
Transient 过度修饰符,指定该变量是一个系统保留暂无特别作用的临时性变量
Volatile 易失修饰符,指定该变量可以同时被几个线程控制和修改

6.5成员方法的修饰符有哪些?各修饰符的功能是什么?是否可以混用?
Public:公共访问控制符,指定该方法为公共,它可以被任何对象的方法访问.
Private:私有访问控制符,指定该方法只能自己类的方法访问,其他任何类(包括子类)中的方法都不能访问.
Protected:保护访问控制符,指定该方法只可以被他自己的类及其子类或同一包中的其他类访问。
缺省:同一包中的其他类可以访问此成员方法其他包中的类不可以.
Final:最终修饰符,指定该方法不能重载.
Static:静态修饰符,指定不需要实例化一个对象就可以调用的方法.
Abstract:抽象修饰符,指定该方法只声明方法头,而没有方法体,抽象方法需在子类中被实现。
Synchronized:同步修饰符,在多线程程序中,该修饰符用于在运行前,对他所属的方法加锁,以防止其他线程访问,运行结束后解锁.
Native:本地修饰符,指定此方法的方法体是用其他语言(如c)在程序外部编写的.

成员变量与局部变量的区别有哪些?
1、从语法形式上看,成员变量属于类的,而局部变量是在方法中定义的变量或是方法的参数;成员变量可以被public、private、static等修饰符所修饰,而局部变量则不能被访问控制修饰符及static所修饰;成员变量和局部变量都可以被final所修饰
2、从变量在内存中得存储方式上看,成员变量是对象的一部分,而对象是存在于堆内存的,而局部变量是存在于栈内存的。
3、从变量在内存中的生存时间上看,成员变量是对象的一部分,它随着对象的创建而存在,而局部变量随着方法的调用而产生,随着方法调用的结束而自动消失
4、成员变量如果没有被赋初值,则会自动以类型的默认值赋值(有一种情况例外,被final修饰但没有被static修饰的成员变量必须显示地赋值);而局部变量则不会自动赋值,必须显式地赋值后才能使用。

创建一个对象使用什么运算符?对象实体与对象的引用有何不同?
创建一个对象使用new运算符,对象实体是实在存在于堆内存中,而对象的引用是管理对象实体的,句柄存在于栈内存中.

对象的成员如何表示?
对象的成员通过对象名.对象成员来访问

在成员变量或成员方法前加上关键字this表示什么含义?
this特指成员变量

在这里插入图片描述
成员方法:无static在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
压栈:后来的人把前面的人压在下面
在这里插入图片描述
光标在变量上,shift+F6可以重新地给所有同名变量改名
凡是new出来的东西,都是在堆的,
在这里插入图片描述
关键字小写,类大写

引用类型的一般使用步骤(只要不是基本类型,那就是引用类型)
(如scanner是一个类,为引用类型)
1、导包
import 包路径.类名称;
若需要使用的目标类和当前类位于同一个包下,则可以省略导包语句不写;
只有java.lang包下的内容不需要导包,其他的包都需要import语句
(导包语句要在package后面写,在public前面写)
2、创建
类名称 对象名 =new 类名称();
3、使用
对象名.成员方法名()

在这里插入图片描述
创建对象的标准格式:
类名称 对象名=new 类名称();
匿名对象:只有右边的对象,没有左边的名字和赋值运算符
注意事项:匿名对象只能使用唯一一次,下次再用不得不再创建一个对象
使用建议:如果确定有一个对象只需要使用唯一的一次,就可以使用匿名对象

使用匿名对象作为参数和返回值都是可以的

Random类:用来生成随机数字 使用起来亦然三个步骤
1、导包 包
import java.util.Random;
2、创建 构造方法
Random r = new Random();
3、使用 成员方法

1、public:public表明该数据成员、成员函数是对所有用户开放的,所有用户都可以直接进行调用
2、private:private表示私有,私有的意思就是除了class自己之外,任何人都不可以直接使用。

每个单词首字母都大写,故为类(米大,所以类)

数组的长度不可以发生变化
但ArrayList集合的长度是可以随意改变的

泛型

对于ArrayList来说有一个代表泛型。
泛型:也就是装在集合当中的所有元素,全都是统一的什么类型

注意:泛型只能是引用类型,不能是基本类型

package a.b.c.d02;

import java.util.ArrayList;
public class demoArray {

    public static void main(String[] args) {
//        首先创建一个长度为3的数组,里面用来存放person类型的对象
        Person2[] array = new Person2[3];
        System.out.println(array[0]);
        Person2 one = new Person2("迪丽热巴", 18);
        Person2 two = new Person2("李白", 25);
        Person2 three = new Person2("李黑", 27);
//       将one中地址值赋值到数组的0号元素位置 。

        array[0]=one;
        array[1]=two;
        array[2]=three;
        System.out.println(array[0]);
        System.out.println(array[1]);
        System.out.println(array[2]);

        Person2 person = array[1];
        System.out.println(person.getName());
        System.out.println(array[0].getName());

//        创建了一个ArrayList集合,集合的名称是list,里面装的全是string字符串类型的数据。
//        备注:从JDK1.7+开始,右侧的尖括号内部可以不写内容,但是<>本身还是要写上的。
        ArrayList<String> list = new ArrayList<>();
        System.out.println(list);//[]
//    注意事项:对于ArrayList集合来说,直接打印得到的不是地址值,而是内容.
//        若内容为空,得到的是空的中括号:[]
//向集合添加一些数据,需要使用add方法
        list.add("赵丽颖");
        list.add("赵");
        list.add("赵丽");
        list.add("赵丽颖0");
        System.out.println(list);
    }
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

除了基本类型,就是引用类型
集合里面保存的都是地址值,基本类型的数据没有地址值,故ArrayList=泛型只能是引用类型

若希望向集合ArrayList当中存储基本类型,必须使用基本类型对应的“包装类”。

基本类型 包装类(引用类型,包装类都位于java.lang包下)
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
在这里插入图片描述
在这里插入图片描述
从JDK1.5开始,支持自动装箱、自动拆箱
自动装箱:基本类型->包装类型
自动拆箱:包装类型->基本类型

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
空指针.方法 会报错,所以推荐"…".equals(str);
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
数组.length无括号
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
变量名.fori
在这里插入图片描述
上页则不行,输出lengh=0在这里插入图片描述
下页才成功
在这里插入图片描述
在这里插入图片描述
如果没有static关键字,那么首先创建对象,然后通过对象才能使用他
对于静态方法,可以通过对象名进行调用,也可以直接通过类名称来调用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
方法区:存储.class相关信息,如main方法,。。。,其中,方法区当中有一块独立的空间,叫静态区,专门存储static的数据

new出来的对象都在堆上

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
静态的内容不用new,直接通过类名称就能点
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
chars.fori
正序:生成:
for(int i=0;i<chars.length;i++){
}

chars.forr
倒序:生成:
for(int i=chars.length-1;i>=0;i–){
}

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
面向对象三大特征:封装性、继承性、多态性
继承是多态的前提,没有继承就没有多态

在这里插入图片描述
案例:
Extends.class

package a.b.c.d02;

/*
在继承的关系中,子类就是一个父类,也就是说,子类可以被当作父类看待
例如,若父类是员工,子类是讲师,那么,“讲师就是一个员工”。关系:is-a
定义父类的格式:(一个普通的类定义)
public class 父类名称{
    成员变量、构造方法、成员方法。。。
}
定义子类的格式:
public class 子类名称 extends 父类名称{
    。。。
}

 */
public class Extends {
    public static void main(String[] args) {
        //
        Teacher teacher = new Teacher();
        teacher.method();
        //Teacher类虽然什么都没写,但继承了来自父类的method方法。
        //创建另一个子类助教的对象
        Assistance assistance=new Assistance();
        assistance.method();
        
    }
}

Assistance.class

package a.b.c.d02;
//定义了员工的另一个子类:助教
public class Assistance extends Teacher {

}

Employee.class

package a.b.c.d02;
//定义一个父类:员工
public class Employee {
    public void method(){
        System.out.println("方法执行!");
    }
}

teacher.class

package a.b.c.d02;
//定义了一个员工的子类:讲师
public class Teacher extends Employee {

}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在父子类继承关系当中,若成员变量重名,在创建子类对象时,访问有两种方式:
直接通过子类对象访问成员方法 直接:new上一个子,然后点它
等号左边是谁就优先用谁,没有则向上找;到处都没有,编译报错
间接通过成员方法访问成员变量

案例:
在这里插入图片描述

在这里插入图片描述

直接:new上一个子,然后点它,等号左边是谁就优先用谁,没有则向上找;到处都没有,编译报错

在这里插入图片描述
案例2
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
案例3:
父类当中的成员变量:

在这里插入图片描述
子类当中成员变量 int num
子类方法的局部变量(method里面的num)
在这里插入图片描述

/*
局部变量:            直接写成员变量名
本类的成员变量: this.成员变量名 
父类的成员变量: super.成员变量名
*/

在这里插入图片描述
案例四 方法:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意:

在这里插入图片描述
在这里插入图片描述
不报错,但若Zi方法是Object,Fu的方法是String,则会报错。

在这里插入图片描述

public class string0 {
    public static void main(String[] args) {
        int[][] a = new int[5][5];
        int k = 1;
        for (int i = 0; i < 5; i++) {
            for (int j = 0; j <= i; j++) {
                a[i - j][j] = k++;       /* 刚好就是成题目的角度赋值     */
            }
        }

        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 5 - i; j++) {
                System.out.print(a[i][j] + " ");
            }
            System.out.println();
        }
    }
}


在这里插入图片描述

Ctrl + D 复制光标所在行 或 复制选择内容,并把复制内容插入光标位置下面 (必备)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
2、
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
先父类,后子类

继承关系中,父子类构造方法的访问特点:
1、子类构造方法当中,有一个默认隐含的“super()”调用,所以一定先调用的父类构造,后调用子类构造…
在这里插入图片描述
有无super();都一样
2、可以通过super关键字来子类构造调用父类重载关键字
(赠送的super()一定是无参,所以调用父类的重载方法会)

在这里插入图片描述
在这里插入图片描述
3、super的父类构造调用,必须是子类构造方法的第一个语句.,不能一个子类构造调用多次super构造.
如:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
总结:子类必须调用父类构造方法,不写则赠送super().写了则用写了的super调用.,且super只能有一个,还必须是 第一个 语句的位置

super关键字的用法有三种
1、在子类的成员方法中,访问父类的成员变量.
在这里插入图片描述
在这里插入图片描述

2、在子类的成员方法 中,访问父类的成员方法

在这里插入图片描述
在这里插入图片描述

3、在子类的构造方法中,访问父类的构造方法.
在这里插入图片描述

super是访问父类,this是访问本类

this关键字用法也有三种:
1、在本类的成员方法中,访问本类的成员变量.
在这里插入图片描述
在这里插入图片描述

2、 在子类的成员方法中,访问本类的另一个成员方法
在这里插入图片描述
3、在本类的构造方法中,访问本类的另一个构造方法.
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上面死亡循环,不可执行

80.min
在这里插入图片描述
(父类中num为10)

覆盖重写override

在这里插入图片描述
内存图:栈、堆、方法区
程序要想运行,方法区最先有东西
在这里插入图片描述
main方法先运行,所以先进栈,而new的东西都在堆里。在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
调用show方法,show进栈

在这里插入图片描述
zi.method进栈
在这里插入图片描述
其中,因为zi.method中有特殊的一行,super.method(),所以让method.fu()进栈
在这里插入图片描述
method (fu)运行完后 xx
method (zi)运行完后 xx
show() 运行完后 xx
Zi zi 运行完后xx
栈空,运行完毕

java是单继承,一个类的直接父类只能有一个
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如上图报错就是因为抽象方法所在的类不是抽象类
在这里插入图片描述
如何使用抽象类和抽象方法。
1、不能直接创建new抽象类对象,必须具体
2、必须用一个子类来继承抽象父类.
3、子类必须覆盖重写抽象父类当中所有的抽象方法.
4、创建子类对象进行使用
覆盖重写(实现):去掉抽象方法的abstract关键字,然后补上方法体大括号
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
//猫吃鱼


在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
快捷键:
鼠标放在红线上,然后alt+回车,选第一项implement methods,回车
在这里插入图片描述

这就是你需要覆盖重写的,回车就出来了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(因为子类当中赠送了super)


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
29min54发红包
接口
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
接口使用步骤
1、接口不能直接使用,(不能直接new),必须有一个“实现类”(即子类)来“实现”(与extends差不多)该接口
格式:
(子类继承父类:public class 类名称 extends 父类)
子类继承父类:public class 实现类名称 implements 接口名称{
。。。。
}
2、接口的实现类必须覆盖重写(实现)接口中的所有抽象方法。
实现:去掉abstract关键字,再加上方法体{}
3、创建实现类的对象,进行使用。
注意事项:如果实现类并没有覆盖重写接口中所有的抽象方法,那么这个实现类自己就必须是抽象类

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
接口升级了,增加了一个抽象方法,导致实现类都报错了
一个个添加覆盖重载较为繁琐,所以可以将新添加的abs2方法拥有一种默认的方法体。
将新添加的方法,改为默认方法
在这里插入图片描述
默认方法会被实现类继承下去
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上图即实现类覆盖重写了接口的methodDefault,调用时会执行实现类的methodDefault
在这里插入图片描述


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
![![在这里插入图片描述](https://img-blog.csdnimg.cn/20201124161935275.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xsbGJu,size_16,color_FFFFFF,t_70#pic_center)
减少重复代码,但有所不妥
在这里插入图片描述
在这里插入图片描述

正确改造代码:
在这里插入图片描述
methodcommon的修饰符变成了private,此时如下图报错
在这里插入图片描述
这时只有接口内的两个类可以使用methodcommon

若是静态方法:
在这里插入图片描述
产生了重复代码,现进行改造,
在这里插入图片描述

只有methodstatic1、2才能用methodstaticcommon,其他人都用不了
在这里插入图片描述
(静态的东西用起来非常简单,接口名称.方法名)

package lian;
/*
接口当中也可以定义“成员变量”,但必须使用public static final三个关键字进行修饰.
从效果上看,这就是接口的【常量】
public static final 数据类型 常量名称=数据值;
此为接口当中常量的定义格式.

注意:
1、接口当中的常量,可以省略public static final,注意:不写也照样是这三个
2、接口当中的常量,必须进行赋值
3、接口常量的名称,用大写字母和下划线分隔(推荐)

 */
public interface MyinterfaceConst {
    public static final int NUM=10; //这其实就是一个常量,一旦赋值,不可修改.  public是指接口里面外边、实现类都可以用
        //用了static便与对象无关了,直接接口名称.就可以点出来了;一旦使用final关键字修饰,说明不可改变
}
package lian;

public class Myinterfaceconst1 {
    public static void main(String[] args) {
        System.out.println(MyinterfaceConst.NUM);
    }

}

在这里插入图片描述
3中,若覆盖重写了,则用实现类的,否则用接口里的.

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
直接父类只有一个,而接口可以有很多个

如果实现类

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
最终sout父类方法,故父类方法优先,接口其次。


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
4、多态
在这里插入图片描述
在这里插入图片描述


示例:在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
首先,method是成员方法,右边new的谁就运行谁的方法,故输出子类方法
多态:左父右子
多态存在要有三个必要条件:继承,方法的重写,父类引用指向子类的对象。没有实现接口

继承关系中,我们了解了成员变量访问特点,若用了多态的写法,那么成员变量的访问特点,也没有任何变化.
如:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
故输出10;(没有则向上查找,不会向下查找的,若Fu中没有age这个成员变量,则错误)
在这里插入图片描述

注意:成员变量不能进行覆盖重写.只有成员方法才可以.
2、间接通过成员方法访问
在这里插入图片描述
java的话, int 是基本类型,不在面向对象体系之内,不存在继承 / 方法 / 多态 这些概念,所以Object a=new int();左父
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
若覆盖重写了,则子类
在这里插入图片描述
多态和不是多态没有任何不同.

成员方法的规则也没有变化.(如上上的示例)
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
成员方法:编译看左边,运行看右边
(成员变量不是如此)
成员变量:编译看左边,运行还看左边
(左右指的是new的左右)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
编译看左,运行看右
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
38min多态重点-------------------------------------
在这里插入图片描述
46min
在这里插入图片描述
向下转型示例:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
56min笔记本
object祖宗类,所有类不写都继承之

final关键字代表最终、不可改变的
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
因为abstract一定要覆盖重写,而final不可以被覆盖重写
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
地址值不能变,但方法可变

7.4构造方法有哪些特性?
1、 构造方法的方法名与类名相同
2、 构造方法没有返回值,但不能写void
3、 构造方法的主要作用是完成对类对象的初始化工作
4、 构造方法一般不能有编程人员显式地调用,而是用new来调用
5、 在创建一个类的对象的同时,系统会自动调用该类的构造方法为新对象初始化

7.5在一个构造方法内可以调用另一个构造方法吗?如果可以,如何调用?
可以;通过this来调用,而且this关键字必须写在构造方法内的第一行位置.

7.6静态变量与实例变量有哪些不同?
静态变量是隶属于类的变量,而不是属于任何一个类的具体对象,静态变量不需要实例化就可以使用。
实例变量是隶属于对象的变量,是属于具体的一个类的,是需要把类实例化为对象才可以使用的

7.7静态方法与实例方法有哪些不同?
静态方法实质是属于整个类的方法,而实例方法是属于某个具体对象的方法

7.8在一个静态方法内调用一个非静态成员为什么是非法的?
静态方法是属于整个类的,所以它不能 操纵和处理属于某个对象的成员,而只能处理属于整个类的成员,即静态方法只能访问静态成员变量或静态成员方法
在这里插入图片描述
报错
在这里插入图片描述
在这里插入图片描述
ctrl+/注释所有
构造方法赋值:
在这里插入图片描述

18.63
注意:在这里插入图片描述
sub是demo02的子包,但Myson和Myclass不在同一个包中!,只要不是严格的同一个包,要调用那就得导包
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
以后构造方法不用自己打,可以如下
在这里插入图片描述
在这里插入图片描述
则直接重写好了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
1:“==”如果前后比较的是对象,则比较的是对象的地址,如果前后为数字,则比较的是值;

2:“equals”如果前后是对象,比较的是对象的地址,如果比较的对象重写了“equals”方法,则比较的是值;

(八个基本数据类型的封装类:Byte,Short,Integer,Long,Float,Double,Boolean,Character比较的都是值,还有File,Date等)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
修改版
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
也可以自己覆盖重写
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
即可直接生成:
在这里插入图片描述
在这里插入图片描述
直接就给调用了ToString方法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
为什么str是输出abc,而s是输出地址
在这里插入图片描述
this代表当前的一个字符串对象,所以string已经对Tostring进行了重写
而Student类没有覆盖重写,则默认调用object类,
在这里插入图片描述
object类中ToString的覆盖重写方法不一样,所以返回包名+类名+@+hashcode的方法,即为地址值
在这里插入图片描述
对Student的ToString中进行覆盖重写
在这里插入图片描述

自动生成ToString方法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
一个true一个false 的原因:
在这里插入图片描述
String重写了,所以比较的就是两个字符串内容
而学生类的没有重写,所以继承了object类的equals方法
==号可以比较基本数据类型和引用数据类型
比较基本数据类型比较的就是两个具体的值,若比较引用数据类型,比较的就是两个地址值
而两个new出来的都在堆里,(牛堆),所以地址值必然不同
在这里插入图片描述
在这里插入图片描述
objects中:
在这里插入图片描述
在这里插入图片描述
所以不会报安全问题,通过objects覆盖重写:
在这里插入图片描述
object:出问题
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
方法外边,直接在类内部就为成员

内部类命名格式
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
this.num:20
super.num却用不了:因为内部类并不是继承外部类,其继承的仍然是object类
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
外界要访问inner做不到,因为只有当前所属 方法才能使用,出了就不能用了,所以先创建一个Inner

在这里插入图片描述
在这里插入图片描述
相当于调用一个普通的外部类对象methidOuter

在这里插入图片描述
因为外部类已经最外面了,所以没有子类,所以只能public/(default)
在这里插入图片描述
局部classInner只有自个才能访问,所以什么都不写
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
匿名内部类:
在这里插入图片描述
抽象方法不能直接用,需要一个实现类实现它
在这里插入图片描述
在这里插入图片描述
若用多态(左父右子),亦没有问题
在这里插入图片描述
之前说过接口不能直接new在这里插入图片描述

所以我们new了后在后面多点东西
在这里插入图片描述
此方法可以省略类的单独创建
在这里插入图片描述
在这里插入图片描述
亦可实现
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
秀我一脸

在这里插入图片描述

DATE类
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
鼠标选中此方法,alt+回车
在这里插入图片描述
在这里插入图片描述
而main方法调用了此方法,所以也得抛出异常
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

package com.company;
import java.util.Calendar;
/*
java.util.Calendar类:日历类
Calendar类是一个抽象类,里面提供了许多操作日历字段的方法(如YEAR、HOUR、DAY of MONTH、HOUR)
Calendar类无法直接创建对象使用,里面有个静态方法叫getInstance,该方法返回了Calendar的子类对象
static Calendar getInstance()使用默认时区和语言环境获得一种日历
 */
public class calendar {
    public static void main(String[] args) {
        Calendar c=Calendar.getInstance();//多态
        System.out.println(c);
    }
}

输出结果:
java.util.GregorianCalendar[time=1607512570473,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id=“Asia/Shanghai”,offset=28800000,dstSavings=0,useDaylight=false,transitions=31,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2020,MONTH=11,WEEK_OF_YEAR=50,WEEK_OF_MONTH=2,DAY_OF_MONTH=9,DAY_OF_YEAR=344,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=2,AM_PM=1,HOUR=7,HOUR_OF_DAY=19,MINUTE=16,SECOND=10,MILLISECOND=473,ZONE_OFFSET=28800000,DST_OFFSET=0]

Process finished with exit code 0

package com.company;
import java.util.Date;
public class data {
    public static void main(String[] args) {
        //空参构造方式
        Date d=new Date();
        System.out.println(d);
    }
}

在这里插入图片描述
可以按照我们熟悉的时间格式

package com.company;
import java.util.Date;
public class data {
    public static void main(String[] args) {
        //空参构造方式
        Date d=new Date();
        System.out.println(d.toLocaleString());
    }
}

在这里插入图片描述

package com.company;
import java.util.Date;
public class data {
    public static void main(String[] args) {
        //空参构造方式
        Date d=new Date(3000L);//三千毫秒
        System.out.println(d.toLocaleString());
    }
}


时间起点英国的1970.1.1.0.0 中国东八区,所以八点
3000L故3秒
在这里插入图片描述
package com.company;
import java.text.SimpleDateFormat;
import java.util.Date;
public class data {
public static void main(String[] args) {
//空参构造方式
Date d=new Date(3000L);//三千毫秒
SimpleDateFormat sdf=new SimpleDateFormat(“yyyy年MM月dd日 HH:mm:ss”);
System.out.println(d.toLocaleString());
String f= sdf.format(d);
System.out.println(f);
}
}
在这里插入图片描述
在这里插入图片描述
可自动生成代码
在这里插入图片描述
会有异常,先将其抛出

package com.company;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class data {
    public static void main(String[] args) throws ParseException {
        //空参构造方式
        Date d=new Date(3000L);//三千毫秒
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        System.out.println(d.toLocaleString());
        String f= sdf.format(d);
        System.out.println(f);
        String str=("2088年08月08日 08:08:80");
        Date parse = sdf.parse(str);
        System.out.println(parse);
    }
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意:国外的月份是从0到11,所以MONTH要加1
在这里插入图片描述
输出2088年
在这里插入图片描述
输出20990年(也可以add负数)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
方法重载
在这里插入图片描述
getTime把日历对象转化为日期对象
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
有课后
一看到缓冲区,则可以提高操作效率
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
append返回值是StingBuilder,所以new一个StringBuilder的bu2接收
比较地址值,两者地址值相等
在这里插入图片描述
在这里插入图片描述
bu1调用的,所以返回bu1(即this)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
应用currentTimeMillis、arraycopy:
为工具类,里面都是静态的方法,所以首先不用创建这些对象
在这里插入图片描述
在这里插入图片描述
当前时间距1970年
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
字符串是引用型变量,而基本数据类型是数值变量, 引用型变量就像C语言里面的指针存放的是该字符串的地址。计算机存储的数据都有一个编号就是地址。字符串就是存放的地址;
比如有两个数值型的数据判断是否相等,直接用‘
’就行了,
但是引用变量就不一样了。比如String s1=“123”;假设这个字符串在计算机的地址&s1=Oxffa00fff; String s2=“123”; 假设这个字符串在计算机的地址是&s2=Oxffa000f0; 如果你像这样比较 s1==s2 返回的是false;因为你这样比较就是他们地址的比较 Oxffa00fff=Oxffa000f0 ? 明显不等,这时就要调用java中字符串的方法equals(); s1.equals(s2) 返回true
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
就是一个字符串,所以直接连接而不是加法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
数字格式化异常
在这里插入图片描述

public class Employee {
    private String name;
    private int age;
    private double salary;
    public Employee(String newName,int newAge,double newSalary){
        this(newAge,newSalary);
        System.out.println("三个参数的构造方法被调用");
        name=newName;
    }
    public Employee(int newAge,double newSalary){
        this(newSalary);
        System.out.println("两个参数的构造方法被调用");
        age=newAge;
    }
    public Employee(double newSalary){
        this.getAge();
        System.out.println("一个参数的构造方法被调用");
    }
    public Employee(){
        System.out.println("没有参数的构造方法被调用");
    }
    void setAge(int newAge){
    int age=0;
    age=newAge;
    }
    int getAge(){
        return age;
    }

    public static void main(String[] args) {
        Employee s1=new Employee("李四",31,8000);
        s1.setAge(31);
        System.out.println("年龄是"+s1.getAge());
    }
}

在这里插入图片描述

public class Ca {
    int a;
    static int b;
    public static void m1() {
        Ca s1=new Ca();
        s1.a=10;
        b=10;
    }
    public static void m2() {
        Ca s1=new Ca();
        s1.a=5;
        b=5;
    }
    public static void m3() {
        m1();
        Ca s1=new Ca();
        s1.m2();
    }

}

静态方法不能访问类的其他成员(成员变量或成员方法),除非这些成员也被声明为static,即静态方法不能直接处理费静态的成员,非静态成员只能通过对象来访问,即在访问非静态成员前需先创建一个对象,创建对象后,再去通过对象访问非静态成员(如上)
(因为静态的先有,非静态后有)

数组长度不可变,所以学了ArrayList集合()
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
set反而无序在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
打印的不是地址,所以重写了方法
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
使用迭代器取出集合中元素的代码,是一个循环的过程
所以我们可以使用循环优化
不知道集合中有多少元素,使用while循环
循环结束条件:hasNext方法返回false
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

new了一个ArrayList,所以内存的堆中有的ArrayList

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
取出元素,然后指针后移
在这里插入图片描述

List下面的可以索引,而set下面的不可以,所以使用一种两者都可的遍历方式:迭代器、增强for.
A、通过集合对象获取迭代器对象
B、使用循环遍历迭代器
C、判断迭代器对象中是否还有元素
D、有元素则获取
在这里插入图片描述
在这里插入图片描述
拿到第一个元素,赋值给i,拿到第二个元素,赋值给i
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
只要遍历,就增强for循环
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


import java.util.ArrayList;
import java.util.Iterator;
public class iteractor2 {
    public static void main(String[] args) {
        show01();
    }
    /*创建集合对象,不使用泛型:
    好处:集合不使用泛型,默认的类型就是object类型,可以存储任意类型的数据.
    弊端:不安全,引发异常.
* */
    private static void show01() {
        ArrayList list=new ArrayList();
        list.add("ddd");
        list.add(1);
        //获取迭代器,使用迭代器遍历list集合
        Iterator it=list.iterator();
        //使用迭代器的方法hasNext和next遍历集合
        while(it.hasNext()){
            Object obj=it.next();
            System.out.println(obj);

        //上面没问题,但若想要使用String特有的方法,length获取字符串的长度,不能使用多态,Object obj="ddd",
        // 多态的弊端,不能使用子类特有的方法,需要向下转型,把Object变成字符串
            //会抛出ClassCastException异常,不能把Integer类型转换为String类型,"ddd"转成功了,但1不能
        String s=(String)obj;
            System.out.println(s.length());
            System.out.println(((String) obj).length());//或者第二种写法
        }
    }
}

在这里插入图片描述
可以使用length方法
在这里插入图片描述
在这里插入图片描述
改为泛型:所有使用数据类型的地方,都改为泛型
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
**************************uihuh
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
--------------死神
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
222222222222222222
在这里插入图片描述
在这里插入图片描述
44min
在这里插入图片描述
调用父类构造方法
在这里插入图片描述
类型不太确定,所以改用通配符?表示,方正确
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
?定义的时候不能用,但作为参数传递可用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
不是同步的=》多线程=》快
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
19min在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
50min在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值