写在开头

在上一篇文章:一文搞清楚Java中的包、类、接口

中我们讲了Java中的包、类和接口,今天继续将剩下的方法、常量、变量以及参数梳理完。

Java中的变量与常量

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

常量

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

【程序用例】

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;
}
}

变量

变量同样分为局部变量、成员变量和静态变量

【程序用例】

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等关键字修饰,创建类对象,通过对象的引用所调用的方法为实例方法,类中最为常见的一种方法类型。上代码!

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关键字,静态方法是属于类的,而不是属于类创建的对象或实例的,故在调用时无需通过对象实例。

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;
}
}

【注意事项】

1、静态方法只能访问静态成员
2、调用静态方法时可能对象并没有被初始化,此时非静态变量还未初始化
3、非静态方法的调用和非静态成员变量的访问要先创建对象

抽象方法

当一个方法被关键字abstract修饰后,且没有方法体,那它就成为了一个抽象方法,抽象方法往往出现在抽象类和接口中。

/**
* @author JavaBUild
*/
abstract class AbstractDemo {
abstract void display();
}

【注意事项】

1、抽象类中不一定必须要有抽象方法,但是有抽象方法的类必须是抽象类
2、若一个类继承了抽象类,则必须实现抽象类中的抽象方法!
3、抽象类不能被实例化
4、抽象方法不能被声明为静态
5、抽象方法不能用 private 修饰
6、抽象方法不能用 final 修饰

native方法

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

public final native Class<?> getClass();
public native int hashCode();
protected native Object clone() throws CloneNotSupportedException;

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

构造方法

除了以上那些方法外,Java中还有一种特殊的方法,名为构造方法,用以在对象初始化工作,Java 有两种类型的构造方法:无参构造方法和有参构造方法。

当我们在一个类中不写任何构造方法时,编译器会默认一个无参构造方法,只不过这个方法是缺省的,显示不可见。

构造方法的声明规范

构造方法的名字必须和类名一样;

构造方法没有返回类型,包括 void;

构造方法不能是抽象的(abstract)、静态的(static)、最终的(final)、同步的(synchronized)。

代码示例

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);
}
}

输出:

null:0
JavaBuild:18

Java中参数

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

可变参数

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

代码示例

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);
}
}

【注意事项】

1、每个方法最多只有一个可变参数
2、可变参数必须是方法的最后一个参数
3、无法仅通过改变可变参数的类型,来重载方法
4、通过对 class 文件反编译可以发现,可变参数被编译器处理成了数组

