Java—java基础总结
创始人
2024-03-16 17:25:40

文章目录

  • JDK、JRE作用+关系?
  • java跨平台性
  • 字符串常量池
  • 代码单元?码点?
  • 运算
    • 自增自减
    • 位运算
      • “>>”和”>>>”区别?
    • 移位运算
  • final
    • final、finally、finalize的区别?
  • static
    • static什么意思
    • static的作用?
    • Java中是否可以覆盖一个private或者static的方法?
    • 为什么在static环境中不能访问非static变量?
  • instanceof关键字
  • 重载和重写
  • super
  • java中创建对象的几种方式?
  • 能否创建一个包含可变对象的不可变对象?
  • Object类的方法

———————————————————————————

JDK、JRE作用+关系?

【总结】

  • jdk使用javac指令,将java文件编译成class文件;
  • jre将class文件编译成汇编语言和c,让操作系统执行;
  • jre中的jvm进行最终编译。

【jdk】: 是java标准开发工具包,下载的时候一般也是下载的JDK;

  • jdk主要是用来做开发的。
  • jdk包含:各种资源包(Java基础类库),javac(编译工具),工具包(监测java运行环境的一系列工具),JRE。
  • jdk主要使用javac指令,将java文件编译成class文件。
  • jdk负责编译检测,编译本身是对java进行初步检测(看有没有初步的错误,没加分号,拼写错误之类的),进行初次编译。

【jre】: java必不可少的运行环境。

  • 将class文件编译成汇编语言和c,让操作系统执行。

【jvm】: 本身只是虚拟机,java虚拟机是jre的一部分。

  • 负责执行字节码文件(真正运行字节码文件的是jre当中的jvm)
  • java虚拟机通过和操作系统合作,在内存条上开辟内存空间

java跨平台性

跨平台性,是指java语言编写的程序,一次编译之后形成 .class文件 可以在多个系统平台上运行。
java程序通过不同系统平台安装不同的jre,以屏蔽底层操作系统的差异,实现跨平台运行,只要该系统安装相应的jre,该系统就能运行该程序。

至于为什么只强调java语言的跨平台性,而不强调python的跨平台性?—>因为java语言比其他能跨平台语言开发的要早,在java之前,主流语言只有c和c++,c和c++不能在linux上运行,java语言能够在不同操作系统上运行的也不是java文件,而是经过编译成功后的class文件,才能在windows上和linux上运行,所以说java一次编译到处运行;而且,这个优势是针对c和c++而言的,不针对python,因为python也能在不同操作系统运行,但是python出现的晚,早期只有java能实现跨平台,所以一般只强调java的跨平台性。

字符串常量池

字符串常量池是由JVM提供的,用来存储常量的内存空间,可以提高性能和减少开销;有String字符串常量池、包装类常量池等。

  • JDK1.7之前:在jdk1.7之前,常量池是存放在方法区中的。
  • JDK1.7:在jdk1.7中,字符串常量池移到了堆中,运行时常量池还在方法区中。
  • JDK1.8:jdk1.8删除了永久代,方法区这个概念还是保留的,但是方法区的实现变成了元空间,常量池沿用jdk1.7,还是放在了堆中。这样的效果就变成了:常量池和静态变量存储到了堆中,类的元数据及运行时常量池存储到元空间中,JVM内存变成了直接内存。

代码单元?码点?

**代码单元:**指字符在编码中占据的比特数;在具体编码形式中的最小单位,基本的多语言级别,每个字符用16位表示代码单元。
**码点:**指与一个编码表中的某个字符对应的代码值

运算

自增自减

如果a=10;a=a++;//输出a=10,会失效
如果a=10;b=a++;//输出b=11

位运算

有左移( << )、右移(>> ) 、无符号右移( >>> ) 、位与( & ) 、位或( | )、位非( ~ )、位异或( ^ )

“>>”和”>>>”区别?

  • “>>” 是有符号右移,按二进制计算,如果如果该数为正,则高位补0,若为负数,则高位补1;每右移一位相当于除以2。
  • “>>>” 是无符号右移,也叫逻辑右移,参与运算的两个数据,按二进制计算,无论该数为正数还是负数,在一定范围内,向右移动,右移后高位都补0。

移位运算

1、a = a << 3;往左移动三位,超出的会删掉,右边补0,相当于乘了2的3次方
2、移位运算比a64运算速度快
3、超范围计算会结果出错
4、计算机内部把乘法拆成了移位运算;a
万亿级别的数字,最多有40个数 2的指数相加
5、如果乘的数是2的n次方,则一次性移动n位,如果乘的是2的n+m+i等,则拆成了几个2的n次方,就移动几次
6、向右移动为乘法,向左移动为除法
7、向右移动几位,就在左边移动几个符号位
8、无符号:a >>> 5向右移动4位,左边补4个0

final

1)final修饰的是常量,不可以被第二次赋值
2)final修饰的类不可以被继承
3)final修饰的方法不可以被重写(覆盖),可以重载。// final int B = 20;
4)final防止指令重排序,保障多线程下的并发安全
定义常量一般用大写

