JAVA OOP
面向对象开发
不断地创建对象、使用对象、指挥对象做事情
面向对象设计
管理和维护对象之间的关系
面向对象特征
封装、多态、继承
1、类与对象
描述一个事物
属性:该事物的描述信息 --------------------->成员变量
行为:该事物能够做什么 ---------------------->成员方法
类: 是一组相关的属性和行为的集合,抽象的概念
对象:该类事物的具体表现形式
举例:
学生:类
班长:对象
如何用类中方法?(创建对象使用)
格式:类名 对象名 = new 对象名();
如何使用成员变量?
对象名.变量名
如何使用成员方法?
对象名.方法名(…)
public class StudentDemo {
public static void main(String[] args) {
student s = new student();
s.name = "十七";
s.age = 18;
s.address = "永川";
System.out.println(s.name+"....."+s.address+"....."+s.age);
s.study();
s.eat();
}
}
class student{
//姓名
String name;
//年龄
int age;
//地址
String address;
//学习
public void study() {
System.out.println("徐生爱学习");
}
//吃饭
public void eat() {
System.out.println("学累了要吃饭");
}
//睡觉
public void sleep() {
System.out.println("吃完饭,要睡觉");
}
}
对象内存图
成员变量与局部变量
1、在类中位置不同
成员变量:在类中方法外
局部变量:在方法定义中或者方法声明上
2、在内存中位置不同
成员变量:在堆内存
局部变量:在栈内存
3、生命周期不同
成员变量:随着对象的创建而存在,随着对象的消逝而消失
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
4、初始化值不同
成员变量:有默认初始化值(堆中)
局部变量:没有默认初始值,必须定义,赋值。才能使用。
注意事项:局部变量名称可以喝成员变量名称一样,在方法使用中采用就近原则。
2、形式参数问题
001方法的参数是一个类类型
基本类型:形式参数的改变不影响实际参数
引用类型:形式参数的改变直接影响实际参数
class ArgsTest {
public static void main(String[] args) {
//形式参数是基本类型的调用
Demo d = new Demo();
int result = d.sum(10, 20);
System.out.println("result:"+result);
System.out.println("................");
//需求:调用 StudentDemo中的method方法
StudentDemo sd = new StudentDemo();
Student s = new Student() ;
sd.method(s);//把s的地址给到了这里
}
}
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) {//调用的时候,把main 方法中的s的地址传到了这里
s.show();
}
}
002匿名对象
没有名字的对象
应用场景:调用方法,仅仅只调用一次的时候
注意:调用多次不适合。
好处:
1、匿名对象调用完毕就是垃圾,可以被垃圾回收器回收。提高内存使用效率。
2、匿名对象可以作为参数传递
class Student{
public void show() {
System.out.println("我爱学习");
}
}
class StudentDemo{
public void method(Student s) {
s.show();
}
}
public class NoNameDemo {
public static void main(String[] args) {
//带名字的调用
Student s = new Student();
s.show();
//匿名对象调用方法
new Student().show();
new Student().show();//重新创建了一个新的对象
System.out.println("-----------------")
//匿名对象作为实际参数传递
StudentDemo sd = new StudentDemo();
// Student ss = new Student();
// sd.method(ss);//这里的ss是一个实参
//匿名对象
sd.method(new Student());
}
}