面向对象
面向过程思想
-
步骤清晰简单,第一步做什么,第二步做什么....
-
面对过程适合处理一些较为简单的问题
面向对象思想
-
物以类聚,分类的思维模式,思考问题首先会解决问题需要哪些分类,然后对这些分类进行单独思考。最后,才对某个分类下的细节进行面向过程的思索。
-
面向对象适合处理复杂的问题,适合处理需要多人协作的问题!
对于描述复杂的事物,为了从宏观上把握、从整体上合理分析,我们需要使用面向对象的思路来分析整个系统。但是,具体到微观操作,仍然需要面向过程的思路去处理。
什么是面向对象
-
面向对象编程(Object-Oriented Programming,00P)
-
面向对象编程的本质就是:以类的方式组织代码,以对象的方式组织(封装)数据。
-
抽象
-
三大特性:
封装、继承、多态
-
从认识论角度考虑是先有对象后有类。对象,是具体的事物。类,是抽象的,是对对象的抽象
-
从代码运行角度考虑是先有类后有对象。类是对象的模板。
===========================================================================
回顾方法与加深
-
方法的定义
◆修饰符
◆返回类型
◆break: 跳出switch,结束循环和return的区别
◆方法名:注意规范,见名知意
◆参数列表: (参数类型, 参数名) ..
◆异常抛出:疑问, 后面讲解
-
方法的调用:递归
◆静态方法
◆非静态方法
◆形参和实参
◆值传递和引用传递
◆this关键字
===========================================================================
静态与非静态方法的代码演示
//Student类中的方法非静态时:
package com.tea.oop;
public class Student {
//非静态方法(因为没有加static)
public void say(){
System.out.println("学生说话了");
}
}
/*************************************************************************/
//在Demo02的主方法中调用如下:
package com.tea.oop;
public class Demo02 {
public static void main(String[] args) {
Student student = new Student();
student.say();
}
}
===========================================================================
//Student类中的方法是静态时:
package com.tea.oop;
public class Student {
//非静态方法(因为没有加static)
public static void say(){
System.out.println("学生说话了");
}
}
/*************************************************************************/
//在Demo02的主方法中调用如下:
package com.tea.oop;
public class Demo02 {
public static void main(String[] args) {
Student.say();
}
}
总结:当方法为非静态方法时,需要new一个具体对象,静态方法则可以直接调用。
===========================================================================
为什么静态方法不可以调用非静态方法(普通方法)?
//static是和类一起加载的
public static void a(){
b();
}
//类实例化之后才存在
public void b(){}
实际上,这段代码放在程序里是无法正常运行的,b();会标红报错,因为b()方法是类实例化之后才能存在和调用,如需调用,需要满足两个方法的类型相同(同为静态或同为非静态)
===========================================================================
形参与实参的代码演示
package com.tea.oop;
public class Demo03 {
public static void main(String[] args) {
// 下面两行又可以写成:new Demo03().add(1,2);
Demo03 demo03 = new Demo03();
demo03.add(1,2);
System.out.println(demo03.add(1,2));
}
public int add(int a,int b){
return a+b;
}
}
如果add()方法改为静态方法,则可直接调用类中的方法,而不用new一个对象,代码如下:
package com.tea.oop;
public class Demo03 {
public static void main(String[] args) {
int add = Demo03.add(1,2);
System.out.println(add);
}
public static int add(int a,int b){
return a+b;
}
}
===========================================================================
值传递和引用传递的代码演示
值传递
package com.tea.oop;
//值传递
public class Demo04 {
public static void main(String[] args) {
int a = 1;
System.out.println(a);
Demo04.change(a);
System.out.println(a); //1
}
//返回值为空
public static void change(int a){
a=10;
}
}
引用传递
package com.tea.oop;
//引用传递:对象,本质还是值传递
//之所以你看不懂这段代码,只是因为你对内存和对象没有理解到位
public class Demo05 {
public static void main(String[] args) {
Person person = new Person();
System.out.println(person.name); //null
Demo05.change(person);
System.out.println(person.name); //茶茶
}
public static void change(Person person){
//person是一个对象:指向的--->Person person = new Person();这是一个具体的人,可以改变属性
person.name = "茶茶";
}
}
//定义一个Person类,有一个属性:name
class Person{
String name; //默认为null
}
我刚认识的时候也是模糊的,但是为了用它,我大致总结了一下步骤,个人见解:
-
定义一个Person抽象类,它包含name属性,name默认值为null
-
在主方法中new 一个Person的具体对象person,而person.name的值在没有被传入接下来的change方法之前,它的值从抽象类中传进来,默认也为null
-
既然person是一个具体的对象,此时我们就可以将它传入方法中,此时person.name最终指向”茶茶“,它本质还是在修改Person类中的name
tip:要注意区分值传递和引用传递!!!
===========================================================================
标签:静态方法,person,void,Person,面向对象,static,public From: https://www.cnblogs.com/bobocha/p/16746295.html