Java相关知识点

Java相关知识:

1.特点:

去掉了c语言的指针,核心机制jvm(Java虚拟机),加入了垃圾回收机制GC,Java语言跨平台性:有了不同平台的jvm,可以使Java运行在不同的操作系统上。

2.jdk(jre(jvm,类库)、开发工具集),配置环境变量,

3.编写、javac.exe:.class编译:有几个类生成几个字节码文件,文件名与源文件类名相同,public只能有一个类且和源文件名相同、java.exe解释运行

环境搭建:

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

2.IT行业三大发展规律

在这里插入图片描述

3.bit与byte(比特与字节)

在这里插入图片描述
还有PB、EB、ZB、YB等单位

4.关键字

关键字、保留字(goto、const暂时不用,以后的版本可能会用)、标识符(自己可以起名字的地方,class )规则:

5.转义字符:\b 退格符 \n 换行符 \r 回车符 \t 制表符 \ “ \ ’ \ \

\u0123 Unicode码表示字符常量 ascll(SPACE 32 A 65 a 97)

6.byte\char\short 做运算时,结果是int 类型 用int去接收 int-long-float-double

浮点型默认为double

在这里插入图片描述

常用命令行

在这里插入图片描述

文档注释

在这里插入图片描述

在这里插入图片描述

4.long与float

float:4字节
long:8字节
float范围比long大,long强制转换为float会有精度损失
float存储结构:
在这里插入图片描述
十进制小数转为二进制小数:
在这里插入图片描述

在这里插入图片描述

5.boolean

占几个字节

如果boolean是单独使用:boolean占4个字节。

如果boolean是以“boolean数组”的形式使用:boolean占1个字节。

6.类型转换

自动类型提升:
在这里插入图片描述在这里插入图片描述
在这里插入图片描述此时不写,12.3默认double类型,无法自动转换为float
在这里插入图片描述

强制类型转换:(int)doubled1

7.进制

世界上有10种人,认识和不认识二进制的。

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

A - 10

负数的原码除符号位各个位取反得到反码,+1得到补码,正数都一样
在这里插入图片描述

计算机底层都用补码来存储数据
在这里插入图片描述
在这里插入图片描述

int 类型的128强制转换为byte, 原本的1变成符号位,然后按照补码识别为-128

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

8.运算符

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iXoVmW7A-1659947002526)(../AppData/Roaming/Typora/typora-user-images/image-20220209142758558.png)]

instanceOf

逻辑运算符,用于布尔类型,逻辑与&或|非!、(前面不对,第二个条件不执行,即符号左边已经是false了,右边的条件将不执行,逻辑与会执行)短路与&&或||非^(异或)
在这里插入图片描述

位运算符操作的都是整形的数据,<< 向左移一位,相当于*2
在这里插入图片描述
在这里插入图片描述

可以使用位运算符交换两个变量的值 ^

三元运算符:

条件?a:b , a和b需要同类型,

Object o1 = true ? new Integer(1) : new Double(2.0);
syso(01); // 2.0  idea快捷键为sout+tab,eclipse是syso->alt+/
//两边需要同类型,1提升为double类型

9.程序流程控制

顺序结构、分支结构、循环结构(for、while、dowhile、foreach)

switch结构中的表达式,只能是byte、short、char、int、枚举类型(jdk5.0)、string类型(jdk7.0)

case之后只能声明常量,不能声明范围

dowhile至少会执行一次循环体

10.break和continue

break跳出包裹的最近一层循环,continue跳出当此循环

标签的使用:在指定的循环加个标签头,跳出指定的循环

label:for(。。)

break label;

11.数组

静态初始化:初始化和数组元素的赋值操作同时进行

int[] ids = new int[]{121, 121};

动态初始化

String[] names = new String[5];

12.内存的简化结构

在这里插入图片描述

二位数组:

String[ ] [ ] arr2 = new String[ 3 ] [ 2 ] ;

String[ ] [ ] arr2 = new String[ 3 ] [ ] ;

String[ ] [ ] arr2 = new String[ ] [ ] { {1,2,2 }, {1,2}, {1,12,2}};

[ ] 放在标识符或者变量名后

在这里插入图片描述

没初始化过内层,数据是引用类型,未初始化所以指向的是null,引用类型的变量只能存储两种值:null或地址值
在这里插入图片描述

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

13.Arrays工具类

