Java学习

JDK的三大版本

javaSE :桌面端开发

JavaEE :企业级开发

JavaME:嵌入式开发

JVM , JRE ,JDK 的关系

JVM是Java虚拟机

JRE是Java运行环境

JDK是开发人员提供的开发工具

 

什么是跨平台?原理是什么

Java语言的程序经过一次编译后,可以在多个平台运行

原理是 :Java程序是通过Java虚拟机在平台上运行的,只要该系统可以安装上对应的虚拟机,就可以运行

Java语言有哪些特点

1.简单易学因为是在C语言的基础上升级

2.面向对象四大特性 :封装,继承,多态,抽象

3.可以跨平台,支持网络编程,支持多线程

4.健壮性(强类型机制,异常处理,垃圾自动回收)

5.安全性高

什么是字节码?采用字节码的最大好处是什么?

字节码是Java源代码经过JVM编译产生的.class文件,不面向任何特定的处理器,只面向虚拟机

Java文件通过字节码的方式解决了传统解释性语言效率低的问题,同时又保证了Java语言可移植性的特点,因此面向其他系统时不需要多编译一次

运行过程:Java源代码通过编译器,编译成.class文件,再被jvm的解释器进行解释成机器可执行的二进制机器码,最终在机器上执行的是机器码,然后程序执行

Java和C++的区别

都是面向对象的语言,都有封装继承多态,但Java是纯粹的面向对象语言也更高级,C++是既面向过程又面向对象,Java不提供指针访问内存,因此也更安全,C++语言支持多继承,Java虽然不支持多继承 ,但可以实现多个接口,Java内存的管理机制不需要手动释放

java数据类型

基本类型有8个: 整数类型 byte、short、int、long 浮点数类型 float、double 字符型 char 布尔类型 boolean 引用类型包括三种: 类 Class 接口 Interface 数组 Array

byte的取值范围为-128~127,占用1个字节(-2的7次方到2的7次方-1)

short的取值范围为-32768~32767,占用2个字节(-2的15次方到2的15次方-1)

int的取值范围为(-2147483648~2147483647),占用4个字节(-2的31次方到2的31次方-1)

long的取值范围为(-9223372036854774808~9223372036854774807),占用8个字节(-2的63次方到2的63次方-1)

编码

Java语言采用Unicode为每一个字符设置了唯一的值因此在任何平台都能使用

注释

/** 单行注释

*

*

*/ 文档注释

/*

*

*

*/多行注释

行内注释/**/

访问修饰符

public

protected 同包 子包能用

default(不写)同包 使用

private 当前类

运算符

&与运算,不能短路

&&与运算,可以短路

关键字

final:被final修饰的类不能被继承,被修饰的方法不能被子类重写,是最终方法,被修饰的变量会变成常量,只能修改一次

final finally finalize:三者没有关系,finally是Try catch,finalize是object的一个方法,一般由垃圾回收期调用

this关键字,代表对象本身,理解为指向对象本身的一个指针

三个用法

(1) this.属性名

this调用本类中的属性,也就是类中的成员变量; (2) this.方法名

this调用本类中的其他方法; (3) this() 用于访问构造方法

this调用本类中的其他构造方法,调用时要放在构造方法的首行。

【1】 super.xxx; xxx可以是类的属性。 例如super.name;即从子类中获取父类name属性的值

【2】 super.xxx(); xxx()可以是类中的方法名。 super.xxx();的意义是直接访问父类中的xxx()方法并调用

【3】 super(); 此方法意义是直接调用父类的构造函数。 super(无参/有参)即调用父类中的某个构造方法,括号里的内容根据你所调用的某个构造函数的变化而改变

static :有一个块的概念,静态代码块程序一执行就加载,只会加载一次,所以把只需要初始化一次的属性放到代码块里,就可以提高性能

Java面向对象设计

面向对象和面向过程的区别是什么:面向过程的优点是性能高于面向对象,因为类在调用时需要实例化,因此需要更多的内存资源

面向对象的优点:易维护,易复用,易扩展 原因:面向对象有 封装 继承 多态等特性,因此可以设计出低耦合的系统

面向对象的底层其实依然是面向过程的,因为底层的类封装的方法是面向过程的,把面向过程抽象成类,然后封装从而方便使用,这就是面向对象

Java三大特性有哪些方面

抽象:

将一类对象的共同特征总结出来构造类的过程,包括了数据抽象和行为抽象两方面,抽象只关注对象有哪些属性和行为,却不关注这些细节

封装:

隐藏实现细节,将类的某些信息隐藏在类的内部,不允许外部程序直接访问,并通过该类提供的方法来实现对隐藏信息的操作和访问

继承:使用已存在的类作为基类,子类继承基类,能够方便复用方法 1.子类拥有父类的非private的属性和方法 2.子类可以拥有自己属性和方法 3.子类可以用自己的方法实现父类的方法,也就是重写

多态:

