一、Math类
(1)Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。
public static double random()返回带正号的 double 值
,该值大于等于 0.0 且小于 1.0,[0.0,1.0),永远接近1.0返回值是一个随机选择的数。
(2)应用举例:
package org.westos_Math.random;
import java.util.Scanner;
/*
* 键盘录入数字,猜数字小游戏
* */
public class MathTest {
public static void main(String[] args) {
//取一个随机数,0-100之间
//我们要猜的数据
int number = (int) (Math.random()*100 + 1);
while(true){
//采用键盘录入数据
Scanner sc = new Scanner(System.in) ;
//接收并录入数据
//用户输入的数据
System.out.println("请您输入一个数字:");
int guesssNumber = sc.nextInt() ;
if(guesssNumber > number){
System.out.println("你猜的数据:"+guesssNumber+"大了");
}else if(guesssNumber<number){
System.out.println("你猜的数据:"+guesssNumber+"小了");
}else{
System.out.println("恭喜您,猜对了");
break ;
}
}
}
}
二、成员方法
(1)一个标准类的成员:
成员变量:类中方法外
构造方法:无参.有参
成员方法:set()/get()方法
返回值类型:void类型
非void类型
形式参数:有形式参数
空参
学生类:
成员方法:set()/get(),study();
(2)成员方法种类及案例:
a. //有返回值类型:但是没有参数的成员方法
public String getString(){
return "helloworld" ;
}
b. //没有返回值类型,无参
public void show(){
System.out.println("show");
}
c. //无返回值类型,有参
public void method(String name){
System.out.println("给"+name+"打电话");
}
d. //有返回值类型,有参数的情况
public String function(String s1,String s2){
return s1 + s2 ;
}
三、代码块
(1)在java中,用{}括起来的代码叫代码块
(2)代码块分类:
a. 局部代码块:局部位置,用于限定变量的生命周期
b. 构造代码块:在类中的成员位置,在执行构造方法之前,必须先执行构造代码块中的内容
作用:用来将多个构造方法中相同的代码放进来,给对象进行初始化!
c. 静态代码块:在类中的成员位置,static{}
static随着类的加载而加载
静态代码在类中只加载一次!
(3)面试题:构造代码块,静态代码块,构造方法,的优先级?
静态代码块>构造代码块>构造方法
四、继承
(1)继承概述 :
a. 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。
b. 通过extends关键字可以实现类与类的继承:
class子类名extends父类名{}
c. 单独的这个类称为父类,基类或者超类;这多个类可以称为子类或者派生类。
d. 有了继承以后,我们定义一个类的时候,可以在一个已经存在的类的基础上,还可以定义自己的新成员
(2)继承关系的好处:
a. 提高代码的复用性
b. 提高了代码的维护性
c. 类与类产生了关系---->关系:耦合性
类与类产生了关系,这种关系它是多态的前提条件!
(3)java中开发的原则:
低耦合,高内聚!
耦合:类与类关系,
内聚:指的是执行一件事情能力!
(4)java中继承的特点:
a. 在java中,只支持单继承,不支持多继承
别的语言,可能会支持多继承(class Zi extends Fu,Monther){}
b. 虽然不支持多继承,但支持多层继承!
(5)继承的注意事项:
a. 子类继承父类,只能继承父类中非私有的成员(成员变量/成员方法)
子类继承父类:继承父类所有成员
私有的成员private (成员变量/成员方法)
b. 子类继承父类,不能继承父类中构造方法,但是可以通过一个super关键字间接的访问
【什么情况下使用继承:extends ?】
盲目的使用继承关系,会在后期维护代码中比较麻烦!
如果A类是B类的一种,或者B类是A类的一种,那么可以是继承关系!
继承关系体现的是一种"is a"的关系:谁是谁的一种,如果存在这这种关系,那么可以放心的使用继承关系了 !
(6)子类继承父类,成员变量的关系:
a.子类中的成员变量和父类中的成员变量名称不一致的情况,分别输出!
b.子类中的成员变量和父类的成员变量名称一致的情况:
首先在子类中局部变量中找,是否有这样变量的值,有就输出;
找不到,需要在子类的成员位置中找,有就输出,
如果没有,在父类中的成员位置找,如果有就输出,如果没有,就报错(不考虑父亲的父亲…)
(7)super关键字:super的用法和this很像
a.this代表本类对应的引用。
super代表父类存储空间的标识(可以理解为父类引用)
b. 用法(this和super均可如下使用)
*访问成员变量:
this.成员变量:访问的是本类中的成员变量
super.成员变量 :访问的是父类中的成员变量
*访问成员方法:
this.成员方法():访问的是本类中的成员方法
super.成员方法():访问的是父类中的成员方法
*访问构造方法:
this()/this(…): 访问的是本类中的构造方法
super()/super(…): 访问的是父类中的构造方法
(8)继承中构造方法的关系:
构造方法的作用:对数据进行初始化!
a. 子类中所有的构造方法,会默认的访问父类中的无参构造方法!
【为什么呢?】
因为子类会继承父类中的所有的数据(private修饰外部类不能访问),可能还会使用父类的数据。所以,子类初始化之前,一定要先完成父类数据的初始化。
每一个构造方法的第一条语句默认都是:super()
继承关系数据初始化:分层初始化!先让父类进行数据初始化,然后子类进行数据初始化!
b. 如果在父类没有无参构造方法,会出现什么现象?如何解决?
子类的构造方法全部报错!
l 方法一:手动给出父类中的无参构造方法
l 方法二:子类继承父类,可以通过父类中有参构造,间接访问,在子类中的构造方法第一句话:super("传参");
l 方法三:子类中的有参构造,第一句话:this():访问当前类中的无参构造方法----->间接访问父类中的有参构造
this()/super(" "); 要写的话必须写在第一句话:防止父类进行多次初始化!
(9)典型练习题:
package org.westos_继承;
class Fu4 {
static {
System.out.println("静态代码块Fu");
}
{
System.out.println("构造代码块Fu");
}
public Fu4() {
System.out.println("构造方法Fu");
}
}
class Zi4 extends Fu4 {
static {
System.out.println("静态代码块Zi");
}
{
System.out.println("构造代码块Zi");
}
public Zi4() {
System.out.println("构造方法Zi");
}
}
public class ExtendsTest2 {
public static void main(String[] args) {
Zi4 z = new Zi4();
}
}
输出结果:
静态代码块Fu
静态代码块Zi
构造代码块Fu
构造方法Fu
构造代码块Zi
构造方法Zi
五、面向对象练习
(1)需求:长方形的周长和面积,键盘录入
package org.westos_面向对象练习;
import java.util.Scanner;
/*
* 分析:长方形是一个事物---------->长方形类
* 属性:长和宽成员变量:长和宽
*行为:周长和面积成员方法:
* */
class ChangFangXing{
//定义成员变量
private int width ;
private int length ;
//只需要set()方法
public void setLength(int length) {
this.length = length;
}
public void setWidth(int width){
this.width = width ;
}
//成员方法:
//周长
public int getZhouChang(int width ,int length){
return (width+length)*2 ;
}
//面积:
public int getArea(int width,int length){
return (length*width) ;
}
}
//测试类
public class Test {
public static void main(String[] args) {
//创建键盘录入对象
Scanner sc = new Scanner(System.in);
//录入并接收数据
System.out.println("请输入长方形的长:");
int length = sc.nextInt() ;
System.out.println("请输入长方形的宽:");
int width = sc.nextInt() ;
//需要创建长方形类的对象
ChangFangXing cfx = new ChangFangXing() ;
cfx.setLength(length) ;
cfx.setWidth(width) ;
//调用成员方法
int zhouChang = cfx.getZhouChang(width, length) ;
int area = cfx.getArea(width, length) ;
System.out.println("该长方形的周长是:"+zhouChang+",面积是:"+area);
}
}
(2)匿名对象:
package org.westos_匿名对象;
/*
* 匿名对象:
*没有名字的对象
*Student s = new Student(); 对象名是s
*
*匿名的对象的格式:new 类名() ;
*new Student() ;在实际开发中会经常用到对象,一般情况使用一次,多次使用合适!
*
*匿名对象的好处:省空间,比较方便
*
*
* */
class Student2{
public void show(){
System.out.println("好好学习,天天向上");
}
}
class StudentDemo2{
//形式参数是引用类型
public void method(Student2 s){//需要该类对象
s.show() ;
}
}
//测试类:
public class NoNameDemo {
public static void main(String[] args) {
//创建StudentDemo2对象
StudentDemo2 sd2 = new StudentDemo2() ;
Student2 s = new Student2() ; //有名字的对象:对象名是s:
sd2.method(s);
s.show() ;//有名字的对象:s
s.show() ;
//匿名对象
StudentDemo2 sd3 = new StudentDemo2() ;
new Student2().show() ;//匿名对象调用
new Student2().show() ;
System.out.println("----------------");
//匿名对象也可以作为实际参数传递:开发中经常使用
//链式编程:一步走
new StudentDemo2().method(new Student2());
}
}
(3)形式参数的问题:
package 形式参数的问题;
/*
* 形式参数的问题:
*基本数据类型作为形式参数:形式参数的改变,不影响实际参数
*引用类型作为形式参数:会直接影响实际参数
* */
class Demo{
//形式参数是基本数据类型
public int sum(int a,int b){
return a + b ;
}
}
class Student{
public void show(){
System.out.println("好好学习,天天向上");
}
}
class StudentDemo{
//形式参数是引用类型
public void method(Student s){//告诉我们:形式参数是一个类名的情况下,实际参数要的就是该类的具体对象!Student s = new Student();
s.show() ;
}
}
//测试类
public class Test {
public static void main(String[] args) {
//1)需求:调用Demo中 sum()方法
//创建Demo类的对象
Demo d = new Demo() ;
int result = d.sum(10, 20) ;
System.out.println("result:"+result);
System.out.println("-----------------------");
//2)需求:我要调用StudentDemo中method方法
//创建StudentDemo的对象
StudentDemo sd = new StudentDemo() ;
Student s = new Student() ;
sd.method(s) ;
}
}
六、制作文档说明书
(1)制作帮助文档:
l 制作工具类
ArrayTools
l 制作帮助文档(API)
javadoc -d 目录 -author -version ArrayTool.java
(2)如何使用帮助文档:
a. 找到文档,打开文档
b. 点击显示,找到索引,出现输入框
c. 你应该知道你找谁?举例:Scanner
d. 看这个类的结构(需不需要导包)
成员变量----->字段
构造方法----->构造方法
成员方法----->方法
e. 看这个类的说
f. 看构造方法
g. 看成员方法
h. 然后使用