栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java基础

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java基础

Java跨平台性

我们所写的JAVA程序是".java"为后缀的源文件,但这些文件计算机无法直接执行,需要先进行编译环节,通过编译变为以".class"为后缀的字节码文件,这个字节码文件交由JVM(JAVA虚拟机)来运行.

那我们只要在需要运行java应用程序的OS(操作系统)上,安装一个JVM,由JVM来负责Java程序在该系统中的运行即可。不同的OS(操作系统)都有与之对应的JVM,所以只需要写一个Java程序,就可以在多个不同的操作系统上执行。这样就实现了Java程序的跨平台性。也称为Java具有良好的可移植性。

JDK,JRE和JVM关系

数据类型

标识符的原则

1. 标识符可以由字母、数字、下划线(_)、美元符($)组成,但不能包含 @、%、空格等其它特殊字符

2. 不能以数字开头。如:123name 就是不合法

3. 标识符严格区分大小写。如: tmooc 和 tMooc 是两个不同的标识符

4. 标识符的命名最好能反映出其作用,做到见名知意。

5. 标识符不能是Java的关键字

5条字面值规则

1.整数默认为int类型

2.小数默认为double类型

3.byte short char 三种比int小的类型,可以使用范围内的值直接赋值

4.字面值后缀:L F D

5.字面值前缀:0b-2 0-8 0x-16

 5条运算规则

1.运算结果的数据类型与最大类型保持一致

2.3种比int小的类型,运算时会自动提升成int再运算

3.整数运算溢出的问题,一旦溢出,数据就错误了

4.浮点数运算不精确

5.浮点数的特殊值 Infinity NaN

final 和 static的用法

Final用于修饰类、属性和方法:

被final修饰的类不可以被继承

被final修饰的方法不可以被重写

被final修饰的变量不可以被改变,被final修饰不可变的是变量的引用,而不是引用指向的内容,引用指向的内容是可以改变的.

Static:“静态”,可用来修饰类、成员变量和方法,也可以声明一个静态块。

被static修饰的变量,叫静态变量或类变量,静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。

static方法也叫静态方法,也可以直接使用“类.方法()”来直接调用。

静态块是在JVM加载类的时候执行的,并且只会执行一次。

static final:结合上述两者特性,使用无需实例化,声明必须初始化。可以同时使用static和final修饰成员变量和方法,此时的成员变量和方法可以直接用“类.名称”调用,成员变量的值不能改变,方法不能被覆写。

Overload和override的区别

override(重写,覆盖)

(1)方法名、参数、返回值相同。

(2)子类方法不能缩小父类方法的访问权限。

(3)子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。

(4)存在于父类和子类之间。

(5)方法被定义为final不能被重写。

(6)被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。

overload(重载,过载)

(1)参数类型、个数、顺序至少有一个不相同。

(2)不能重载只有返回值不同的方法名。

(3)针对于一个类而言。

(4)不能通过访问权限、返回类型、抛出的异常进行重载;

(5)方法的异常类型和数目不会对重载造成影响。

override应用

(1)最熟悉的覆盖就是对接口方法的实现,在接口中一般只是对方法进行了声明,而我们在实现时,就需要实现接口声明的所有方法。

(2)除了这个典型的用法以外,我们在继承中也可能会在子类覆盖父类中的方法。

总结

override是在不同类之间的行为,overload是在同一个类中的行为。

Overload的方法可以改变返回值的类型,因为它与返回值类型无关。

构造器Construct是否可被Override?

构造器不能被继承,所以不能被重写,但可以继承。当子类中没有任何构造器的时候,会通过super()调用父类的无参构造器。

接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可以继承具体类?抽象类中是否可有静态的main方法?

接口可以继承接口;抽象类可以实现接口,因为抽象类不一定就全是抽象方法;抽象类可以继承实体类;抽象类中可以有静态的main方法。

抽象类和普通类的唯一区别就是不能创建实例对象和允许有abstract方法。

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

1)语法定义上的区别

静态变量用static修饰

实例变量没有static修饰

(2)运行区别,实例区别

静态变量在类中,不属于实例对象,属于类所有,只要程序加载了字节码,不用创建实例对象静态变量就会被分配空间,已经可以使用。

实例变量是某个对象的属性,只有实例化对象后,才会被分配空间,才能使用。

类变量是所有对象共有,其中一个对象将它值改变,其他对象得到的就是改变后的结果;

而实例变量则属对象私有,某一个对象将其值改变,不影响其他对象;

分析:静态变量共同类所有,值改变后,在之后的实例对象中也改变

实例变量属于当前对象所有

抽象类和接口的区别

1.相同点
  A. 两者都是抽象类,都不能实例化。
  B. interface实现类及abstrct class的子类都必须要实现已经声明的抽象方法。