多态是同一个行为具有多个不同表现形式或形态的能力。两种方式可以实现多态1:继承 2:接口 必要条件:1.继承 2.重写 3.父类引用指向子类对象(向上转型)

重写:

是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变

重载(overloading)

是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。

重载和重写在多态中的区别:

重载是编译时的多态性,而重写是运行时的多态性

抽象类和接口的对比:

根本区别:

抽象类是对类的抽象,是一种设计的模板模式,接口是行为的抽象,是一种行为的规范

相同点:

1.接口和抽象类都不能被实例化(不能被new)

2.都位于继承的顶端,都用于被其他类继承和实现,

3.都包含了抽象方法,其子类都必须覆盖这些抽象方法

不同点:

1.抽象类是通过abstract修饰 ,接口是interface

  1. 抽象类是extends ,接口是 implements

  2. 抽象类中可以有构造器,接口不能有构造器

  3. 访问修饰符不同,抽象类的方法可以是任意的访问修饰符,接口默认是public 也不允许private 和 protected

  4. 一个类只能继承一个抽象类,一个类可以实现多个接口

  5. 字段声明不同,抽象类字段声明可以是任意的,接口默认是 static 和 final 修饰

    拓展:Java8中的接口引入了默认的方法和静态方法 ,其目的是为了减少抽象类和接口之间的差异

普通类和抽象类的区别:

1.普通类不包含抽象方法,抽象类可以包含抽象方法,也可以只有普通方法没有抽象方法

2.抽象类不能实例化,普通类可以实例化

对象实例和对象引用有何不同:

对象的引用会指向对象的实例,对象的引用放在内存的栈内存中,一个对象的引用可以指向一个或0个对象,一个对象有N个对象指向他,对象实例放在堆内存中

成员变量与局部变量的区别:

1.作用域不同

2.存储位置不同 成员变量随着对象的创建而存在,随着对象的消失而消失,存在堆中 。 局部变量在方法被调用时存在,存在于栈中,语句结束后变量被自动释放。

3.生命周期不同:成员变量生命周期更长,对象创建就存在,对象消失而消失,局部变量方法调用时才存在,程序结束就自动释放

4.初始值不同:成员变量有初始值 例如int = 0,而局部变量没有初始值

无参构造器的作用:

首先,没有自己写构造方法时,系统自动创建一个,写了就不创建,所以Java程序执行子类构造方法前会调用父类的构造方法,帮助子类完成初始化,如果没有用super调用父类特定的构造方法,那么就会调用父类 无参构造器;

一个类的构造方法作用是什么?

完成类的初始化工作,也就是为了完成初始化的

若一个类没有声明构造方法,该类能正确执行吗?为什么?

可以,因为类中默认了无参的构造方法

构造方法有哪些特性?

名字与类名相同

2.没有返回值,但不能用 void 声明构造函数

3.生成类的对象时自动执行,无需调用。

静态变量和实例变量的区别:

静态变量用static修饰,属于内存中的一份。实例变量每次创建对象都会给每个对象分配内存空间,实例变量是属于实例对象的,在内存中创建几次对象就有几个成员变量

内部类分类有哪些:

1.成员内部类 :互相调用对象或方法都可以

2.局部内部类 :方法里面定义的类

3.匿名内部类 :它与局部类很相似,不同的是它没有类名,如果某个局部类你只需要用一次,那么你就可以使用匿名内部类

4.静态内部类:被static修饰,不能调用非static对象和方法 ,其他类可以通过创建实例化对象的方式调用静态内部类

实例化方式 : 外部类.内部类 对象 =new 外部类.内部类();

内部类的优点:

内部类不被同包其他类可见,有很好的封装性,匿名内部类方便回调函数

内部类使用场景:几个类的逻辑关系很强,同时想对外隐藏这些类;多线程 ;不需要被其他的类使用时

构造器是否能被重写?不能,因为没法继承所以就不能重写,只能被子类调用; 可以被重载

==和equals :

==:引用数据类型比较内存地址, 基本数据类型比较值

equals:当类没有覆盖equals方法时和==一样, 当类覆盖了equals方法时(String就重写了equals方法) 可以比较具体内容

hashCode与equals的区别:

(1)同一对象多次调用hashCode()方法,总是返回相同的整型值。

(2)如果a.equals(b),则一定有a.hashCode() 一定等于 b.hashCode()。 (3)如果!a.equals(b),则a.hashCode() 不一定等于 b.hashCode()。此时如果a.hashCode() 总是不等于 b.hashCode(),会提高hashtables的性能。

(4)a.hashCode()==b.hashCode() 则 a.equals(b)可真可假

(5)a.hashCode()!= b.hashCode() 则 a.equals(b)为假。

对象相等与指向他们的引用相等两者有什么不同:

对象相等比的是内存中存放的内容是否相等,引用相等比较他们指向的内存地址是否相等

JDK中常用的包有哪些:

lang ,IO ,NIO ,Java.net ,util ,Java.sql

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值