一.形式参数的问题:
基本数据类型作为形式参数:形式参数的改变,不影响实际参数
引用类型作为形式参数,会直接影响实际参数
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) StudentDemo sd = new StudentDemo() ;
sd.method(new Student() ;
}
}
//2)//创建StudentDemo的对象
StudentDemo sd = new StudentDemo() ;
Student s = new Student() ;
sd.method(s) ;
}
}
二.制作文档说明书
1.私有化成员方法
public class ArrayTool {
//构造私有化,不让外界创建对象
private ArrayTool(){
}
此时给ArrayTool类中的成员方法添加static修饰,然后用类名直接调用
ArrayTool.printArray(arr) ;
2.使用API文档
打开API文档
显示---->搜索你需要学的类:Scanner/Math
需要看当前的类是哪一个包下的,如果是java.lang不用导包,其他都需要导包
需要看该类的
字段摘要-------->成员变量
构造摘要------->构造方法
方法--------->成员方法
3.调用程序
package 制作文档说明数_版本2;
/**
* @author Apple
* @version V1.0
* 这是一个数组工具类,提供了一些方法
* */
public class ArrayTool {
//构造私有化,不让外界创建对象
private ArrayTool(){
}
/**
* 这是一个查找数组中元素第一次出现的索引的方法
* @param
* arr :需要查找的数组
* @param
* value:需要被查找的元素
* @return
* 如果找到,输出该元素对应的索引;如果找不到,返回-1
*
* */
public static int getIndex(int[] arr,int value){
//定义一个index变量
int index = -1 ;
for(int x = 0 ; x < arr.length; x ++){
if(arr[x] == value){
index = x ;
break ;
}
}
return index ;
}
}
//测试类
public class ArrayDemo {
public static void main(String[] args) {
//定义数组,静态初始化
int[] arr = {25,89,75,30,63} ;
//查找数组中的元素第一次在数组中出现的索引!
int index = ArrayTool.getIndex(arr, 75) ;
System.out.println("index:"+index);
}
}
4.制作文档说明书
需要创建一个数组工具类:ArrayTool
需要给每一个方法添加文档注释
制作文档说明书:
使用命令:javadoc -d 目录名 -author -version ArrayTool.java
三.Math方法应用
1.Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。
public static double random()返回带正号的 double 值该值大于等于 0.0 且小于 1.0,[0.0,1.0),永远接近1.0返回值是一个伪随机选择的数。
2.应用 猜数字小游戏
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("bigger");
}else if(guesssNumber<number){
System.out.println("smaller");
}else{
System.out.println("right");
break ;
}
}
}
}
四.Static关键字
1.static关键字的特点:态的,共享的,被共用的!可以减少代码
随着类的加载而加载,优先于对象存在!
被static修饰的,在内存中只加载一次!但是优先级最高
2.应用
package practice1;
class Person{
//成员变量
String name;
int age;
static String country;
//有参构造
public Person(String name,int age){
this.name=name;
this.age=age;
}
public Person(String name,int age,String country){
this.name=name;
this.age=age;
this.country=country;
}
//成员方法
public void show(){
System.out.println(name+age+country);
}
}
public class Practice3 {
public static void main(String[] args) {
//构造方法
Person p1 = new Person("q",25,"c");
p1.show();
Person p2 =new Person("s",19);
p2.show();
}
}
五.成员方法分类
返回值类型:void类型,非void类型
形式参数:有形式参数,空参
共4种组合
六.代码块
1.定义和分类
在java中,用{}括起来的代码,代码块
代码块分类:
1)局部代码块:局部位置,用于限定变量的生命周期
2)构造代码块:在类中的成员位置,在执行构造方法之前,必须先执行构造代码块中的内容
作用:用来将多个构造方法中相同的代码放进来,给对象进行初始化!
3)静态代码块:在类中的成员位置,static{},静态代码在类中加载一次!
2.面试题:
造代码块,静态代码块,构造方法,的优先级?
:静态代码块>构造代码块>构造方法
七.匿名对象
1.定义及特点
匿名对象:没有名字的对象
Student s = new Student(); 对象名是s
匿名的对象的格式:new 类名() ;
new Student() ;在实际开发中会经常用到对象,一般情况使用一次,多次使用合适!
匿名对象的好处:省空间,比较方便
2.应用举例
package practice1;
class Student1{
public void show(){
System.out.println("hh");
}
}
class Student2{
public void method(Student1 s1){
s1.show();
}
}
//测试类
public class Practice5 {
public static void main(String[] args) {
//一般方法
Student1 s1 = new Student1();
Student2 s2 = new Student2();
s2.method(s1);
//匿名对象,实际参数传递:开发中经常使用。链式编程:一步走
new Student2().method(new Student1());
}
}
八.继承
1.继承的概念
将多个类的共性内容抽取为一个独立的类,独立的类和这些类产生关系,继承关系
extends--->class 子类名 extends 父类名{ }
2.继承的好处
1)提高代码的复用性
2)提高了代码的维护性
3)类与类产生了关系
关系:耦合性
类与类产生了关系,这种关系它是多态的前提条件!
java中开发的原则:低耦合,高内聚!耦合:类与类关系,内聚:指的是执行一件事情能力!
3.继承的特点
Java中继承的特点:
1)在java中,只支持单继承,不支持多继承
别的语言,可能会支持多继承(class Zi extends Fu,Monther){}
2)虽然不支持多继承,但支持多层继承!(class Fa extends Grandfather,class Er extends Fa)
3)子类继承父类,只能继承父类中非私有的成员(成员变量/成员方法)
子类继承父类:继承父类所有是成员
*私有的成员private (成员变量/成员方法)
*子类继承父类,不能继承父类中构造方法,但是可以通过一个super关键字间接的访问.
4)*子类中的成员变量和父类中的成员变量名称不一致的情况,分别输出!
*子类中的成员变量和父类的成员变量名称一致的情况:(就近原则)
首先在子类中局部变量中找,是否有这样变量的值,有就输出;
找不到,需要在子类的成员位置中找,有就输出,如果没有,
在父类中的成员位置找,如果有就输出,如果没有,就报错
5)继承关系体现的是一种"is a"的关系:谁是谁的一种,如果存在这这种关系,那么可以放心的使用继承关系,但如果仅仅是部分交集,则不使用继承。
6)子类继承父类,要继承父类中是所有的数据(private修饰外部类不能访问),
子类继承父类,会默认的访问父类中的无参构造方法!
7)继承的初始化:分层初始化:父类先进行初始化,然后子类进行初始化
8)如果在父类没有无参构造方法,会出现什么现象?如何解决? 构造方法的作用:对数据进行初始化!子类的构造方法全部报错!
a.手动给出父类中的无参构造方法
b.子类继承父类,可以通过父类中有参构造,间接访问,在子类中的构造方法第一句话:super("传参");
c.子类中的有参构造,第一句话:this():访问当前类中的无参构造方法----->间接访问父类中的有参构造this()/super(" "); 要写的话必须写在第一句话:防止父类进行多次初始化!
4.this,super关键字
成员变量:
this.成员变量:访问拿到是本类的成员变量 super.成员变量:访问的是父类中的成员变量
成员方法:
this.成员方法():访问的是本类中的成员方法 super.成员方法():访问的是父类中的成员方法
构造方法: his()/this("");访问的是当前类的构造方法
* super()/super("");访问的是父类中的够主方法
* */
class Father4{
//父类的成员变量
public int num = 10;
}
class Son4 extends Father4{
//子类中的成员变量
public int num = 20 ;
//成员方法
public void show(){
int num = 30 ;
System.out.println(num);
System.out.println(this.num);//当前类的成员变量
System.out.println(super.num); //调用的是父类的成员变量
}
}
//测试类
public class ExtendsDemo5 {
public static void main(String[] args) {
//创建对象
Son4 s= new Son4() ;
s.show() ;
}
}