Java学习-面向对象
类=属性+方法
面向对象:以类的方式组织代码,以对象的方式封装数据。
方法的定义和调用
修饰符、返回类型、break和return、方法名、参数列表、异常抛出…
静态方法和非静态方法、形参和实参、值传递和引用传递、tiis…
静态方法:又称类方法,是加staic关键字修饰的方法,在类定义的时候就被分配和装载入内存中。静态方法属于类所有,类实例化前即可使用,同时不能使用super和this关键字。静态方法只能调用静态方法以及访问静态数据域,不能调用实例方法或者访问实例数据域。
非静态方法:又称为实例方法、成员方法,是不加staic关键字修饰的方法,在类定义时不分配内存,只有在类被实例化为对象后,对象调用该方法时才被分配内存,因此非静态方法属于对象,不属于类。非静态方法既能调用静态方法以及访问静态数据域,也能调用实例方法或者访问实例数据域。
形参:形参变量是函数里的变量,只有在被调用时才分配内存,调用结束后立即释放,所以形参只在函数内部有效。
实参:实参可以是常量、变量、表达式、函数等,在调用时必须有确定的值,以便拷贝给形参。
值传递:
public class Demo{ public static void change(int a){a=10;} public static void main(String[] args){ int a=1; System.out.println(a);//1 Demo.change(a); System.out.println(a);//1 } }
引用传递:
class Person{String name;} public class Demo{ public static void change(Person person){person.name="ABC";} public static void main(String[] args){ Person person = new Person(); System.out.println(person.name);//null Demo.change(person); System.out.println(person.name);//ABC } }
类与对象的创建
使用new关键字创建,除了分配内存空间,还会对创建的对象进行默认初始化,以及调用类的构造器。
构造器
一个类即使什么都不写,也会存在一个构造方法,必须和类名相同,必须没有返回类型,也不能写void。
1.使用new创建对象本质是调用构造器
2.初始化
一旦定义了有参构造,无参就必须显式定义。
public class Person{ String name; public Person(){} public Person(String name){this.name=name;}//重载 } public static void main(String[] args){ Person person = new Person("Nashor"); System.out.println(person.name);//Nahsor }
创建对象内存分析
public class Application{ //方法区:Application public class Pet{ public String name; public int age; public void shout(){System.out.println("叫");} } public static void main(String[] args){ //方法区:main(),常量池:"旺财",栈:main() Pet dog = new Pet(); //方法区:Pet、name=null、age=0、shout() //栈:dog引用→堆:new pet() //常量池:"旺财"→堆:name //堆:shout()→方法区:shout() dog.name="旺财"; dog.age=3; dog.shout(); } }
小结
1.对象通过引用操作:栈→堆
2.属性默认:数字:0、0.0,char:u0000,boolean:false,引用:null
3.对象创建:new,构造器
4.类:静态的属性,动态的方法