一文搞清楚Java中的方法、常量、变量、参数的更多相关文章

  1. 一文搞懂--Java中重写equals方法为什么要重写hashcode方法?

    Java中重写equals方法为什么要重写hashcode方法? 直接看下面的例子: 首先我们只重写equals()方法 public class Test { public static void ...

  2. 一文搞懂 Java 中的枚举,写得非常好!

    知识点 概念 enum的全称为 enumeration, 是 JDK 1.5 中引入的新特性. 在Java中,被 enum关键字修饰的类型就是枚举类型.形式如下: enum Color { RED, ...

  3. 一文彻底搞懂Java中的环境变量

    一文搞懂Java环境变量 记得刚接触Java,第一件事就是配环境变量,作为一个初学者,只知道环境变量怎样配,在加上各种IDE使我们能方便的开发,而忽略了其本质的东西,只知其然不知其所以然,随着不断的深 ...

  4. 来吧,一文彻底搞懂Java中最特殊的存在——null

    没事的时候,我并不喜欢逛 P 站,而喜欢逛 programcreek 这些技术型网站,于是那天晚上,在夜深人静的时候,我就发现了一个专注基础但不容忽视的主题.比如说:Java 中的 null 到底是什 ...

  5. JAVA中native方法调用

    在Java中native是关键字.它一般在本地声明,异地用C和C++来实现.它的声明有几点要注意:1)native与访问控制符前后的关系不受限制.2)必须在返回类型之前.3)它一般为非抽象类方法.4) ...

  6. java中equals方法和==的用法

    java中equals方法的用法以及==的用法(参考一)equals 方法是 java.lang.Object 类的方法.两种用法说明:(1对于字符串变量来说,使用“==”和“equals()”方法比 ...

  7. Java中的方法应用

    一.如何定义java中的方法 所谓方法,就是用来解决一类问题的代码的有序组合,是一个功能模块. 语法: 1. 访问修饰符:方法允许被访问的权限范围, 可以是 public.protected.priv ...

  8. c#和java中的方法覆盖——virtual、override、new

    多态和覆盖 多态是面向对象编程中最为重要的概念之一,而覆盖又是体现多态最重要的方面.对于像c#和java这样的面向对象编程的语言来说,实现了在编译时只检查接口是否具备,而不需关心最终的实现,即最终的实 ...

  9. Java中的方法(形参及实参)return返回类型

    如何定义 Java 中的方法 所谓方法,就是用来解决一类问题的代码的有序组合,是一个功能模块. 一般情况下,定义一个方法的语法是: 其中: 1. 访问修饰符:方法允许被访问的权限范围, 可以是 pub ...

  10. java中的方法method

    java中的方法必须存在于类class里,不能独立存在.类是描述具有某种特征的事物,方法则是这类 事物具有的某种功能,通过调用方法可以实现某种特定的功能.方法名一般以小写的动词开头. 例: publi ...

随机推荐

  1. 阿里云+智能ai+gpt

    1.阿里 百度 腾讯分词 知识库.     阿里云(项目具体的费用预算展示,实际功能核算.) 向量智库 https://developer.aliyun.com/article/1234278?spm ...

  2. django分页器使用

    https://docs.djangoproject.com/en/3.2/topics/pagination/ Django 提供了高级和低级方法来帮助您管理分页数据--即,分成多个页面的数据,并带 ...

  3. 文心一言 VS 讯飞星火 VS chatgpt (162)-- 算法导论13.1 2题

    二.用go语言,对图13-1中的红黑树,画出对其调用TREE-INSERT 操作插人关键字 36 后的结果.如果插人的结点被标为红色,所得的树是否还是一棵红黑树?如果该结点被标为黑色呢? 文心一言,代 ...

  4. 山海鲸Cesium:用更简单的方式升级视效

    CesiumJS作为绝大多数人都在用的开源地球可视化引擎,视觉效果并不拔尖,这让很多giser都想着有一天升级一下视效,从众多平庸的项目中脱颖而出.然而,对于一些使用Cesium的项目来说,要想达到C ...

  5. ASR项目实战-产品分析

    分析Google.讯飞.百度.阿里.QQ.搜狗等大厂的ASR服务,可以罗列出一款ASR服务所需要具备的能力. 产品分类 ASR云服务产品,从用户体验.时效性.音频时长,可以划分为如下几类: 实时短音频 ...

  6. Java异常中处理return

    Java中的return语句 在Java中,return语句用于从一个方法中返回结果,并终止当前方法的执行.在方法中使用return语句后,后续的语句将不会执行. public int add(int ...

  7. Visual Studio使用Web Deploy发布.NET Web应用到指定服务器的IIS中

    前言 今天要讲的是在Window 2008 R2版本的服务器下如何配置Web Deploy,和Visual Studio使用Web Deploy发布.NET Web应用到指定服务器的IIS中. 因为历 ...

  8. 7、Flutter GridView网格布局组件(遍历)

    GridView创建网格列表主要有下面三种方式 1.可以通过GridView.count 实现网格布局    一行的 Widget 数量 class HomePage extends Stateles ...

  9. Java 在PDF中添加文本水印、图片水印(基于Spire.Cloud.SDK for Java)

    Spire.Cloud.SDK for Java提供了接口pdfWartermarkApi可用于添加文本水印addTextWartermark()和图片水印addImageWartermark()到P ...

  10. 云图说|一张图看懂一站式DevOps利器——华为云DevCloud

    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要: 华为云DevCl ...