Java06面向对象01
概念
回顾方法
方法的定义与调用
package com.mingmao.javaobjectoriented;
public class MethodReview {
public static void main(String[] args) {
//方法的调用--main方法调用其他方法
//静态方法 static,直接调用
//同类可省略类名
//同类 方法名
say();
//不同类 类名.方法名
TestClass.say();
//非静态方法,先实例化这个类再调用
//同类不同类一样调用
//同类
MethodReview methodReview=new MethodReview();
System.out.println(methodReview.sayHello());
//不同类
TestClass testClass=new TestClass();
System.out.println(testClass.sayHello());
}
/*
方法的定义:
修饰符 返回值类型 方法名(参数列表){
方法体
return 返回值;
}
*/
public String sayHello(){
return "Hello world!";
}
//静态方法
public static void say(){
System.out.println("说话");
}
//方法之间的相互调用
//非静态方法
public void a(){
//同类中 直接调用
sayHello(); //非静态
say(); //静态
//不同类中
//静态
TestClass.say();
//非静态
TestClass testClass=new TestClass();
testClass.sayHello();
}
//静态方法 只能调用静态方法,因为静态方法和类一起加载
public static void b(){
//同类
say();//静态
//不同类
TestClass.say();//静态
}
}
package com.mingmao.javaobjectoriented;
public class TestClass {
//静态方法
public static void say(){
System.out.println("说话");
}
//非静态方法
public String sayHello(){
return "Hello World!";
}
}
形参和实参
传值与传址
基本数据类型是传值,引用数据类型看起来是传址,本质也是传值。
package com.mingmao.javaobjectoriented;
import java.util.Arrays;
public class ValueAndAddressTransmission {
public static void main(String[] args) {
//传值,只是把值传给方法,没传地址,copy值,基本数据类型
int a=2;
System.out.println(a);//2
change(a);
System.out.println(a);//2
//传址,引用数据类型,本质还是值传递
int[] arr={1,2,3};
System.out.println(Arrays.toString(arr));//1,2,3
changearray(arr);
System.out.println(Arrays.toString(arr));//4,4,4
//传址例2
Person person=new Person();
System.out.println(person.name);//null
changeClass(person);
System.out.println(person.name);//mingmao
}
//传值
public static void change(int a){
a=10;
}
//传址
public static void changearray(int[] arr){
Arrays.fill(arr,4);
}
//传址例2
public static void changeClass(Person person){
person.name="mingmao";
}
}
class Person{
String name;
}
类与对象的创建
规范:一个项目只有一个main方法
一个类中只有属性和方法
package com.mingmao.javaobjectoriented.programming;
public class Student {
//属性
String name;
int age;
//方法
public void study(){
System.out.println(this.name+"在学习");
}
}
package com.mingmao.javaobjectoriented.programming;
public class Application {
public static void main(String[] args) {
//学生类
//实例化类
Student student=new Student();
Student xiaoming=new Student();
Student fangfang=new Student();
//默认初始化值
System.out.println(student.name+" "+student.age);
student.study();
//赋值
xiaoming.name="小明";
xiaoming.age=18;
//调用属性和方法
System.out.println(xiaoming.name+" "+xiaoming.age);
xiaoming.study();
}
}
构造方法(构造器)
package com.mingmao.javaobjectoriented.programming;
public class PersonConstructionMethod {
//属性
String name;
//构造方法,new操作必须要有构造方法
//无参构造,不要省略
//空构造方法
public PersonConstructionMethod(){
}
//构造方法没有返回值,可以用于初始化属性值
/*public PersonConstructionMethod(){
this.name="mingmao";
}
*/
//有参构造
//一旦定义了有参构造,无参构造必须显式定义
public PersonConstructionMethod(String name){
this.name=name;
}
}
package com.mingmao.javaobjectoriented.programming;
public class Application {
public static void main(String[] args) {
//创建无参对象
PersonConstructionMethod person=new PersonConstructionMethod();
System.out.println(person.name);
//创建有参对象
PersonConstructionMethod person1=new PersonConstructionMethod("mingmao");
System.out.println(person1.name);
}
}
生成构造方法的快捷方式:右键-Generate- Constructor
创建对象内存分析
package com.mingmao.javaobjectoriented.programming;
public class PetMemoryAnalysis {
public String name;
public int age;
//无参构造
public void shout(){
System.out.println("叫了一声");
}
}
package com.mingmao.javaobjectoriented.programming;
public class Application {
public static void main(String[] args) {
PetMemoryAnalysis dog=new PetMemoryAnalysis();
dog.name="旺财";
dog.age=3;
dog.shout();
System.out.println(dog.name+" "+dog.age);
PetMemoryAnalysis cat=new PetMemoryAnalysis();
}
}