面向对象编程(1)

 Java面向对象学习的三条主线:

 1、Java类及类的成员:属性、方法、构造器;代码块、内部类

2、面向对象的三大特征:封装性、继承性、多态性、(抽象性)

3、其他关键字:this、super、static、final、abstract、interface、package、import等

一、类和对象的创建

1、设计类,其实就是设计类的成员

属性 = 成员变量 = field =     域、字段

方法 = 成员方法 = 函数 = method    

创建类的对象 = 类的实例化 = 实例化类

2、类和对象的使用(面向对象思想落地的实现)

        1.1、创建类,设计类的成员

        1.2、创建类的对象

        1.3、通过“对象.属性”或者“对象.方法”调用对象的结构

3、如果创建了一个类的多个对象,则每个对象都独立的拥有一套类的属性(非static)

意味着:如果我们修改一个对象属性a的值,则不影响另外一个对象属性a的值。

4、对象的内存解析

JVM内存结构:编译完源程序以后,生成一个或多个字节码文件。

我们使用JVM中的类的加载器和解释器对生成的字节码文件进行解释运行,意味着,需要将对应的字节码文件加载到内存中去,涉及到内存解析。

 二、属性与局部变量的对比

类中属性的使用

属性(成员变量) = 局部变量

1、相同点:

        1.1定义变量的格式: 数据类型 变量名 = 变量值

        1.2先声明,后使用

        1.3变量都有其对应的作用域

2、不同点:

        2.1在类中声明的位置不同

        属性:直接定义在类中一对{}内

        局部变量:声明在方法内;方法形参;代码块内;构造器形参;构造器内部的变量

        2.2关于权限修饰符的不同

        属性:可以在声明属性时,指明其权限,使用权限修饰符。

        使用的权限修饰符:private;public;缺省、protected --->>封装性

        目前使用缺省就可以了

        局部变量:不可以使用权限修饰符

3、成员变量:

在类体里面定义的变量叫做成员变量;

如果在变量有static关键字修饰,就叫作静态变量或类变量;

如果该变量没有static关键字修饰,就叫作非静态变量或实例变量;

4、局部变量:

方法内定义的变量、形参、代码块中定义的变量都叫做局部变量;


另外,成员变量可以不显式初始化,它们可以由系统设定默认值;局部变量没有默认值,所以必须设定初始赋值。
还有,在内存中的位置也不一样。成员变量在所在类被实例化后,存在堆内存中;局部变量在所在方法调用时,存在栈内存空间中。

5、关于内存解析

        1、内存结构:栈(主要存放局部变量),堆(new出来的结构:对象(成员变量)、数组)

        2、变量:成员变量vs 局部变量(方法内、方法形参、构造器内、构造器形参、代码块内)

三、方法举例与声明的格式

类中方法的声明和使用

方法:描述改类具有的功能,比如Math类:sqrt()\ random() \\

1、举例:public void eat() {}

public void seelp(int hour) {}

public String getName() {}

public String getNation(String nation) {}

2、方法的声明:权限修饰符 返回值类型 方法名(形参列表){

                                        方法体

                                        }

        注意:static、final、abstract 等也用来修饰方法

3、说明:

        3.1关于权限修饰符:默认都先使用public

           Java规定的4种权限修饰符:private(私有) 、public、缺省、 protected。———封装性。

        3.2返回值类型:有返回值 VS 没有返回值

                3.2.1如果方法有返回值,必须在方法声明时指出返回值的类型。同时,方法中需要使用return关键字来返回指定类型的变量或常量。如果方法没有返回值,则在声明时用void来表示。通常,在没有返回值的方法中,就不使用return,如果非要使用;“return;”后不可再用语句,它代表该方法已经结束。

                 3.2.2该不该定义返回值?

                        ①题目要求

                        ②凭经验

        3.3方法名:属于标识符,遵循标识符规范,“见名知意”

        3.4 形参列表:方法可以声明0个、1个或者多个形参

                3.4.1格式:数据类型1 形参1,数据类型2 形参2 ...

                3.4.2 我们定义方法时,我们该不该定义形参?

                        ①题目要求

                        ②具体问题具体分析

        3.5 方法体:方法功能的体现

