Java学习笔记-语法篇[类与对象]

[Java语法篇1] 类与对象

一、Java代码块

1.分类

静态代码块、非静态代码块

2.运作原理

1)静态代码块:

java在执行时需要先将类加载到内存(main方法执行之前,在判断语法正确之前就执行了,因为class文件不是二进制的,加载将其转换成二进制),在加载类时会执行一次静态代码块(只执行一次,因为类加载只执行一次),不执行非静态代码块

2)非静态代码块:

创建类的对象一次时(new Test();)会执行一次,因为在类里面。

public class Test{
	static{
		System.out.println("静态代码块");
	}
	
	{
		System.out.println("非静态代码块");
	}
	
	public static void main(String[] args){
		new Test();
		new Test();
	}
}

二、Java方法

1.方法的结构

方法: 访问权限 修饰符 返回值类型 方法名 ([参数列表]) { 方法体 }

2.各结构的作用

1)访问权限:

public protected 默认的private 控制方法能否在其他“类”中使用

2)方法的使用:

存储对象的变量.方法名()

3)修饰符:

final static synchronized等,如果方法没有static修饰,则只能使用“存储对象的变量.方法()”,有static修饰可以如下方式使用“类名.方法名()”(推荐使用)

4)方法名:

首先符合Java标识符命名规范;动词和动宾结构

5)参数列表:

可有可无,多个参数之间使用逗号间隔

int add(int a, int b, int c){
	return a+b+c;
}

静态参数: 必须传等量的值

动态参数: 数据类型 … 参数名
可以传值也可以不传值,可以传无数个值
实质是一个数组,多个值按顺序存入数组里,按数组方式检索
一个方法中只能到定义一个动态参数,动态参数只能定义在参数列表最后

6)返回值类型:

a. 如果方法没有返回值,则返回值类型为void

void test(){
	System.out.println("Test");
}

b. 如果返回值为基本数据类型,则返回值为 基本数据类型长度比返回值类型大的数据类型
boolean类型没有比其长度更大的类型

boolean compare(int x,int y){
	return x>y;
}

int add(int x,int y){
	return x+y;
}

double add(int x, int y){
	return x+y;
}

c. 如果返回值是引用类型,则方法返回值类型要么 与数据类型一致,要么 是数据类型的父类
Object类是所有类的父类

3.Java方法的注意事项

1)方法内可以调用方法
2)方法内不许定义方法
3)程序的入口的main函数结构只能是public static void main(String[] args){}
其他自定义的main()无效


三、Java方法的重载

1.重载含义:

方法名相同,参数列表不同
1)参数个数不同
2)参数类型不同
注:重载不考虑参数名相同与否
动态参数也算在重载条件里

int add(int x, int y){
	return x+y;
}

int add(int ... a){
	return a[0]+a[1];
}

int add(int x, int y, int z ){
	return x+y+z;
}

double add(double x, double y){
	return x+y;
}

2.重载方法的调用

根据参数个数类型的不同调用不同的方法

测试代码:

public class Computer{
	int add(int x, int y){
		return x+y;
	}
	
	int add(int ... a){
		return a[0]+a[1];
	}
	
	int add(int x, int y, int z ){
		return x+y+z;
	}
	
	double add(double x, double y){
		return x+y;
	}
	public static void main(String[] args){
		Computer c = new Computer();
		c.add(1,2,3);	//参数个数
		c.add(1.0,2);	//参数类型
	}
}

四、关键字this的使用

小贴士:System.out.println(); 输出时输出的是栈内的

1.this的解释

代词,哪个对象调用存在this的方法,则this就是谁

测试代码:

public class Student{

	public void test(){
		System.out.println("this的使用" + this);
	}
	
	public static void main(String[] args){
		Student stu = new Student();
		stu.test();
		System.out.println("对象的地址" + stu);
	}
}

五、Java成员变量

1.定义

直接在类体中定义的变量

public class UserInfo{
	
	int age;
	String name;
	String mobile;
	String address;
	
