Java高级总结1

来源:互联网 发布:老婆胸大的体验知乎 编辑:程序博客网 时间:2024/06/14 02:27

第一讲 类与对象

 

1.万物皆对象

2.二者的关系:

 

3.其定义规则

     属性  +  方法

案例:

public class People{

//属性

public String name;//姓名

public char sex;//性别

public int age;//年龄

//方法

public void tell(){

System.out.println("Hello World!");

}

public void say(){

System.out.println("我叫:"+name+",我的性别:"+sex+",我的年龄:"+age);

}

}

4.对象的使用(对象可以通过. 来访问自己的属性和方法)

eg: p.name = “小明”;//访问属性

   p.sex = ‘男’;//访问属性

   p.age = 15;//访问属性

   

   p.tell();//访问方法

   p.say();//访问方法

 

体积案例:

public class Rec{

//属性

public int length;

public int width;

public int height;

//方法

public void getV(){

System.out.println("体积="+(length*width*height));

}

public static void main(String[] args){

Rec r1 = new Rec();

r1.length=10;

r1.width=5;

r1.height=15;

r1.getV();

 

Rec r2 = new Rec();

r2.length=15;

r2.width=10;

r2.height=20;

r2.getV();

}

}

 

5.内存分析

我找了一个经典案例,这个比较综合

 

 

第二讲  方法

 

方法:类似于数学中的函数,就是一段完成一定功能的代码的集合。

作用:简化代码,提高代码的可读性,有利于代码间的共享。

下面是我总结的一些方法,可以做下参考:

 

 

总结:定义方法时,需不需要修饰符,需不需要返回值,需不需要参数列表,都是根据情况而定,我们自己可以控制,怎样简单就怎样进行。

一、 方法调用

调用方法时,必须使用类或者对象作为调用者,及必使用 “类.方法” 或者“对象.方法”。

静态方法和普通方法:

▲如果方法前面加了修饰符“static”,代表该方法是静态方法,静态方法属于类。调用静态方法时可以使用类来调用,也可以使用对象来调用,如果前面没有指明调用则默认为当前类调用。

案例:

 

 

▲如果方法前面没有加修饰符“static”,代表该方法普通方法,普通方法属于对象。在静态方法中调用普通方法只能使用对象调用;在普通方法中调用普通方法可以使用对象调用,可以使用this调用,也可以直接调用(默认缺省this,this就是指的当前对象)。

 

返回值:

▲如果方法有返回值,调用方法时可以定义相应类型的变量接收,或者直接输出。

▲如果方法没有返回值,直接调用即可。

 

 

 

参数:

▲如果方法有参数,调用方法时传入相应类型的参数即可

▲如果方法没有参数,直接调用即可。

 

总结:

调用方法时三看:

第一看有没有static

:是静态方法  .方法  对象.方法  方法(默认缺省类名)

 没有:普通方法

1.静态方法中调    对象.方法

2.普通方法中调    对象.方法  this.方法   方法(默认缺省this)

 

第二看有没有返回值。

没有:正常调用

:定义相应类型变量接收

直接输出

 

第三看有没有参数。

没有:正常调用

     有:传入相应类型变量

二、 方法的参数传递

形参(形式参数):定义方法时,方法的参数列表中的参数。

实参(实际参数):调用方法时,传递给形参的值就是实参。

 

î 
Java中参数的传递只有一种方式(值传递):

Ø 传递实际值

Ø 传递地址值

 

案例一:传递实际值

 

值传递(实际值):实际上就是把实参的副本(复制品)传给形参,无论形参怎么变化,实参自身不受影响。

 

案例二:传递地址值

 

值传递(地址值):实际上就是把实参的副本(复制品)传给形参,但是此处的值是地址值,所以形参的变化会影响实参一起变化。

 

三、 方法重载

Java中同一类中允许定义多个同名的方法,只要这些方法参数列表不同即可(类型,个数),这就叫方法重载。

 

 

 

!!!注意:下面不是重载

 

 

