java基础08

来源:互联网 发布:淘宝翡翠手镯 编辑:程序博客网 时间:2024/06/05 04:45

Math类:

API中对应的类:

字段摘要:成员变量

构造方法摘要:构造方法

方法摘要:成员方法

Math类要掌握的内容:

成员变量:

自然对数底数:public static final double E

圆周率:public static final double PI

Final  用于修饰字面值常量

成员方法:

随机数:public static double random()

绝对值:public static int abs(int a)  有承载方法

向上取整:public static double ceil(double a)

Eg:Math.ceil(12.567)=13.0

Math.ceil(12.345)=13.0

Math.ceil(-12.567)=-12.0

Math.ceil(-12.345)=-12.0

向下取整:public static double floor(double a)

最大值:public static int max(int a,int b)

最小值:public static int max(int a,int b)

次幂:public static double pow(double a,double b)

四舍五入:public static int round(float a)

原理:(int)Math.floor(a+0.5f)

正平方根:public static double sqrt(double a)

 代码块
(1)由{}括起来的代码,就被称为代码块。
(2)分类及作用:
局部代码块:限定变量的生命周期,及时从内存释放,提高效率。
构造代码块:把所有构造方法中相同的代码抽取出来,提高代码复用性。
静态代码块:适用于在一个系统中只执行一次的代码。
(3)面试题:静态代码块,构造代码块,构造方法的执行顺序
静态代码块 > 构造代码块 > 构造方法

Person p=new Person()到底做了哪些事情:

A:通过类加载器把person.class文件加载进内存

B:在栈内存为p变量开辟空间

C:在堆内存,为Person对象开辟空间

D:对对象进行默认初始化,对对象的成员变量进行显式初始化。

E:假设有构造代码块,就先执行了构造代码块,如果没有,就执行构造方法对成员变量进行初始化。

F:到此对象已经初始化完毕

G:把对象所在的堆内存的地址值给p变量


面向对象之继承:

我们在定义一个类的时候可以在其他类的基础上扩充,不用重头开始,

Java是怎么描述继承的呢? Extends 

定义格式

class subClass extends faClass{}

 

父类是怎么来的?

有多个类中相同的成员变量和成员方法抽取出来的

继承的好处:

A:提高代码的复用性

B:让类与类产生了一个关系,它是多态的前提

继承的特点:

A:Java中类只支持单继承,不支持多继承

B:Java类可以多层继承

什么时候用继承?
A:继承表达的是一种关系:is a。
所以。我们采用假设法即可。
举例:A和B两个类。
B:不要为了部分功能而去继承。

注意:不要为了部分功能而去继承。

应用场景:

继承体现了一种关系:is-a 的关系

具有相关联的联系

继承后子父间的成员关系
A:成员变量
a:如果名字不同,太简单了。
b:如果有名字相同的变量,在方法中使用的时候:
首先在局部范围找,有就使用。
然后在成员位置找,有就使用。
最后在父类成员位置找,有就使用。
实在没有就报错。


B:构造方法
a:子类并没有继承父类的构造方法。
b:子类的构造方法执行前会先执行父类的构造方法。
这个时候,并没有创建父类的对象,仅仅是对父类的内容进行了初始化。


注意:
如果父亲没有无参构造。
在子类中,要么用this(...)要么用super(...)

C:成员方法
a:如果名字不同,太简单了。
b:如果有名字相同的方法,是重写的表现形式。(覆盖,复写)
子类使用的是自己的。

方法重写:和父类方法声明相同的方法。跟父类方法一模一样即可。
详细讲解:
方法名相同,参数列表相同。
返回值类型小于等于父类的返回值类型。
权限修饰符大于等于父类的权限修饰符。


注意:
A:父类私有的方法不能被重写
B:静态方法只能被静态方法重写静态。
 

如果子类想使用父类的东西,可以通过一个关键字去调用。Super . 可以理解为父类的对象 引用。因为super代表的是父类的存储空间。

子父间的构造方法关系:(无法被继承)

在执行子类的构造方法前,会先执行父类的构造方法

注意:在子类的构造方法中,第一条语句的位置都隐藏了super();

  在构造方法中,this()super()这种用法只会存在一个

记住:任何类都默认继承Object

 

子父类之间成员方法之间的关系:

本类的对象无法调用本类私有的成员

当子类中有和父类一模一样的方法的时候,子类使用的是自己的,这种现象

称为方法(覆盖)重写

 

方法重写:

建议,子类和父类的模式一模一样。

方法声明相同。方法名必须相同,参数列表必须相同

返回值类型可以不同。(基本数据类型必须相同)

引用类型的时候,子类的返回值类型要是父类或者是父类返回类型的子类。

 

推荐:修饰符,返回值类型,方法名,参数列表都相同。

注意:

子类的访问权限一定要大于等于父类的权限

私有方法不能被重写。

静态只能被静态方法重写。

this 和 super的区别?应用场景?

this:是当前类的引用对象

super:是父类的存储空间标识,亦可以是父类的引用对象。

应用场景

成员变量:

构造方法:

成员方法:

方法重写和方法重载的区别?重载可以改变返回值类型吗?

 方法重写:在不同类中,方法声明相同。(方法名和参数列表)
扩充:返回值类型可以小于等于父类返回值类型
     权限修饰符要大于等于父类的权限修饰符
方法重载:在同一个类,方法名相同,参数列表不同。
重载可以改变返回值类型,因为它和返回值类型无关。
重载:overload
重写:override

构造方法问题:

子类在实例化的时候,会首先调用父类的构造方法。

在子类的构造方法中,默认有一个调用的无参构造方法。

假如父类并没有提供无参构造方法。

这个时候,代码就会报错,请问怎么解决?

使用super(..)调用父类带参构造方法

使用this(..)调用本类的其它构造方法


子类的实例化过程:子类会具备父类的实例化过程

面向对象的三大特征:封装、继承、多态

Final关键字:

最终的意思,它可以修饰类,成员变量,成员方法。

特点:它修饰的方法不能被重写

  它修饰的成员变量是一个常量。

数据类型 变量名=初始化值;

常量修饰符 数据类型 常量名=初始化值;

  它修饰的类不能被继承。

注意:final定义的变量必须给值,在什么时候给值?

在定义的时候就给值。一般都是这样用的。

(面试)还有没有其他的时候给赋值的情况?

在构造方法执行完毕之前进行赋值都可以。构造方法里,代码块里赋值。

 

Final修饰基本数据类型:表示值不能改变。

Final修饰引用数据类型:地址值不能改变,而对象的成员变量可以改变

案例:

/*final修饰基本类型变量:表示值不能改变。final修饰引用类型变量:表示地址值不能改变,而该对象的内容是可以发生改变的。*/class Demo {public void show(final int x) {//x = 20;System.out.println(x);}public void print(final Student s) {s.age = 100;System.out.println(s.age);}}class Student {int age = 20;}class FinalTest2 {public static void main(String[] args) {Demo d = new Demo();d.show(10);Student s = new Student();d.print(s);}}



0 0