一、函数(方法)
@方法是一段能独立完成功能模块的代码块。可以被多次调用,提高代码的复用性
@语法:
@void代表着没有返回值
@例:
1.方法是:public static void test1()
2.方法体是:System.out.ptintln(“test1”)
3.即调用一次函数(方法),则输出一次test1
4.如图调用俩次则,输出俩次test1 ,n次调用输出n次
5.例:计算俩个整数之和
@函数(方法)为sum,n,m是形参,sum函数可以使用的俩个变量
@有返回值无法仅通过sout输出
@要用return返回输出值
@方法体是输出n和m之和
@调用函数会出现已构造的函数(方法)提示
@代码至此,只有计算结果,但结果并不会输出(为空)
@要引用sout输出
结果:
@要定义数据类型,只定义变量名会报错
二、面向对象(object oriented programming)
@java是面向对象的语言
@面向对象:属性+行为(函数、方法)
@例:探究把大象装进冰箱
1.面向过程语言会这样想:打开冰箱-大象放入冰箱-关上冰箱(具体过程)
2.java面向对象会这样想:先把对象封装出来
①大象:
属性:体重,身高,性别等
方法:吃饭、走路
②冰箱:
属性:尺寸、品牌、颜色等
方法:开门、关门、制冷等
③执行过程:创建俩个对象,冰箱和大象,然后让冰箱自己开门,让大象走进冰箱,让冰箱关门
3.优点:复用性比较高,即例如调用大象的走路方法,可以控制大象的最终目的地等
三、类
@某些具有相同属性和行为的事物抽象成一类
比如:狗是一个类,那么其他品种的狗均是这个类的对象
类似模板和样本的关系,通过一个模板可以创建多个样例
@类是抽象的概念,对象才是真正的实例
@即java文件(创建对象的模板)
1.定义类:
@类名称:首字母要大写,驼峰式
@class 类名称{
属性
方法
}
@定义Animal类
2.创建对象:
@类名 变量名 = new 类名();
@通过对象可以访问其属性和方法
①定义类之后,有了模板,就可以开始创建对象
--创建对象animal1
② 对象创建完后,需要赋值,调用原本类的方法
--5岁的狗
③赋值完后要进行输出,即获取对象的属性值
④那一次性输出anmal1,为什么得不到所有的属性值??
3.类的属性:
@八个基本数据类型,引用数据类型:类、接口、数组
4.类的方法
@自定义的类与对象也可以进行函数实现
@即方法名称(类 对象)
@例:判断动物是否成年
#调用
方法一:
#方法体
(调用在main内,方法体在main外)
方法二:
(结果)
5.创建对象的内存结构
①栈:用于存储基本数据类型的值或局部变量,先进后出,存储的容量小,存储的速度快
②堆:用于存储引用的数据类型,存储的容量大,速度慢一些
③数据共享区(方法区):存储一些共享的数据(比如方法)
--对象存储在堆中,引用存储在栈中,堆中的每一个数据都是隔离的;
--每一个class加载到数据共享区,jvm会解析这个类的内容
四、方法的重载
①定义:在同一个类中,方法的名字一样,参数列表不一样(包括参数类型)的俩个方法是重载关系,跟返回值没有关系
@相同方法名的参数不能一样
@相同方法的不同参数表现(返回值都是判断age是否大于2)
@方法名相同的不同参数在调用时会出现提示
@实现:
@jdk中已存多种方法的重载
@多层重载
public static void main(String[] args) {
test();
test(1);
test(1,2);
test("111");
}
public static void test(){
System.out.println("111");
}
public static void test(int i){
System.out.println("222");
}
public static void test(int i ,int j){
System.out.println("333");
}
public static void test(String str){
System.out.println("444");
}
结果:
②目的:为了节约方法的命名功能和提高代码的可读性
五、this关键字
①this只能在对象方法内使用
@在Animal类的方法内定义this
@结果也会输出动物的名字:
@这里注意是用public void 定义eat方法,而不是public static void
@这里二者等同,只是this可以不写出
②对于类的对象来说,属性是每一个对象都有一份的,是数据隔离的,但是方法是多个数据共享的
不同对象调用这个方法的时候,是用this来区分不同对象的数据
@例如定义猫和狗俩个对象,俩者共用eat()方法,但输出的结果是不一样的
③this是可隐藏的
六、构造器
①用于创建对象的方法,固定格式,给对象赋初始值
②使用new的时候,相当于调用了类里面的构造器方法
③默认构造器(无参构造器):
权限修饰符 类名(){
}
@例如:
--这里会输出俩次因为前面new了俩次
--假如再new一个,则输出三次
④构造器本身是一个方法
1.没有返回值,也没有void
2.构造器的方法名必须和类名一致
3.在方法中要定义要初始的参数列表
⑤有参构造器:
权限修饰符 类名(数据类型 参数名){
}
@例如:
--定义一个有参构造器String name
--调用该构造器:“”
@有参构造器也可以有多个参数
⑥构造器的快捷使用
1.右键--Generate--Constructor
2.出现可用的参数
3.ctrl+a全选/ctrl+任意组合
4.select none直接构造无参构造器
⑦构造器之间可以互相调用
1.如果一个类存在有参构造器,那么默认的构造器(无参构造器)就会被覆盖,如果需要默认的构造器,就要显示地定义
@即有参构造器存在的情况下,无参构造器就会被动隐藏起来,不能调用
@要调用则需人为主动写出来
2.同一个类中的构造器可以互相调用,需要通过this()来调用,this()必须放在第一行
@例如:无参构造器Animal()调用有参构造器Animal(String name)
@给有参构造器设置输出值
--依据结果可以看出,在创建animal对象中,new了一个无参构造器Animal()
所以程序先走到Animal(),通过this()调用了有参构造器Animal(String name),输出“有参构造器”,再返回Animal(),输出“无参构造器”
3.在构造器中调用其他构造器,不会创建对象,只会初始化