java中创建方法的语法_JAVA基础语法

1. 类

2. 局部变量

定义: 定义在方法中的变量成为局部变量

作用域:从定义的位置开始到整个方法结束

注意:局部变量只能在当前方法中使用,其他地方无法使用

内存存放位置:存放在栈内

默认值: 局部变量无默认值;如果木有使用当前变量时,可以不赋值

2.1成员变量

定义:定义在方法外、类内的变量叫成员变量(全局变量)

作用域:在整个类体内

注意:

内存存放位置:存放在堆内存中

默认值:成员变量有默认值;int->0 ;String->null ; boolean->false

示例:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

public classStudent {public int age = 20; //成员变量

public String addr; //成员变量有默认值;存放在堆内存,对整个类生效

public voidshow(){

String name= "xiaobai"; //局部变量,必须有默认值;只对当前方法有效;存放在栈中

System.out.println("我的名字--"+name + ",年龄是--"+age);

System.out.println("addr 值是" +addr);

}public static voidmain(String[] args){

Student stu= newStudent();

stu.show();//System.out.println(age);//main函数使用成员变量需要加static关键字修饰

}

}

View Code

运行结果:

默认的无参构造函数

我的名字--xiaobai,年龄是--20addr 值是null

3.构造方法

定义:

创建对象的时候会默认调用构造方法(在堆中开辟空间),可以完成成员变量的某些初始化操作

构造方法语法:

方法名称:构造方法的方法名称必须跟类的名称保持一致

访问修饰符:待定

形参:可以用户自定义添加,跟方法的普通参数一样

方法体:完成对象的初始化功能

返回值:无返回值

注意:

1.创建类之后,若没有手动调用构造方法,会默认生成一个无参的构造方法供调用

2. 当用户自定义了构造方法之后,默认的无参构造方法就不能使用了,需要手动定义无参构造方法

3. 同一个类中可以包含多个同名的构造方法

4. 一般构造方法都会进行重载(一个类中可能包含多个属性,只需要给部分属性初始化的时候需要调用不同的构造方法)

示例:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

public classTeacher {

String name;intage;publicTeacher(){

System.out.println("无参构造方法");

}publicTeacher(String name){

System.out.println("自定义构造方法,name值是:"+name);

}public Teacher(intage,String name){this.age =age;this.name =name;

System.out.println("two 构造方法,name is:" + name + "age is :"+age);

}public static voidmain(String[] args){

Teacher t1= newTeacher();

t1.name= "lian";

t1.age= 18;

System.out.println("无参构造方法..."+t1.age);

Teacher t2= new Teacher("xiaoxiao");

Teacher t3= new Teacher(29,"lisi");

System.out.println("one argument..."+t2.name);

System.out.println("two argument..." + t3.name + "---" +t3.age);

}

}

View Code

运行结果:

无参构造方法

无参构造方法...18自定义构造方法,name值是:xiaoxiao

two 构造方法,name is:lisiage is :29one argument...nulltwo argument...lisi---29

4. 重载

定义:

在一个类中可以包含多个重名的方法,但注意:方法的参数列表不能相同

三个方面的不同:

参数个数不同、参数类型不同、参数顺序不同

5. this

作用: this代表当前对象本身,指向当前对象

用处:

1. 构造方法:当构造方法中的参数名称跟类的成员变量名称一样,可以使用this代表当前对象

2. 普通方法:当多个普通方法之间进行调用,可以使用this进行调用;指的是当前对象的其他方法

3. 成员变量的使用:当方法中的参数名称跟成员变量一致时,使用this.变量名称表示的是对象的值;而使用变量名称表示形参列表的值

示例:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

public classUser {intage;

String name;public User(intage){this.age = age; //局部变量的age赋值给成员变量;若不指定,则打印默认值 0

System.out.println("构造方法..." +age);

}public static voidmain(String[] args){

User user= new User(18);

System.out.println("age is :" + user.age); //调用的是成员变量age

}

}

View Code

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

public classUser {intage;

String name;public User(intage){this.age = age; //局部变量的age赋值给成员变量;若不指定,则打印默认值 0

System.out.println("构造方法..." +age);

}//方法1

public voidshow(){

System.out.println("show1");

}//方法2

public voidsay(){

System.out.println("say");this.show(); //也可以不使用this,调用show方法

}public static voidmain(String[] args){

User user= new User(18);

System.out.println("age is :" + user.age); //调用的是成员变量age

user.say();

}

}

View Code

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

