一文搞清楚Java中的方法、常量、变量、参数、代码块

一文搞清楚Java中的方法、常量、变量、参数、代码块

写在开头在上一篇文章:一文搞清楚Java中的包、类、接口中我们讲了Java中的包、类和接口,今天继续将剩下的方法、常量、变量以及参数梳理完。

Java中的变量与常量在JVM的运转中,承载的是数据,而数据的一种变现形式就是“量”,量分为:常量与变量,我们在数学和物理学中已经接触过变量的概念了,在Java中的变量就是在程序运行过程中可以改变其值的量。

常量与变量相对应的是常量,所谓常量,即在作用域内保持不变的值,一般用final关键字进行修饰,通常分为全局常量、类内常量、局部常量。【程序用例】

代码语言:javascript复制public class Person {

//全局常量

public static final String SEX = "男";

//类内常量

private static final String BIRTHPLACE ="安徽";

public void method1(String str){

//局部常量-方法常量

final String LANGUAGE = "汉语";

}

public void method2(final int age){

//局部常量-参数常量,不可改,这段代码会编译报错

age = 20;

}

}变量变量同样分为局部变量、成员变量和静态变量【程序用例】

代码语言:javascript复制public class Person {

//成员变量

//在类内部但在方法体外声明的变量称为成员变量,或者实例变量,或者字段。

//之所以称为实例变量,是因为该变量只能通过类的实例(对象)来访问。

int data1 = 3;

//静态变量

//通过 static 关键字声明的变量被称为静态变量(类变量),

//它可以直接被类访问

static int data2 = 4;

public int sum(){

//局部变量

//在方法体内声明的变量被称为局部变量,该变量只能在该方法内使用,

//类中的其他方法并不知道该变量。

int a = 1;

int b = 2;

return a+b;

}

public static void main(String[] args) {

Person person = new Person();

System.out.println(person.data1 == person.sum());

System.out.println(Person.data2 == person.sum());

}

}【变量使用时注意事项】

局部变量 局部变量声明在方法、构造方法或者语句块中。 局部变量在方法、构造方法、或者语句块被执行的时候创建,当它们执行完成后,将会被销毁。 访问修饰符不能用于局部变量。 局部变量只在声明它的方法、构造方法或者语句块中可见。 局部变量是在栈上分配的。 局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用。

成员变量 成员变量声明在一个类中,但在方法、构造方法和语句块之外。 当一个对象被实例化之后,每个成员变量的值就跟着确定。 成员变量在对象创建的时候创建,在对象被销毁的时候销毁。 成员变量的值应该至少被一个方法、构造方法或者语句块引用,使得外部能够通过这些方式获取实例变量信息。 成员变量可以声明在使用前或者使用后。 访问修饰符可以修饰成员变量。 成员变量对于类中的方法、构造方法或者语句块是可见的。一般情况下应该把成员变量设为私有。通过使用访问修饰符可以使成员变量对子类可见;成员变量具有默认值。数值型变量的默认值是 0,布尔型变量的默认值是 false,引用类型变量的默认值是 null。变量的值可以在声明时指定,也可以在构造方法中指定。

静态变量 静态变量在类中以 static 关键字声明,须在方法、构造方法和语句块之外。 无论一个类创建了多少个对象,类只拥有静态变量的一份拷贝。 静态变量除了被声明为常量外很少使用。 静态变量储存在静态存储区。 静态变量在程序开始时创建,在程序结束时销毁。 与成员变量具有相似的可见性。但为了对类的使用者可见,大多数静态变量声明为 public 类型。 静态变量的默认值和实例变量相似。 静态变量还可以在静态语句块中初始化

Java中的方法何为方法?我的理解是:方法是Java中对逻辑行为的一种程序实现,通过方法的调用去实现我们想让对象所拥有的行为,比如一个对象的增删改查,只需要创建相应的方法即可!

方法的声明在方法声明中,最重要的就是方法名(采用小驼峰命名法)与参数,这两者构成的方法的签名,是方法重载的判断依旧,除此之外,在声明方法的时候,还会设置访问权限、是否静态、返回值类型等。结构如下图:

实例方法在类中声明,无需static、abstract等关键字修饰,创建类对象,通过对象的引用所调用的方法为实例方法,类中最为常见的一种方法类型。上代码!

