Java基础语法(构造方法,作用域修饰符)
一、初识方法
在java中,方法定义在类中,它和类的成员属性一起构成了一个完整的类。一个方法有4个要素,分别是方法名、返回值类型、参数列表和方法体。定义一个方法的语法格式如下:
修饰符 返回值类型 方法名(参数列表){ 方法体 return 返回值; }
方法包含一个方法头和一个方法体。方法头包括修饰符、返回值类型、方法名和参数列表:
- 修饰符:定义了该方法的访问类型,这是可选的。
- 返回值类型:指定了方法返回的数据类型,它可以是任意有效的类型,如果方法没有返回值,则其返回值类型必须是void,不能省略。方法体中的返回值类型要与方法头中定义的返回值类型一致。
- 方法名称:要遵循Java标识符命名规则,通常以英文中的动词开头。
- 参数列表:由类型、标识符组成,每个参数之间用逗号分隔。方法可以没有参数,但方法名后面的括号不能省略。
-
方法体:指方法头后{}内的内容,主要用来实现一定的功能。
例:方法使用实例
class Person{ String name; int age; void setName(String name2){ name = name2; } void setAge(int age2){ age=age2; } void speak(){ System.out.println("我叫"+name+",年龄是"+age); } } public class Test{ public static void main(String[] args){ Person p1 = new Person(); p1.setName("张三"); p1.setAge(18); p1.speak(); } }
运行结果如图所示:
1.1构造方法
在创建类的对象时,使用new关键字和一个与类名相同的方法来完成,该方法在实例化过程中被调用,称为构造方法。构造方法是一种特殊的成员方法,有一下几个特点:
- 构造方法的名称必须与类的名称完全相同。
- 构造方法不返回任何数据,也不需要使用void关键字声明。
- 构造方法的作用是创建对象并初始化成员变量。
- 在创建对象时,系统会自动调用类的构造方法。
- 构造方法一般用public关键字声明。
- 每个类至少有一个构造方法,若不自定义,java将提供一个默认的不带参数且方法体为空的构造方法。
-
构造方法也可以重载
例:类的构造方法应用实例
class Person{ String name; int age; public Person(String name,int age){ this.name = name; this.age = age; } void speak(){ System.out.println("我叫"+name+",年龄是"+age); } } public class Test{ public static void main(String[] args){ Person p1 = new Person("张三",18); p1.speak();
运行结果如图
二、作用域修饰符
在Java中有许多的修饰符,主要分为访问修饰符和非访问修饰符两种。修饰符用来定义类、方法或者变量,通常放在语句的最前面。
2.1 访问修饰符
Java提供了4种不同的访问权限,以实现不同范围的访问能力。
2.1.1 私有的访问修饰符private
private修饰符对应最严格的访问级别,被声明为private的方法、变量和构造方法只能被所属类访问,并且类和接口不能声明为private。
声明为私有类型的变量只能通过类中的公共方法被外部类访问。private修饰符主要用来隐藏类的实现细节和保护类的数据。
例:private修饰符应用实例
public class Test{ private String name; //私有成员变量
public String getName(){ //私有成员变量的get方法 return name; } public void setName(String name){ //私有成员变量的set方法
this.name = name; } public static void main(String[] args){ Test t =new Test(); //创建类的对象
t.setName("private 修饰符"); //调用对象的set方法,为成员变量赋值
System.out.println("name = "+p.getName()); //打印成员变量name的值 } }
运行结果如图所示
2.1.2 受保护的访问修饰符 protected
protected修饰符不能修饰类和接口,方法和成员变量能够被声明为protected,但是接口的成员变量和成员方法不能声明为protected。
例:在父类Person中,使用protected声明了方法;在子类Women中,访问父类中用protected声明的方法。
package com.test; public class Test { //父类
protected String name; protected void sing() { //用protected修饰的方法
System.out.println("父类。。"); } } package com.child; //与父类不在一个包中 import com.test.Test; //引入父类
public class Women extends Test{ //继承父类的子类
public static void main(String[] args) { Women w = new Women(); w.sing(); //调用子类在父类继承的方法
w.name = "protected"; System.out.println(w.name); } }
运行结果如图所示
2.1.3 公有的访问修饰符public
被声明为public的类、方法、构造方法和接口能够被任何其他类访问。如果几个相互访问的public类分布在不同的包中,则需要用关键字import导入相应的public类所在的包。由于类的继承性,类所有的公有方法和变量都能被其子类继承。
例:在类中定义public的方法,在不同包中访问它。
package create; public class Person ( public void test () { System.out.println("父类: public test") ; } } package child; import create. Person; public class PublicTest ( public static void main(String[l args)(1/€l3t Person xt R
Person p = new Person() ; p.test() ; } }
运行结果如图:
2.2 非访问修饰符
Java不仅提供了访问修饰符还提供了非访问修饰符,如static 、final、abstract、synchronized、transient和volatile
2.2.1 static 修饰符
static 修饰符用来修饰类的成员变量和成员方法,也可以形成静态代码块。static修饰的成员变量和成员方法 一般称为静态变量和静态方法,可以直接通过类名访问,访问的格式为
类名.静态方法名(参数列表); 类名.静态变量名 ;
例:static修饰符使用
package com.child; public class Women{ public static final String BANANA ="香蕉"; public static float price = 5.2f; static { System.out.println("static 静态代码块"); } public static void test() { System.out.println(Women.BANANA+"的价格是"+Women.price); } public static void main(String[] args) { Women w = new Women(); w.test(); } }
运行结果如图:
2.2.2 final修饰符
inal可以修饰类、方法和变量,意义不同,但是本质相同,都是表示不可改变。
-
final 修饰类中的变量
用fnal修饰的成员变量表示常量,值-且给定就无法改变。fnal 修饰的变量有3种,分别是棉态交量成员变量和局部变量。变量的初始化可以在两个地方,一是在定义时初始化, 二是在构造方法中就仅量final变量定义的时候,可以先声明,而不给初值,这种变量也称为final 空白,无论什么情况,编泽器都确保final空白在使用之前必须被初始化。但是,final 空白在final关键字的使用上提供了更大的灵活性。为此,一个类中的final数据成员就可以实现既根据对象而有所不同,又保持其恒定不变的特征。 -
final 修饰类中的方法
如果一个类不允许其子类覆盖某个方法,则可以把这个方法声明为final 方法。使用final 方法的原因有两个;一是把方法锁定,防止任何继承类修改它的意义和实现;二是高效。编译器在遇到调用final方法时会转入内嵌机制,大大提高执行效率。
[修饰符] final 返回值类型 方法名([参数类型 参数]){ 方法体 }
3. abstract修饰符
abstract用来修饰类,这个类称为抽象类。抽象类不能用来实例化对象,声明抽象类的唯一目 的是为了将来对该类进行扩充。
抽象类可以包含抽象方法和非抽象方法。如果一个类包含若 干个抽象方法,那么该类必须声明为抽象类。抽象类可以不包含抽象方法。抽象方法的声明以分号结尾。
抽象方法不能被声明成final和static。 抽象方法是一种没有 任何实现的方法,该方法的具体实现由子类提供。任何继承抽象类的子类必须实现父类的所有抽象方法,除非该子类也是抽象类。
4. synchronized修饰符
synchronized声明的方法同一时间只能被一个线程 访问。synchronized 的作用范围有如下两种:
(1)在某个对象内,synchronized 修饰的方法可以防止多个线程同时访问。这时,不同的对象的synchronied方法是不相干扰的。也就是说,其他线程照样可以同时访问相同类的另一个对象中的syochroized方法。如果一个对象有多 个sychronied方法,只要一个线程访问了其中的一 个sochornie方法,其他线程就不能同时访问这个对象中任何一个synchronized方法。
(2)在某个类中,用snchonired 修饰静态方法可以防止多个线程同时访问这个类中的静态方法。它可以对类的所有对象起作用。
5. transient修饰符
序列化的对象包含被transient 修饰的成员变量时,JVM 跳过该特定的变量。该修饰符包含在定义变量的语句中,用来预处理类和变量的数据类型。
6. volatile修饰符
Java语言是支持多线程的,为了解决线程并发的问题,在语言内部引入了同步块和volatile 关键字机制。volatile 修饰的成员变量在每次被线程访问时都强制从共享内存中重新读取该成员变量的值。而且,当成员变量发生变化时,会强制线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。一个volatile 对象引用可能是null。
三、重载
在Java中,同一个类中的多个方法可以有相同的名字,只要它们的参数列表不同即可,这被称为方法重载(method overloading)。参数列表又叫参数签名,包括参数的类型、参数的个数和参数的顺序,只要有一个不同就叫做参数列表不同。重载是面向对象的一个基本特性。
例:方法的重载
public class Test{ void test()){ System.out.println("No parameters"); } //重载上面的方法,并且带有一个整形参数
void test(int a ){ System.out.println("a="+a); } //重载上面的方法,并且带有两个整形参数
void test(int a,int b ){ System.out.println("a and b"+a+" ,"+b); } //重载上面的方法,并且带有一个双精度参数
void test(double a ){ System.out.println("double a="+a); return a *a; } public static void main(String[] args) { Test d = new Test(); d.test(); d.test(2); d.test(2,3); d.test(2.0); } }
运行结果如图所示:
四、递归方法
递归方法是调用自身的方法。递归是一种允许方法调用自身的编程技术。递
归方法将重复调用它自身,因此我们需要一个使调用停止的条件。使用递归方法
解决问题与使用循环语句解决问题具有相同的工作原理。因此,可以用循环语句
解决的问题也可以用递归方法解决。
例:递归方法应用实例
package com.test; public class Test{ void Display(int n){ if(n>1) Display (n-1); System.out.println("我爱 Java"); } public static void main(String[] args) { Test t = new Test(); t.Display(10); } }
结果如图
本文地址:https://blog.csdn.net/weixin_46246170/article/details/107965031
上一篇: Java语言概述及发展史
下一篇: 什么食物能减肥去脂 这些要多吃