2. 不同点
  A. interface需要实现,要用implements,而abstract class需要继承,要用extends。
  B. 一个类可以实现多个interface,但一个类只能继承一个abstract class。
  C. interface强调特定功能的实现,而abstract class强调所属关系。
  D. 尽管interface实现类及abstrct class的子类都必须要实现相应的抽象方法,但实现的形式不同。interface中的每一个方法都是抽象方法,都只是声明的 (declaration, 没有方法体),实现类必须要实现。而abstract class的子类可以有选择地实现。

 E. abstract class是interface与Class的中介。

abstract class

Interface

实例化

不能

不能

类

一种继承关系,一个类只能使用一次继承关系.可以通过继承多个接口实现多重继承

一个类可以实现多个接口

数据成员

可有自己的数据成员

静态的不能被修改即有static final

方法

可以私有的,非abstract方法,必须实现

不可有私有的,默认public,abstract类型

变量

可有私有的,默认是friendly 型,其值可以在子类中重新定义,也可以重新赋值

不可有私有的,默认是public static final 型,且必须给其初值,实现类中不能重新定义,不能改变其值。

设计理念

表示的是“is-a”关系

表示的是“like-a”关系

实现

需要继承,要用extends

要用implements

this和supper的区别

super: 它引用当前对象的直接父类中的成员(用来访问直接父类中被隐藏的父类中成员数据或函数,基类与派生类中有相同成员定义时如:super.变量名 super.成员函数据名(实参)

this:它代表当前对象名(在程序中易产生二义性之处,应使用this来指明当前对象;如果函数的形参与类中的成员数据同名,这时需用this来指明成员变量名)

super()和this()类似,区别是,super()在子类中调用父类的构造方法,this()在本类内调用本类的其它构造方法。

super()和this()均需放在构造方法内第一行。

尽管可以用this调用一个构造器,但却不能调用两个。

this和super不能同时出现在一个构造函数里面,因为this必然会调用其它的构造函数,其它的构造函数必然也会有super语句的存在,所以在同一个构造函数里面有相同的语句,就失去了语句的意义,编译器也不会通过。

this()和super()都指的是对象,所以,均不可以在static环境中使用。包括:static变量,static方法,static语句块。

从本质上讲,this是一个指向本对象的指针, 然而super是一个Java关键字。

break ,continue ,return 的区别及作用

break 跳出总上一层循环,不再执行循环(结束当前的循环体)

continue 跳出本次循环,继续执行下次循环(结束正在执行的循环 进入下一个循环条件)

return 程序返回,不再执行下面的代码(结束当前的方法 直接返回)

size()方法和length属性

在编程时经常会用到的两个东西,老是记混,因此特地看了一下。

length是数组的一个属性,在获取值的时候是按属性的方法获取。

而size()是链表的一个方法,用于获取链表的长度

面向对象三大特性

封装: 把相关的数据封装成一个“类”组件

继承: 是子类自动共享父类属性和方法,这是类之间的一种关系

多态: 增强软件的灵活性和重用性

类和对象的关系
  1. 我们先创建类,再通过类创建出对象
  2. 我们可以通过一个类创建出多个对象
  3. 类是抽象的,对象是具体的

对象的创建过程分析:

Phone p = new Phone(); 这句代码,再内存中会发生什么呢?

1.在栈内存中开辟一块空间,存放引用类型Phone类型的变量p

2.在堆内存中开辟一块空间,存放Phone类型的对象

3.要给这个对象进行初始化,比如:String brand = null;

4.当对象准备好以后,会生成一个唯一的地址值,然后将此地址值交给引用类型的变量p来保存

5.如果以后想要操作此对象的各种资源,可以通过p变量保存的地址值找到该对象,比如:p.call(); p.price = 66.6;

异常

异常处理只有两种方式: catch 和 throws,所以必须二选一

由于Java语法本身的特点,需要开发者事先考虑异常如何处理,也就是我们常说的:“未雨绸缪”

对于初级开发者来说,我们可能会捕获,但不处理异常

try {undefined

…

} catch(Exception e) {undefined

}

底层异常,应该向前抛到前面处理

经验少时,不知道该在什么位置捕获处理,应该选择 throws

但是大家需要注意,在异常抛出时,有些异常比如运行时异常,可能并不会强制要求抛出此异常,调用时也没有报错显示需要额外处理,这个时候就需要大家平时多积累,掌握良好的编码习惯了,手动添加代码进行预处理,增强程序的健壮性了。

程序错误分为三种:
编译错误(checked异常);
运行时错误(unchecked异常);
逻辑错误;

throws 与 throw 的区别

throws

用在方法声明处,其后跟着的是异常类的名字

表示此方法会抛出异常,需要由本方法的调用者来处理这些异常

但是注意:这只是一种可能性,异常不一定会发生

throw

用在方法的内部,其后跟着的是异常对象的名字

表示此处抛出异常,由方法体内的语句处理

注意:执行throw一定抛出了某种异常

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/709032.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号