首先对Java的模式进行解释、
注:属性不属于局部变量,属性属于堆空间(属性从根本上是属于类和对象的,也算是需要new出来的结构)
运用例子来说明属性、对象的数据存储
public class Person
{
String name;
bollean isMale;
int age;
};
public class arraytext
{
public static void main(string[] args)
{
Person p1 = new Person();
p1.name = 'Tom';
p1.isMale = true;
Person p3 = p1;
p3.age = 10;
}
};
此时执行的p3=p1不是值传递,在推空间里也不会给p3创建一个与p1相同的空间,只会将p1的地址赋给p3,此时的p1和p3指向的是堆空间的同一块空间
属性和局部变量的概念
属性:在类的{}之中的都为属性
局部变量:声明在方法里面,方法形式参数,代码块内,构造器形式参数,构造器内部变量
相同点:
1、定义二者的格式和数据类型
2、先声明后使用
3、有其对应的作用域和生命周期
不同点:
1、类的属性都有其默认的初始值,局部变量是没有默认初始化值的
面向对象和类
Java类及类的成员:属性、方法、构造器、代码块、内部类
面向对象三大特征:封装性,继承性,多态性、(抽象性)
此处需要说的是,面向对象更多是一种思想
面向过程:强调功能行为,以函数为最小单位,更多的去考虑怎么做
面向对象:强调具备功能的对象,以类/对象为最小单位,考虑谁来做
类:对一类事物的描述,是抽象的概念存在
对象:具体存在的事物(对象的功能取决于类的设计)、(方法:成员方法)、(属性:成员变量)
以下以代码为例子,创建一个类
class Person
{
//属性
String name;
int age = 1;
boolean isMale;
//方法
public void eat()
{
System.out.println("人可以吃饭");
}
public void sleep()
{
System.out.println("人可以睡觉");
}
public void talk(String language)
{
System.out.println("人可以说话,使用的是:"+language);
}
};
//从中可以看书方法的定义方式
//权限修饰符 返回值类型 函数名称(【形参列表】)
创建类的实例—-对象(类的实例化)
public class Persontext
{
public static void main(string[] args)
{
Person p1 = new Person();
p1.name = "Tom";
p1.sleep();
p1.talk(Chinese);
}
};
//对对象调用函数和属性的方法就是“对象名.属性”,“对象名.方法”
//创建一个类的多个对象,则每个对象都独立的拥有一套类的属性(非静态)
方法的重载(overload):在一个同类中,允许存在一个以上的同名方法,只要参数个数或者类型不同即可
当方法同名且参数列表不同的时候,就可以算是重载了。
可变个数的形参
格式:数据类型…变量名
1、可变形参的方法与本类中方法名相同,形参不同的方法之间称为重载
2、可变形参的方法与本类中方法名相同,且形参相同的数组之间不重载,且二者不共存
3、可变形参在方法的形参列表中必须声明在末尾
4、最多只能声明一个可变形参
方法参数的值传递机制
方法的参数遵循值传递机制
引用数据类型一般进行址传递,址传递才能改值,址传递算是某种程度上的指针
比如参数传递就是值传递,而对对象进行的=操作,则是址传递,当引用数据类型做形参的时候,一般也是址传递,只有基本数据类型作为形参传递的时候会进行值传递