代码语言:javascript复制public class Test {

public static void main(String[] args) {

Test sum = new Test();

System.out.println(sum.add(1,2));

}

//实例方法,求两数之和

public int add(int a, int b) {

return a + b;

}

}静态方法若方法的声明中加上了static关键字,静态方法是属于类的,而不是属于类创建的对象或实例的,故在调用时无需通过对象实例。

代码语言:javascript复制public class Test {

public static void main(String[] args) {

System.out.println(sub(2,1));

}

public static int sub(int a,int b){

return a - b;

}

}【注意事项】

代码语言:javascript复制1、静态方法只能访问静态成员

2、调用静态方法时可能对象并没有被初始化,此时非静态变量还未初始化

3、非静态方法的调用和非静态成员变量的访问要先创建对象抽象方法当一个方法被关键字abstract修饰后,且没有方法体,那它就成为了一个抽象方法,抽象方法往往出现在抽象类和接口中。

代码语言:javascript复制/**

* @author JavaBUild

*/

abstract class AbstractDemo {

abstract void display();

}【注意事项】

代码语言:javascript复制1、抽象类中不一定必须要有抽象方法,但是有抽象方法的类必须是抽象类

2、若一个类继承了抽象类,则必须实现抽象类中的抽象方法!

3、抽象类不能被实例化

4、抽象方法不能被声明为静态

5、抽象方法不能用 private 修饰

6、抽象方法不能用 final 修饰native方法我们在讲Java的Object类时,已经接触过Java中的native方法了,它们用native关键字修饰,用C/C++语言实现,声明时native关键字必须在返回值前,不能用abstract修饰、没有方法体,甚至没有大括号!

代码语言:javascript复制public final native Class getClass();

public native int hashCode();

protected native Object clone() throws CloneNotSupportedException;这类方法存在的意义是作为Java标准类库的一种扩展,或者兼容其他语言写好的且更好用的类库,或者提升程序执行效率。

构造方法除了以上那些方法外,Java中还有一种特殊的方法,名为构造方法,用以在对象初始化工作,Java 有两种类型的构造方法:无参构造方法和有参构造方法。 当我们在一个类中不写任何构造方法时,编译器会默认一个无参构造方法,只不过这个方法是缺省的,显示不可见。构造方法的声明规范

构造方法的名字必须和类名一样; 构造方法没有返回类型,包括 void; 构造方法不能是抽象的(abstract)、静态的(static)、最终的(final)、同步的(synchronized)。

代码示例

代码语言:javascript复制public class Test {

private String name;

private int age;

//默认构造方法,无参构造

public Test() {

}

//有参构造方法

public Test(String name, int age) {

this.name = name;

this.age = age;

}

public static void main(String[] args) {

//通过无参构造创建的对象,会有默认值

Test test1 = new Test();

//通过有参构造方法构造的对象,在初始化时便进行了赋值

Test test2 = new Test("JavaBuild", 18);

System.out.println(test1.name+":"+test1.age);

System.out.println(test2.name+":"+test2.age);

}

}输出:

代码语言:javascript复制null:0

JavaBuild:18Java中参数上面构造方法中提及了有参构造和无参构造,那么现在就好好聊一聊这个参数,参数应用于方法之中,作为方法运转的条件和参考,当然这仅限于有参数的方法,方法中的参数分形参和实参,形参是在方法的定义阶段,而实参则是在方法的调用阶段,参数个数不限,类型不限,可以是基本数据类型,也可以是引用类型。

可变参数在jdk5中为了解决反射机制和printf中的问题引入了可变参数概念,顾名思义就是参数个数不确定的场景。定义方式:"参数类型...";

代码示例

代码语言:javascript复制public class Test {

public static void main(String[] args) {

countLength("a");

countLength("a","b");

countLength("a","b","c");

}

public static void countLength(String... args){

System.out.println(args.length);

}

}【注意事项】

代码语言:javascript复制1、每个方法最多只有一个可变参数

2、可变参数必须是方法的最后一个参数

3、无法仅通过改变可变参数的类型,来重载方法

4、通过对 class 文件反编译可以发现,可变参数被编译器处理成了数组

相关推荐

《糯米贷app》怎么进行注册 怎么贷款申请
365用英语怎么翻译

《糯米贷app》怎么进行注册 怎么贷款申请

⏳ 08-24 👁️ 5850
55寸电视等于多少米
365用英语怎么翻译

55寸电视等于多少米

⏳ 08-20 👁️ 1548
话机世界卡属于哪个运营商
万博365下载

话机世界卡属于哪个运营商

⏳ 01-05 👁️ 6033