Java面向对象(一)
一、概述
面向对象就是把构成问题的事物按照一定规则划分为多个独立的对象,然后调用对象的方法来解决
三大特点:封装、继承、多态
适合处理复杂问题,适合多人协作解决问题
面向对象相当于面对解决问题的框架
面向过程相当于面对解决问题的具体操作
本质:以类的方法组织代码,以对象的组织(封装)数据
类是对象的抽象
二、方法
注意:如果输出的是对象,显示的是对象的地址,如果要直接输出值的话,要确定输出的是对象的哪个属性
System.out.println("add3的地址:"+add3);
System.out.println(add3.add1(4,5));
例如这两个不同的输出方式,一个显示的是add3的地址,一个显示的是add3调用add1()方法的运算结果。
- 静态方法static
静态方法可以直接在类中调用,不用new关键字创建一个对象
public class Demo02 {
public static void main(String[] args) {
//静态调用
int add1=Demo02.add(1,2);
System.out.println(add1);
int add2= Demo02.add(3,4);
System.out.println(add2);
//非静态调用(new关键字创建对象)
Demo02 add3 = new Demo02();
add3.add1(4,5);
System.out.println("add3的地址:"+add3);
System.out.println(add3.add1(4,5));
}
public static int add(int a,int b){
return a+b;
}
public int add1(int a,int b)
{
return a*b;
}
}
调用别的类里面的东西可以通过类名直接调用
- 非静态方法
无法通过类名直接调用,实例化这个类
实例化这个类new
//对象类型 对象名 = 对象值
Student student=new Student();
student.say();
- 引用传递
public class Demo04 {
public static void main(String[] args) {
Person person = new Person();
System.out.println(person.name);//对象的名字
System.out.println("对象的地址:");
System.out.println(person);//出来的是对象person的地址
Demo04.change(person);
System.out.println(person.name);
}
public static void change(Person person)
{
person.name="rogue";
}
}
class Person{
String name;
}
- 值传递
public class Demo03 {
public static void main(String[] args) {
int a=2;
System.out.println(a);//直接输出的是2
Demo03.change(3);
System.out.println(a);//值传递,因为原本的a还是等于2,进入change方法里面返回值是空,传进去的还是2
}
public static void change(int a){
a=10;
//返回值为空
}
}
三、类与对象的创建
一个项目里面只有一个main方法
一个Student类 实现的方法
用new创建对象的时候,除了分配内存空间之外,还给创建好的对象默认的初始化以及对类中构造器的调用
一个Person类 (Java的源文件) Java的class文件
在实现类的过程中,就算在调用的类中没有方法,在实现类中new了一个对象,也会存在一个方法
构造方法:
特点:
1、必须没有返回值类型
2、构造方法必须和类名相同
作用:
1、使用new关键字,本质是在调用构造器
2、构造器一般用来初始化值
-
定义了有参构造,就接着直接定义一个无参构造,方法体里面可以是空内容
-
定义有参构造之后,如果要想使用无参构造,要在定义一个无参的构造函数
-
快速生成构造方法:定义一个变量之后:Alt+insert 可以快速构造有参和无参构造,或者直接右键选择Generation
注意点:
四、创建对象内存分配
栈:
- main()方法在栈的底部
- new 的对象(引用变量名)依次进栈
堆:
- new出来的对象的属性
方法区:
- 实现类存放的是main()方法和常量池
- 其他类里面的方法和属性
(该内存图实例为以上Pet类和Application类的具体例子)
五、小结
- 类与对象
类是一个模板(抽象),对象是一个具体实例
-
方法:
方法的定义和调用 -
对象的引用:
引用类型:8大基本引用(String,int,float,double,boolean,long, byte, char)
对象是通过引用来操作的(栈---->堆) -
对象的属性:
修饰符 属性类型 属性名=属性值成员变量,默认初始化
数字:0 ,0.0
char: u0000
boolean:false
引用:NULL -
对象的创建和使用
new 关键字创造对象,构造器 Person rogue=new Person();
对象的属性: rogue.name
对象的方法:rogue.sleep()6.类:
静态的属性 属性动态的行为 方法
继承、封装、多态