final、finally、finalize的区别?

  • final 修饰变量、方法、类,分别表示变量是一个常量,不能再被赋值;方法不能被重写;类不能被继承。也可以防止指令重排序,保证多线程下的安全性。

  • finally 用在try-catch(保证线程不会被中断)语句中,finally后面跟着的代码块表示无论是否抛出异常,改代码块一定会被执行。
    一般用于需要释放资源的情况(资源一定会关闭,避免堆积)。

  • finalize 是Object类的方法,每一个对象都有这么个方法,在该对象被回收的时候被调用,因为无法确定该方法什么时候被调用,很少使用。

static

static什么意思

"static"关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问。

static的作用?

static修饰的是在方法区当中
1、修饰变量—>类变量,被所有该类产生的对象共享

2、 修饰方法—>
(1)static修饰的两个方法可以互相调用(类方法可以调用类方法);
注意:this修饰的关键字,不能在static修饰的方法中出现,因为this属于当前对象,static是属于类的,有类不一定有对象。
(2)static修饰方法不能调用非static修饰的方法(类方法不能调用非类方法);
(3)非static修饰方法能调用static修饰的方法(非类方法可以调用类方法)。
因为类是构建对象的模板,那一定是现有类方法才能有对象方法;有类方法不一定有对象方法。

3、修饰代码块——在main方法执行前执行;main方法是程序执行的入口,但不是第一个执行的

Java中是否可以覆盖一个private或者static的方法?

Java中static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而static方法是编译时静态绑定的。static方法跟类的任何实例都不相关,所以概念上不适用。

为什么在static环境中不能访问非static变量?

static变量在Java中是属于类的,它在所有的实例中的值是一样的。当类被Java虚拟机载入的时候,会对 static变量进行初始化。如果代码中尝试不用实例来访问非static的变量,编译器会报错,因为这些变量还没有被创建岀来,还没有跟任何实例关联上。

instanceof关键字

用来判断instanceof左侧的句柄记录的对象类型 是否是右侧的类型或右侧的子孙后代类型。

(判断对象是否属于某个类或其子孙后代类的实例)

重载和重写

  • 方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。
  • 重载:发生在同一个类中,方法名相同参数列表不同(参数类型不同、个数不同、顺序不同),与方法返回值和访问修饰符无关,即重载的方法不能根据返回类型进行区分
  • 重写:发生在有继承关系的类中,方法名、参数列表必须相同,返回值小于等于父类,抛出的异常小于等于父类,访问修饰符大于等于父类(里氏代换原则);如果父类方法访问修饰符为private则子类中就不是重写
  • 构造方法不能被继承,因此不能被重写,但可以被重载

super

子类构造方法调用父类构造方法的注意事项有哪些?

子类构造方法调用父类构造方法需要使用super关键字
super()关键字注意事项:super在调用父类中的构造方法时,应该放在构造方法的第一行。

1)当父类当中使用的是无参构造器,子类的构造函数当中不需要显示的调用父类的构造函数。

2)当父类当中只有带参数的构造函数的时候,子类当中必须显示的调用父类当中的构造函数。

3)当父类当中既有无参构造函数又有带参构造函数的时候,子类可以选择调用父类的构造函数(可以调用有参的,也可以调用无参的)。

java中创建对象的几种方式?

java中提供了以下四种创建对象的方式:

  • new创建新对象
  • 通过反射机制
  • 采用clone机制
  • 通过序列化机制

前两者都需要显式地调用构造方法。对于clone机制,需要注意浅拷贝和深拷贝的区别;对于序列化机制需要明确其实现原理,在java中

序列化可以通过实现Exte rnalizable或者Se rializable来实现。

能否创建一个包含可变对象的不可变对象?

可以,final Person[] persons = new Persion[]{} . persons是不可变对象的引用,但其数组中的Person实例却是可变的。这种情

况下需要特别谨慎,不要共享可变对象的引用。这种情况下,如果数据需要变化时,就返回原对象的一个拷贝。

Object类的方法

1、Object()

默认构造方法

2、clone()

创建并返回此对象的一个副本(复制对象)

3、equals(Object obj)

指示某个其他对象是否与此对象"相等"。

4、finalize()

当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法,该方法用于释放资源。

5、getClass()

返回一个对象的运行时类,获得类型的信息。

6、hashcode()

该方法将对象的内存地址进行哈希运算,返回一个int类型的哈希值(返回该对象的哈希码值)。功能:是相等对象拥有相同的哈希码,尽量让不等的对象具有不同的哈希码。

7、notify()

唤醒在此对象监视器上等待的单个线程。

8、notifyAll()

唤醒在次对象监视器上等待的所有线程。

9、toString()

返回该对象的字符串表示。以便用户能够获得一些有关对象状态的基本信息。简单说就是利用字符串来表示对象。

10、wait()

导致当前的线程等待,直到其他线程调用此对象的notify()方法或notifyAll()方法。

11、wait(long timeout)

导致当前的线程等待,直到其他线程调用此对象的notify()方法或notifyAll()方法,或者超过指定的时间量。

12、wait(long timeout, int nanos)

导致当前的线程等待,直到其他线程调用此对象的notify()方法或notifyAll方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量。

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...