四、 方法的递归调用(了解 拓展

思考:

有五个小朋友,老师问第一个小朋友多少岁,他说比第二个大2岁,

   老师问第二个小朋友多少岁,他说比第三个大2岁,

   老师问第三个小朋友多少岁,他说比第四个大2岁,

   老师问第四个小朋友多少岁,他说比第五个大2岁,

   老师问第五个小朋友多少岁,他说10岁。

 

public class Demo{

public static int getAge(int x){

int age;

if(x==1){

age = 10;

}else{

age = getAge(x-1)+2;

}

return age;

}

public static void main(String[] args){

int age = getAge(3);

System.out.println(age);

}

}

 

第三讲构造方法

作用:

我用案例做下比较,这样比较直观

没有自定义构造方法

 

有自定义构造方法

 

 

构造方法的特点   一定要牢记

1.构造方法名必须和类名一致

public People(String name,char sex,int age){//构造方法名必须和类名一致

this.name = name;

this.sex = sex;

this.age = age;

}

2.构造方法没有返回值,也不能写void

 

3.构造方法不能被程序员显示的直接调用

public static void main(String[] args) {

People p = new People("李天鹏",'',17);

p.tell();

p.People("李天鹏",'',17);//报错

}

4.Java语言中,每个类至少有一个构造方法。(如果没有构造方法,则不能创建对象)

 

5.如果类的定义者没有显示的定义任何构造方法,则Java编译器会自动为该类提供一个默认为空的构造方法。(没有参数列表,没有方法体)

Eg:

public People(){

}

6.如果类的定义者显示定义了一个或多个构造方法,则系统不再提供默认为空的构造方法。

public class People {

public String name;

public char sex;

public int age;

public People(String name,char sex,int age){

this.name = name;

this.sex = sex;

this.age = age;

}

public void tell(){

System.out.println("我叫:"+name+",性别:"+sex+",年龄:"+age);

}

public static void main(String[] args) {

People p = new People("李天鹏",'',17);

p.tell();

People p = new People();//报错,程序员自己定义了一个构造方法,则系统不再提供为空的。

 

构造方法的重载

方法的重载就是在同一个类中允许同时存在一个以上的同名方法,只要它们的参数个数或者类型不同即可。在这种情况下,该方法就叫被重载了,这个过程称为方法的重载(overloading

Java编译器能根据调用方法时所传递的参数个数和类型选择相应的方法。

 

构造方法的调用

在一个构造方法中调用另外一个构造方法,不是使用构造方法名,而是使用this(参数)的形式。

注意:

在一个构造方法中调用另一个构造方法,this(参数)必须位于第一行。

不能再够方法以为的任何地方调用构造方法

在一个构造方法中最多只能使用一个this调用一个构造方法。

 

第四讲 成员变量与局部变量

Java语言中,根据变量的位置的不同,可以将变量分为两大类:

成员变量局部变量

 

Java中的内存空间:栈、堆、全局数据区、全局代码区

:基本数据类型、引用类型的地址

:引用类型的真实值(数组的值、对象的属性)

全局数据区:类属性(加了static的属性)

 

成员变量

★在类的范围里面定义的变量就是成员变量(成员变量就是属性,也可以叫成员属性)

 

成员变量分为两类:

●类属性:   ●实例属性:

在定义一个属性时如果使用static修饰,则就是类属性;如果没有使用static修饰,则就是实例属性(实例就是对象)

访问类属性可以使用 .属性 也可以使用对象.属性

访问实例属性可以使用 实例.属性

 

类属性和实例属性的区别:类属性保存在全局数据区,实例属性保存在堆中。

局部变量

★在方法的范围里面定义的变量就是局部变量

 

局部变量分为三类:

●形参:整个方法中有效

●方法局部变量:在方法中,从定义开始到方法结束

●代码块局部变量:在代码块中,从定义开始到代码块结束

案例:

 

总结:局部变量与成员变量的区别

1. 定义变量的位置不同 局部变量在方法中  成员变量在类中

2. 保存变量的位置不同 局部变量在栈中  成员变量在堆和全局数据区中

局部变量(除了形参)必须要初始化才能使用  成员变量可以不用初始化系统会提供默认值

 

最后我画了一个图来表示他们的关系