1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > java学习(2)方法/类+成员/局部变量+private/this关键字+构造方法+标准类

java学习(2)方法/类+成员/局部变量+private/this关键字+构造方法+标准类

时间:2019-07-31 06:30:18

相关推荐

java学习(2)方法/类+成员/局部变量+private/this关键字+构造方法+标准类

文章目录

1、方法+类(1)创建类(2)对象的在调用时的内存(3)方法的参数、返回值可以是一个对象2、成员变量和局部变量3、private关键字4、this关键字5、构造方法6、定义一个标准类:Java Bean

……………………………………….4.23更…………………………………………

1、方法+类

勒种包括:成员属性(变量)+成员方法(函数)

成员方法中不写static关键字,直接写public void 函数名(String[] args) {}

(1)创建类

包括三部:导包+创建+使用

当定义的类和调用该类的类在同一包内并不需要导入

import java.util.Scanner;public class Main {public static void main(String[] args) {class Cubic {int length, height, width;Scanner scanner = new Scanner(System.in);public void setDemo() {this.length = scanner.nextInt();this.width = scanner.nextInt();this.height = scanner.nextInt();}public int getV() {return length * width * height;}}Scanner scanner = new Scanner(System.in);Cubic cubic1 = new Cubic();cubic1.setDemo();System.out.print("体积=");System.out.println(cubic1.getV());}}

(2)对象的在调用时的内存

参考:/video/BV1uJ411k7wy?p=104

堆:存储新建的对象的属性和方法的地址。栈:以存储主函数为入口以及当前被调用的方法等。方法区:存储.class文件(类)

main方法先压在栈内存中,然后在方法区产生了“Phone”方法,同时产生的对象在堆内存中被分配了地址,其中的成员变量有了初值如下。

当主函数中对对象的各个属性进行赋值后,依据栈中的地址使得堆中储存的信息跟着改变。

在调用对象的成员方法时首先将当前方法压入栈内,运行结束后再将其弹出,运行到到下一行时下一个方法进入栈内,使用过后弹出。

直接将一个对象赋给另一个对象时,二者指向同一块内存,对其中一个的修改另一个也会跟着进行改变。

(3)方法的参数、返回值可以是一个对象

这里的method调用的时候传入的是one这个对象的地址(由Phone这个类产生的)

2、成员变量和局部变量

局部变量服务于方法,成员变量

局部变量:

在方法的内部只有在方法才能使用,出了方法就不能使用没有默认值位于栈内存随着方法被调用而诞生,随着方法出栈而消失

成员变量:

在方法的外部、直接写在类当中。整个类都可以使用有默认值位于堆内存随着对象被创建而诞生,随着被垃圾回收而消失

3、private关键字

方法、private就是一种封装

方法:将过程隐藏起来,调用的时候传入参数即可,而不需要知道是如何实现的。

private:私有化,需要一对get+set

在Person.java中有下面的一个类:

在主函数的调用无法阻止这种属于int,但是不符合常识的年龄出现,所以出现了private关键字,用private关键字修饰需要保护的成员变量

private修饰的变量只能在当前的类中进行使用,也就是这里的Person类,在其他的位置不能直接访问但是可以进行间接访问

这里的规则是:

命名格式必须是setxx、getxx且要同时出现getxx方法不能有参数,返回值与成员变量相对应;setxx方法不能有返回值,参数类型与成员变量相对应set赋值,get取值

此外还可以在setAge中对获取的变量进行条件控制:

在主函数中的调用部分如下:

————————————————————————————————————————

值得注意的是基本类型中的boolean与其他类型的get方法不一样应该写成isxx:

4、this关键字

用于解决局部变量和成员变量重名分不开的情况。

正常情况下我们会给person类的sayHello方法参数赋一个值使得其能打印输出下面的效果:

但当方法的局部变量和类的成员变量重名的时候,会根据就近原则优先使用局部变量,也就是下面的情况:

输出的结果中类的成员变量赋值消失了,也就是Person的name属性的优先级没有局部变量的name高,根据就近原则导致最后输出的name都是xiaohong。

解决办法就是使用this关键字,标注类的成员变量。this在当前的类中表示当前的成员变量

5、构造方法

专门用来创建对象的方法,当我们通过关键字new来创建对象的时候实际上就是在调用构造方法。格式:

public 类名称(参数类型 参数名){方法体}

当你新建一个对象的时候就会调用构造方法,利用这个特性我们可以只直接给属性赋初值:

注意事项\color{red}注意事项注意事项:

构造方法的名称必须和当前类的名称完全一样,大小写也要一样构造方法不要写返回值,连void都不要写,不能返回一个具体的值没有编写任何构造方法的时候,程序会自动赠送一个构造方法,里面什么都没有;当写了一个构造方法的时候程序不会赠送。构造方法可以进行方法重载,当为有参的构造方法时需要使用getter、setter来对属性进行取出和使用。

构造方法的使用使得我们无需先new再通过getter、setter进行赋初值,直接在new的括号里面就可以进行赋初值。

其次还可以在构造方法里面调用其他的构造方法:

6、定义一个标准类:Java Bean

标准类的四个组成部分:

所有成员变量都要用private关键字来修饰每个成员都有一对getter、setter方法编写一个无参的构造方法编写一个全参的构造方法

(1)getter、etter快捷生成

摁住Alt+F12,选择getter+setter,Shift+向上的箭头全选,回车。即可生成下面的效果。

(2)全参+无参的构造方法的快捷生成

摁住Alt+F12,选择constructor,Shift+向上的箭头全选,回车即可生成全参的构造方法;摁住Alt+F12,选择constructor,选择Select None,回车即可生成无参的构造方法;

getter、setter为private服务,赋值用setter、用值getter。默认的构造方法使得一开始不用给定义的对象传入参数,后面用方法重载的形式即可添加参数。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。