	public static void main(String[] args){
		
		UserInfo user = new UserInfo(); 
		System.out.println(user.age);
		System.out.println(user.name);
	
	}

}

2.成员变量的特点

1)成员变量拥有默认值:
变量类型默认值
整数0
浮点数0.0
char’ ’
booleanfalse
其他类型null
2)成员变量在整个类中都有效,但一般放置在类头部

以下代码同样有效

public class UserInfo{
		
	public static void main(String[] args){
		
		UserInfo user = new UserInfo(); 
		System.out.println(user.age);
		System.out.println(user.name);
	
	}
	
	int age;
	String name;
	String mobile;
	String address;

}

3.成员变量的作用

用来详细描述对象信息

public class UserInfo{
	
	int age;
	String name;
	String mobile;
	String address;
	
	public static void main(String[] args){
		
		UserInfo wang= new UserInfo(); 
		wang.age = 12;
		wang.name = "王铁柱";
		wang.mobile = "15995448551";
		wang.address = "北京市海淀区";
		
	}

}

注:上述代码对成员变量的赋值比较繁琐,下面介绍另一种赋值方法:采用构造方法赋值


六、构造方法

1.构造方法结构

方法名是类名: 类名(参数列表){}

public class UserInfo{
	
	int age;
	String name;
	String mobile;
	String address;

	UserInfo(int n,String m,String a,String b){
		age = n;
		name = m;
		mobile = a;
		address = b;
	} //构造方法
	
}

2.构造方法的特点:

1)构造方法没有返回值部分(void 都不能有)
	UserInfo(int n,String m,String a,String b){}
2)一个类中默认有无参构造方法,当定义了一个有参构造方法时,则无参构造方法隐藏
3)构造方法不允许用final 和 static修饰
1)一个类中根据需要可以定义多个有参构造方法,是重载的体现

3.构造方法的调用

构造方法使用new来调用

注:当定义有参构造方法后将不能继续采用:类名 变量名 = new 类名() 继续创建对象(因为无参构造方法此时隐藏)
应采用:类名 变量名 = new 类名(实参列表) 的形式创建对象

public class UserInfo{
	
	int age;
	String name;
	String mobile;
	String address;

	UserInfo(int n,String m,String a,String b){
		age = n; //给成员变量赋值
		name = m; 
		mobile = a;
		address = b;
	} //有参构造方法
	
	public static void main(String[] args){
		
		//UserInfo wang= new UserInfo(); //无参构造方法,此代码此时应为报错 
		UserInfo wang= new UserInfo(12,"王铁柱","15995448551","北京市海淀区");  //采用new调用有参构造方法并向其传入实参
		
	}

}

4.构造方法的互相调用

目的:为了简化代码

1)构造方法中调用其他构造方法时的语法结构:

this(实参列表);

2)一个构造方法调用其他构造方法时必须将构造方法(即this(实参列表);)置于有效代码第一行

注:(1)一个构造方法只能调用一个其他构造方法(第二条决定),但被调用的构造方法可以继续调用另外的构造方法,即可层层调用
(2)一个构造方法可以调用参数比他少的构造方法,也可以调用比他多的构造方法(此时需要在参数列表里加上多出来的参数对应的实参,或默认值(推荐)),但不可以调用自己

public class UserInfo{
	
	int age;
	String name;
	String mobile;
	String address;

	UserInfo(int n,String m,String a,String b){
		this(n,m); //调用其他构造方法
		mobile = a;
		address = b;
	} //有参构造方法
	
	UserInfo(int n,String m){
		this(n);//调用其他构造方法
		name = m; 
	} //有参构造方法

	UserInfo(int n){
		age = n; //给成员变量赋值
	} //有参构造方法
	
	public static void main(String[] args){
		
		//UserInfo wang= new UserInfo(); //无参构造方法,此代码此时应为报错 
		UserInfo wang= new UserInfo(12,"王铁柱","15995448551","北京市海淀区");  //采用new调用有参构造方法并向其传入实参
		
	}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值