public classUser {intage;

String name;public User(intage,String name){this.age = age; //局部变量的age赋值给成员变量;若不指定,则打印默认值 0

this.name =name;

System.out.println("构造方法..." +age);

}//方法1

public voidshow(){

System.out.println("show1");

}//方法2

public voidsay(String name){

System.out.println("say");this.show(); //也可以不使用this,调用show方法

System.out.println(name); //局部变量的值

System.out.println(this.name); //成员变量的值

}public static voidmain(String[] args){

User user= new User(18,"zhansan");

System.out.println("age is :" + user.age); //调用的是成员变量age

user.say("lisi");

}

}

View Code

运行结果:

构造方法...18age is :18say

show1

lisi

zhansan

6. static

定义:

修饰成员变量时,表示 静态成员变量 或者叫 类变量

普通变量在使用时,必须通过对象进行调用;

类变量 或 静态变量可以通过对象调用,也可以通过类名进行调用

注意:

静态变量在创建对象之前被初始化;或 在类被载入之前进行初始化

静态变量被所有的对象共享,属于公共变量,对象和类都可以直接调用,但是推荐使用类来调用

存储位置: static变量置于方法区。

示例:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

public classStaticDemo {

String name= "zhangsan";static int age = 10;public static voidmain(String[] args){

StaticDemo sd= newStaticDemo();

System.out.println(sd.age);//对象调用

System.out.println(StaticDemo.age); //类名调用

sd.age= 20;

System.out.println(sd.age);

System.out.println(StaticDemo.age);

StaticDemo.age= 30;

System.out.println(sd.age);

System.out.println(StaticDemo.age);

StaticDemo sd1= newStaticDemo();

System.out.println(sd1.age);

System.out.println(StaticDemo.age);

}

}

View Code

运行结果: 当修改当前成员变量值时,修改的是同一空间内的值。

10

10

20

20

30

30

30

30

7. 代码块

定义:使用{}的代码叫做代码块

分类:

普通代码块:定义在方法中,使用{}括起来的代码叫普通代码块

构造代码块:定义在类中使用{}括起来的代码叫构造代码块;

注意:a. 每次代码运行时,会将 构造代码块中的代码 添加到 构造方法 前 ;

b. 优先运行构造代码块,再运行构造方法

c. 构造代码块中的代码会添加到每一个构造方法中,当使用this()时不会添加 this(age),调用带一个参数的构造方法

静态代码块: 使用static{}括起来的代码叫静态代码块,在创建对象前优先执行静态代码块

注意:静态代码块中不能访问非static成员(因为非static成员是通过对象调用的,这时对象还未创建)

同步代码块:在多线程时会使用,用来给共享空间进行加锁操作

执行顺序:静态代码>>> 构造代码块(创建对象时使用)>>>普通代码块

示例:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

public classCodeBlockDemo {intage;

String name;static{

System.out.println("静态代码块");

}

{

System.out.println("构造代码块...");

}publicCodeBlockDemo(){

System.out.println("构造方法...");

}public CodeBlockDemo(intage){this.age =age;

}public CodeBlockDemo(intage, String name){this(age);this.name =name;

}public voidtest(){

System.out.println("test...");

{

System.out.println("普通代码块....");

}

}public static voidmain(String[] args){

CodeBlockDemo cbd= new CodeBlockDemo(18,"aa");

cbd.test();

System.out.println("main...");

}

}

View Code

运行结果:

静态代码块

构造代码块...

test...

普通代码块....

main...

8. 封装

概念:将类的某些信息隐藏在类内部,不运行外部程序直接访问;而是通过类提供的方法来实现对隐藏信息的操作和访问

作用:使用封装可以保证数据的规范,不符合规范的数据将无法进行操作

示例:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.xiuxianxiaoyu;public classDog {private int age; //私有属性

privateString name;privateString color;//需要通过set/get类设置、获取属性值

public void setAge(intage){if (age >0){this.age =age;

}else{

System.out.println("年龄输入不合法");

}

}public intgetAge(){return this.age;

}public voidsetName(String name){this.name =name;

}publicString getName(){return this.name;

}public voidsetColor(String color){this.color =color;

}publicString getColor(){return this.color;

}public voidshow(){

System.out.println("my dog name is :" + name + ", age is :" + age +", color is :" +color);

}

}

View Code

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.xiuxianxiaoyu;public classDogDemo {public static voidmain(String[] args){

Dog dog= newDog();

dog.setAge(18);

dog.setName("xiaohei");

dog.setColor("yellow");

dog.show();

}

}

View Code

运行结果:

my dog name is :xiaohei, age is :18, color is :yellow

8.1 访问限制

限制访问,以下分类按照访问权限从大到小排列:

public: 公共的,当前项目的所有类都可以访问。protected:受保护的;可以被当前类访问、可以被当前包访问、可以被子类访问。default:默认权限;可以被当前类访问、可以被当前包访问。private:只能被当前类访问。