数组常见方法的操作工具类

sort方法用的是快排
在这里插入图片描述
在这里插入图片描述

14.面向对象

类的成员:属性、方法、构造器、代码块、内部类

三大特征:封装性、继承性、多态性、(抽象)

pop与oop

在这里插入图片描述

对象的内存解析:

在这里插入图片描述
通常说的栈是虚拟机栈
在这里插入图片描述

属性(成员变量)与局部变量的对比:

局部变量:形参、方法内、代码块内

​ 调用时需要显式赋值,加载到堆空间

成员变量:可以使用权限修饰符:private、public、proptected、缺省、final,实例变量和类变量(静态变量static修饰)

​ 加载到栈空间

对象数组
在这里插入图片描述

15.匿名对象

只能调用一次,new phone().name

16.重载

同名方法,与返回值类型无关,只看参数个数和类型是否不同

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

可变个数的形参:

​ 和数组不构成重载,必须声明在末尾,最多声明一个可变形参
在这里插入图片描述

如果变量是基本数据类型,赋值的是数据值,引用数据类型保存的是数据的地址值

参数传递的两个小技巧
1.方法内终止方法外的输出
在这里插入图片描述
在这里插入图片描述

system.exit(0);
终止jvm运行

2.重写打印流方法
在这里插入图片描述

重载和重写的区别

在这里插入图片描述

在这里插入图片描述

17.封装

将类的属性private私有化,提供公共的set和get方法来获取

单例模式

类只能用public、default

构造器,系统默认提供一个空参的构造器,如果显式定义了类的构造器后,系统就不再提供默认的空参构造器
属性的赋值过程:
在这里插入图片描述

18.JavaBean

类是公共的

有一个无参的公共的构造器

有属性,且有对应的get、set方法

在这里插入图片描述

UML类图

在这里插入图片描述

19.继承

extend
重写细节:

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

子类的访问修饰符不能小于父类的

创建子类对象时,会间接调用父类的构造方法,所以子类中会有父类的结构

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

子类的堆空间里需要有父类的结构,就是通过调用super()来获取:

20.多态性

在这里插入图片描述

在这里插入图片描述

(虚拟方法调用:多态的情况下,父类里面和子类相同名参的方法,执行的是子类重写父类的方法)

是一个运行时行为,运行时才知道new的是哪个子类对象,进而调用对应的方法

前提:类的继承关系;方法的重写

​ 当调用子父类同名同参数的方法时,实际执行的是子类重写父类的方法,当时调用子类的方法调用不了

编译时的状态;有了对象的多态性后,我们在编译期,只能调用父类声明的方法,运行时执行的是子类重写父类的方法

运行时的状态

用例:传参的父类设计为Object类型,或连接多种数据库的链接时用统一的父类

对象的多态性只适用于方法不适用于属性,
person的id是1001
man extends person 的id是1002
person p2 = new man();
在这里插入图片描述

21.向下转型、自动装箱

向下转型:B b1 = (B)a,需要有子父类关系

**自动装箱:**基本数据类型包装成引用类,原本需要new一下,Java5.0后不需要再new,直接Integer n1 = 1即可赋值

**自动拆箱:**调用包装类的xxxValue() ,5.0后直接可以把包装类对象赋给基本数据类型,不需要再调用方法。

String类中重载的valueOf可以把基本或包装类转换成字符串

调用parseXxx(String s) 字符串变成基本或包装类

在这里插入图片描述

22.object

线程wait、notify、notifyall、clone、equals()定义的方法内容和==相同、toString、getClass()反射相关、hashCode、finalize()调用gc垃圾回收机制前的方法、
在这里插入图片描述
在这里插入图片描述

23. == 和 equals()

==:

  1. 比较基本数据类型,比较两个变量保存的数值是否相等
  2. 比较的是引用类型,比较两个变量的地址值是否相等(变量类型需一致,否则编译报错)

equals(Object obj)方法

适用于引用类型,

String、Date、File、包装类等都重写了object方法,比较的是实体内容是否相同。

重写:1.先比较引用地址是否相同;2.比较类型是否相同;3.编译器中可自动生成,toString方法也可自动生成

24.单元测试JUnit

1.当前工程add libraries-JUnit4

2.创建的Java类:public、提供公共构造器、测试的方法无形参、返回值

3.单元测试方法上要声明注解@Test,导入对应包

