面向对象
oop
面向对象的本质就是,以类的方式组织代码,以对象的组织(封装)数据。
抽象
三大特征:封装,继承,多态
值传递与引用传递
package oop;
//值传递
public class Demo1 {
public static void main(String[] args) {
int add = add(1, 2);
System.out.println(add);
int a = 1;
System.out.println(a);
change(a);
System.out.println(a);//值传递,传过去的参数是形参,
// 作用域为该方法,而main中的a作用域为main方法中,所以局部改变不影响,地址上来说就是main方法中有int a
//而调用change()方法传入的a只是将值传递过去,并没有传入地址,而再change()方法里有int a进行接收,故
//再change()方法里的参数再如何改变不影响main中的参数
}
public static int add(int a,int b){
b = a+b;
return a+b;
}
public static void change(int a){
a = 10;
int b = 10;
System.out.println(b + "========");
add(a,b);
System.out.println(b + "bubian");
System.out.println(a + "hhhhhh");
}
}
package oop;
public class Student {
String name;
int age;
public void say(){
System.out.println(name + "说话了! 年龄:\t" + age);
}
}
package oop;
//引用传递
public class Demo2 {
public static void main(String[] args) {
Demo2 demo2 = new Demo2();
Student student = new Student();
demo2.change(student.name,student.age);//值传递,student中的name和age并没有改变
System.out.println(student.name + student.age);
demo2.change1(student);//引用传递,传入的是student对象,对其属性更改,原实例对象也会更改
System.out.println(student.name + student.age);//就像c中的地址传参类似,改变的是student地址中的值,传过去的是地址
}
public void change(String name,int age){
System.out.println(name + "====" + age);
name = "zhang";
age = 10;
}
public void change1(Student student){
System.out.println(student.name + "====" + student.age);
student.age = 10;
student.name = "sang";
}
}
//另,若传入数组也会改变,因为数组传过去的也是地址,更改的是地址内的值
创建与初始化对象
构造器
和类名相同
没有返回值
new本质是再调用构造方法
初始化对象的值
定义有参构造之后显示定义一个无参构造
Alt + Insert idea快捷键
this.【类属性】 = 传过来的参数
package oop;
public class Demo3 {
public static void main(String[] args) {
Pet cat = new Pet();
cat.name = "猫";
cat.shout();
Pet dog = new Pet();
dog.name = "狗";
dog.shout();
}
}
类是一个模板,对象是一个具体的实例
属性:默认初始化,数字:0 0 0.0 char u0000 boolean false 引用 null
标签:name,System,面向对象,student,println,public,out From: https://www.cnblogs.com/1234sdg/p/17019956.html