注意:

4种访问修饰符可以修饰 属性和方法;

类的访问修饰符只有2种 public 和 default

8.2 形参、实参

java中的参数传递都是值传递

形参: 方法中的参数列表叫形式参数,没有具体的值,只是为了方便在方法体中使用;

实参: 调用方法是实际传入的参数,代表具体的数值,用来替换在方法体中代码逻辑值的运算

注意:

1. 形式参数的变量名称也是局部变量

2. 当方法的参数值是基本数据类型时,不会改变原来的值

3. 当方法的参数值是引用类型的时候,如果改变了该引用类型的值,会改变原来对象的值

示例:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.xiuxianxiaoyu;public classArgmentDemo {public static void test(int a, intb){int tmp =a;

a=b;

b=tmp;

System.out.println("test 方法中a=" + a + ",b=" +b );

}public static voidtest2(Point p){int x =p.getX();int y =p.getY();int tmp =x;

x=y;

y=tmp;

p.setX(x);

p.setY(y);

}public static voidmain(String[] args) {int a = 10; //这个地方的赋值是局部变量的赋值

int b = 20;

test(a,b);

System.out.println("main方法中a=" + a + ",b="+b);

Point p= new Point(2,3);

test2(p);

System.out.println("改变后的值:" + p.getX() + "..." +p.getY());

}

}

View Code

Point类:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.xiuxianxiaoyu;public classPoint {private intx;private inty;public Point(int x, inty){this.x =x;this.y =y;

}public intgetX() {returnx;

}public void setX(intx) {this.x =x;

}public intgetY() {returny;

}public void setY(inty) {this.y =y;

}

}

View Code

9. 继承

定义:表示父类跟子类之间的关系;当两个类火灾多个类具备相同的属性和方法时,可以提取出来,变成父类; is a 的关系

使用:

1. 使用extends关键字进行继承

2. 使用继承关系之后,父类中的属性和方法都可以在子类中进行使用(非私有属性和私有方法)

3. java中为单继承(如果包含多个父类,同时父类中包含重名方法,无法决定调用谁)

super:

是直接父类对象的引用

supper用途:

1. 可以在子类中 调用父类中被 子类覆盖的方法

2. 当supper在普通方法中使用的话,可以任意位置编写

3. 当supper在构造方法中使用时,默认会调用父类的构造方法,一定将supper放在第一行

4. 在构造方法中supper关键字和this()关键字不能同时出现

5. 父类中私有的属性和方法都不能被调用,包括构造方法

6. 子类的构造方法中都会默认使用supper关键字调用父类的构造方法

7. 如果构造方法中显示的指定了super的构造方法,那么无参的构造方法不会被调用

总结:

1. 在创建子类的对象时一定会优先创建父类对象

示例:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.xiuxianxiaoyu.extend;public classPet {privateString name;private intage;privateString gender;publicPet(){

}public Pet(String name, intage, String gender){this.name =name;this.age =age;this.gender =gender;

}publicString getName() {returnname;

}public voidsetName(String name) {this.name =name;

}public intgetAge() {returnage;

}public void setAge(intage) {this.age =age;

}publicString getGender() {returngender;

}public voidsetGender(String gender) {this.gender =gender;

}public voidplay(){

System.out.println("play....");

}

}

View Code

子类

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.xiuxianxiaoyu.extend;public class Dog extendsPet {privateString sound;publicDog(){

}publicDog(String sound){this.sound =sound;

}public Dog(String name, intage, String gender, String sound){super(name,age,gender);//this(sound);//不能跟supper同时出现

this.sound =sound;

}publicString getSound() {returnsound;

}public voidsetSound(String sound) {this.sound =sound;

}public voidplay(){super.play(); //先调用父类的play方法

System.out.println("dog is playing...");

}

}

View Code

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.xiuxianxiaoyu.extend;public class Cat extendsPet{privateString color;publicCat(){

}public Cat(String name, intage, String gender, String color){super(name,age,gender);this.color =color;

}publicString getColor() {returncolor;

}public voidsetColor(String color) {this.color =color;

}

}

View Code

测试类

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.xiuxianxiaoyu.extend;public classPetTest {public static voidmain(String[] args) {

Dog dog= newDog();

dog.setName("哈士奇");

System.out.println(dog.getName());

dog.play();

}

}

View Code

运行结果:

哈士奇

play....

dog is playing...

9.1 重写

定义:必须存在继承关系,当父类中的方法无法满足子类需求时,可以选择使用重写的方式

注意:

1. 重写表示的是子类覆盖父类的方法,当覆盖之后,调用同样的方法时会优先调用子类方法