4、return关键字的使用:

        1、使用范围:使用在方法体中

        2、作用:① 结束方法

                        ②针对于有返回值类型的方法,使用“return 数据”返回所要的数据

        4 、注意点:return关键字后不可以声明执行语句

5、在方法的使用中,可以调用当前类的属性和方法

                特殊的:①方法A中又调用了方法A:递归方法

                               ②方法中,不可以定义方法

四、理解“万事万物皆对象”

 

五、内存解析的说明

1、引用类型的变量,只可能储存两种值 null 或者 地址值(含变量的类型)

六、匿名对象的使用

1、理解:我们创建的对象,没有显示的赋给对象一个变量名,即为匿名对象

2、特征:匿名对象只能使用一次

3、使用Java匿名对象的用法

4、举例   :     

七、方法的重载(overload)    loading...
 

1.定义:在同一个类中,允许存在一个以上的同名方法,只要他们的参数个数或参数类型不一样即可;如何确定调用的方法:方法名 ——>参数列表 
                 “两同一不同”:同一个类,相同方法名
                参数列表不同:参数数量不同       ;参数类型不同

2.举例:
        Arrays类中重载的sort() / binarySearch()

3.判断方法是否重载:
        跟方法的权限修饰符、返回值类型、形参变量名、方法体都没有关系!

4.在通过对象调方法时,如何确定某一个指定的方法
         方法名-->形参列表 

public class OverLoadText {
	public static void main(String[] args) {
    
    //创建对象调用方法
		OverLoadText L1 = new OverLoadText();
		
		L1.Getsum("我爱", 3);
		
	}
	
    //方法的重载
	public void Getsum(int i,int j) {
		System.out.println(i + j+"\n1");
	}
	
	public void Getsum(double i,double j) {
		System.out.println(i+j + "\n2");
	}
	
	public void Getsum(String i,int j) {
		System.out.println(i + j + "\n3");
	}


 

八、jdk 5.0新增的内容

2.具体使用:
        2.1 可变个数形参的格式:数据类型...变量名

        2.2当调用可变个数形参的方法时,传入的参数个数可以是:0个,1个,2个等等

        2.3 可变个数形参的方法与本类中方法名相同,形参不同的方法之间构成重载

        2.4可变个数形参的方法与本类中方法名相同,形参类型也相同的数组之间不构成重载。换句话说,二者不能共存

        2.5可变个数形参在方法的形参中,必须声明在末尾

        2.6可变个数形参在方法的形参中,最多只能声明一个可变形参。  

九、方法的形参传递机制,值传递
 

1.形参:定义方法时,声明在小括号内的参数
  实参:调用方法时,实际传递给形参的数据

2.值传递机制
        如果实参是基本数据类型,则此时实参赋给形参的是实参真实储存的数据值。

基本数据类型:数据值 /n 引用数据类型:地址值(逆向思维,反证法)

public class ValueTransferText1 {
	public static void main(String[] args) {
		
		ValueTransferText1 v1 = new ValueTransferText1();
		
		int j = 10;
		int k = 20;
		  
		v1.swap(j, k); //方法中的数据交换后便从栈中销毁
		
		//此时显示还是main函数中定义的变量值
		System.out.println("j = " + j + "k = " +  k);
		
	}
	
    
	public void swap(int m,int n) {
		int temp = m;
		m = n;
		n = temp;
		//此时交换的是形参的数据
		System.out.println("m = " + m + "n = " +  n);
	}

}

递归方法的使用(了解)

1.递归方法:一个方法体内调用它自身

2.方法递归包含了一种隐式的循环,它会重复执行某段代码,但这种重复执行无须循环控制。

3.递归一定要向已知方向递归,否则这种递归就变成了无穷递归,类似于死循环。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值