4.无异常,绿条通过

25.包装类Wrapper

(Byte、Short、Integer、Long、Float、Double)父类为number、Boolean、Character,无法直接加减乘除运算

针对八种基本数据类型定义对应的引用类型-包装类(封装类),让基本数据类型也有类的特征

Integer类中定义了一个内部类,有一个封装加载好的integer数组,使用自动装箱的时候,取值的数值在-128到127之间,调用的是数组中的值。不用再去new,提升效率

在这里插入图片描述

26.static

静态,

可以修饰属性、方法、代码块、内部类

修饰属性:静态变量,类的多个对象共享同一个静态变量,一个修改别的也修改过

  1. 静态变量随着类的加载而加载,早于对象的创建
  2. 可以通过类.静态变量 进行调用,类只会加载一次,变量在内存中存一份
  3. 静态方法中只能调用静态的方法和属性,方法内不能使用this和super
  4. 工具类中的方法习惯上声明为静态的
  5. static final : 全局常量

27.单例模式(Singleton) *

某个类只产生一种对象实例,该类只提供一个获取的方法,其构造器的访问权限为private,内部产生该类对象

应用场景:计数器、日志应用、数据库连接池、读取配置文件的类、任务管理器、回收站

//饿汉式:
//线程安全
Class Bank {
   
    //创建私有的构造器
 	private Bank(){
   
        
    }
    private static Bank instance = new Bank();
    
    public static Bank getInstance(){
   
        return instance;
    }
}

//*******************************************************

//懒汉式,未改进:存在线程不安全
Class Bank {
   
    //创建私有的构造器
 	private Bank(){
   
        
    }
    private static Bank instance = null;
    
    public static Bank getInstance(){
   
        if(instance == null){
   
            instance = new order();
        }
        return instance;
    }
}
//改写成线程安全:
 Class Bank {
   
    
 	private Bank(){
   
        
    }
    private static Bank instance = null;
    
    //方式一:
    public static synchronized Bank getInstance(){
   
        if(instance == null){
   
            instance = new order();
        }
        return instance;
    }
    //方式二:  效率慢
   public static Bank getInstance(){
   
   synchronizedBank.class){
   
        if(instance == null){
   
            instance = new order();
        }
        return instance;
    }
}

28.代码块

{
   
    //1.用来初始化类、对象,可以调用非静态或静态
    
}

static{
   
    //随着类的加载而执行一次,只能调用静态的属性和方法
}

在这里插入图片描述

![在这里插入图片描述](https://img-blog.csdnimg.cn/4401eb3786d24b6885c7810166659ed7.pn
在这里插入图片描述

29.抽象类和抽象方法

关键字:abstract

修饰类、方法

修饰类:

  1. 此类不能实例化
  2. 抽象类中一定有构造器,便于子类对象实例化时调用

修饰方法:

  1. 只有方法的声明,没有方法体
  2. 抽象类中可以没有抽象方法,有抽象方法一定是抽象类
  3. 子类重写了所有的抽象方法,才可以实例化,否则子类也是抽象类

30.匿名类

public class Test{
   
    public static void main(String[] args) {
   
        //p是Person的一个匿名子类的对象(抽象类的匿名子类对象、多态性)
        Person p = new Person(){
   
            @Override
            public void eat(){
   
                syso;
            }
        }
        
        //匿名对象
        method(new XXX());
        
        //匿名子类的匿名对象
        method(new Person(){
   
            @Override
            public void eat(){
   
                syso;
            }
        });
    }
}

public static void method1(Person p){
   
    p.eat();
}

abstract class Person {
   
    void eat();
}


31.模板方法设计模式 *

父类中易变的部分抽象出来,供给不同的子类实现

在这里插入图片描述

32.接口

关键字:interface

“多重继承”

接口就是规范,是一组定义好的规则
在这里插入图片描述

/*	1.接口中不能定义构造器
 	2.通过implements实现接口调用
 	3.需要覆盖所有抽象方法,此实现类就可以实例化,没有实现完成需声明为抽象类
 	4.接口之间可以多继承
 	
 	接口的使用上,体现了多态性,接口不能产生实例需要用实现的类去完成
*/

//jdk7以前,只能定义 **全局常量**  和抽象方法,书写时可以省略, 注意是常量final
interface F{
   
    public static final int MAX_A = 7000
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值