2.重写的方法名称、返回值类型、参数列表必须跟父类一致

3.子类重写的方法不允许比父类的方法具备更小的访问权限

父类 public             子类 public

父类 protected       子类 public protected

父类 default            子类 public protected     default

4. 父类的静态方法,子类可以进行调用;但子类不可重写

示例:

父类方法:

@OverridepublicString toString(){return "my name is " + this.name + ",my age is " + this.age+ ", my gender is " + this.gender;

}

子类重写父类方法:

publicString toString(){return super.toString()+ ", my sound is " + this.sound;

}

9.2  final用法

final 可以修饰变量: 表示变量的值不可变

final 可以修饰方法:表示方法不可以被重写

final可以修饰类:表示类不可以被继承

10. 抽象类

定义: java中的对象是对现实世界的具象化,但在现实世界中,某些类并不具备实例化的意义,因此可以定义为抽象类

使用: 1. 创建抽象类的时候需要添加 abstract 关键字

2. 不能进行实例化,也就是不能new对象

3. 抽象类中的某些方法需要子类进行更丰富的实现,父类实现没有意义,此时可以将抽象类的方式定义为抽象方法,没有具体实现,只包含方法名称、返回值、参数列表、访问修饰符

4. 使用abstract关键字修饰的方法叫做抽象方法,可以不写方法的实现

5. 子类在继承抽象父类时,必须要将父类中的抽象方法进行实现 或者 将子类也定义为抽象类

6. 有抽象方法的一定是抽象类;但抽象类中不一定包含抽象方法

示例:

抽象类:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.xiuxianxiaoyu.abstracts;public abstract classPet {publicString name;//抽象方法

public abstract voidprint();public voidplay(){

System.out.println("play....");

}

}

View Code

子类:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.xiuxianxiaoyu.abstracts;public class Dog extendsPet {//子类实现父类的抽象方法

@Overridepublic voidprint() {

System.out.println("dog print...");

}

}

View Code

11. 多态

定义: 对应同一个指令(调用同一个名称的方法),不同的对象给予不同的反应(不同的方法实现)

规范:

1. 必须要有继承关系

2. 子类方法必须要重写父类的方法

3. 父类引用指向子类对象

目的:

为了提高代码的扩展性和维护性

方便代码逻辑的编写

表现形式:

1. 父类作为方法的参数

2. 父类作为方法的返回值类型

示例:

父类:

7ce93df7f8c9943f1ad2653dec385662.png

子类:

155c4d7dac5d0d0c94633621ebdebfc2.png

测试类:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.example.duotai;public classPerson {//父类作为子类的返回值

public Pet play(inttype){if (type == 1){return newDog();

}else if(type == 2){return newCat();

}else{return newPenguin();

}

}//父类作为子类的参数

public voidfeed(Pet pet){

pet.feed();

}public static voidmain(String[] args) {

Person p= newPerson();

p.feed(newDog());

Pet pet= p.play(3);if (pet instanceofDog){

System.out.println("buy dog!!");

}else if (pet instanceofCat){

System.out.println("bug cat !!");

}else{

System.out.println("buy penguin!!");

}

}

}

View Code

12. 接口

java中的继承关系是单继续,如果拥有多个父类时,可以考虑使用接口进行实现。

java中的接口具备广泛的使用:

1. 使用interface来修饰

2. 接口中可以包含多个方法,且方法跟抽象类中的抽象方法一致,可以不写实现,子类在实现时必须实现父类接口的逻辑;

3. 子类实现接口使用implements关键字

特征:

1. 接口中的所有方法都是抽象方法,不能包含实现逻辑;

2. 接口中的所有方法的访问修饰权限都是public,默认不限权限,也是public,不是default

3.接口不能实例化

4. 接口的子类必须实现接口中的所有方法;跟抽象类不同,抽象类中的抽象方法必须被子类实现

5. 子类可以实现多个接口 (A implements B,C,D)

6. 接口中的变量都是静态常量,如果变量没有使用static关键字修饰,它也表示静态常量

7. 接口中的方法和常量无论是否添加public修饰,默认的权限有且仅有一个,public

8. 接口代表一种能力,接口中仅有定义N个方法,子类在进行实现时,意味着具备了方法的能力

13. 总结

1. try-catch-finally中,finally块唯一不执行的情况是什么?

答:在try或者catch语句中调用了退出虚拟机的方法(system.exit(1))

示例:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

public classTryTest{public static voidmain(String[] args){

test();

}public static voidtest(){try{

System.out.println("try");int i = 1 / 0;

System.exit(1);

}catch(Exception e){

e.printStackTrace();

System.exit(1);

}finally{

System.out.println("finally");

}

}

}

View Code

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值