Java基础学习第二章

Java基础学习第二章

前言

大家好啊,不知道大家觉得第一章难度怎么样,第一章虽然内容很基础,但全部都是要求牢牢掌握的,不然后期知识点多了,就很容混淆概念,所以大家一起加油吧!第一章的内容写的还有许多需要改进的地方,我今后也会多加把劲,与大家共同进步!

方法(Method)

Java 中的方法,在 c/c++ 称为函数,指的是同样的概念。java 中通常将用于实现特定功能的代码片段包含称为一个整体,这个整体称之为方法块,通常,将特定功能的方法块分离出来可以减少代码的编写,提高代码的可复用性。语法如下:

[修饰符] <返回值类型> 方法名 ([参数列表]){

			代码片段...;

}
例:

public void m(int i) {
		System.out.println(i);
		System.out.println("这里是m方法块");
	}
	public static void main(String[] args) {
		System.out.println("这里是主函数");
	}

本例中的 main 函数和 m 方法都是方法,不过主函数比较特殊,是一个程序的入口,程序的执行大多数情况都是由主函数开始的。

Java中的方法分类:

  • 有参数有返回值
  • 有参数无返回值
  • 无参数有返回值
  • 无参数无返回值

例如

    //	无参数无返回值
	public void show(){
		System.out.println("看这里");
	}
	//	有参数无返回值
	public void info(String name) {
		System.out.println("你的名字叫"+name);
	}
	//	无参数有返回值
	public int getAge() {
		return 17;
	}
	//	有参数有返回值
	public int sum(int a,int b) {
		return a + b;
	}

补充:在 java 里有三种注释方法,编译器是不会编译注释内的内容

	/**
	 * 文本注释
	 */
	
	/*
	 * 多行注释
	 */
	
	//单行注释

方法的调用

java 中对方法进行调用,首先要对对象进行实例化,将对象地址赋值给引用变量(因为在 java 中是无法直接进行对象的传递,只能进行变量值的传递,所以只能将地址传给引用变量),再利用引用变量对其进行调用,例:
引用变量.方法()

public class Test {
	public void m() {
		System.out.println("m方法被调用");
	}
	public static void main(String[] args) {
		//创建对象
		Test t = new Test();
		//方法的调用
		t.m();
	}
}

本例中,程序首先从 main 方法开始运行,创建了一个 Test 类型的对象,引用变量为 t ,在利用t引用变量对 m 方法进行调用。这里涉及到一部分偏底层的概念,若是无法完全理解,可以先将格式背下来,日后我们还会具体讲解。

变量传值问题

java 中只存在值传递,不存在引用传递的概念
例1:

public void m(int i) {
		i = 10;//为 i 赋值为 10
	}
	public static void main(String[] args) {
		int i = 1;//创建一个int整型数 i ,为 i 赋值为 1
		Test t = new Test();//创建对象
		t.m(i);//调用方法
		System.out.println("i="+i);//输出语句
	}

在这里我补充一点,可能很多初学者并不知到文中 System.out.println(“i=”+i); 语句是什么意思,这是一句输出语句,是将i的值输出,大家若是不理解就先将格式记下来即可

那么例1中,大家猜猜结果会是什么,i的值会是多少?

在这里插入图片描述

i 的值为1?而在代码里我们明明看到i被赋值为10,为什么输出结果为 1 呢?或许很多人会这么疑问,其实原因很简单,上面我们已经提到过java中只存在值传递,不存在引用传递的概念,所以在调用 m 方法的过程中,我们只是把i的值1传递给了 m 方法,而i本身是不会被传递过去的,希望大家能明白原理。

大家在把第一个例子理解清楚后,才能继续看第二个例子,不然很容易出现概念混淆,值得注意的是,大家对这个原理必须理解透彻,不能一知半解

例2:

public class Student {
	String name;
	public void setName(String name1){
		name = name1;
	}
	public String getName(){
	return name;
	}

}

//测试类
public class Test {
	public void m(Student s){
			s.setName("李四");//通过s引用变量调用setName方法
	}
	public static void main(String[] args) {
		Student s = new Student();//创建Student类
		s.setName("张三");//通过引用变量s调用setName方法
		Test t2 = new Test();//创建Test类
		System.out.println(s.getName()); //输出name值
		t2.m(s);//通过t2调用m方法
		System.out.println(s.getName()); //输出name值
	}
}

大家先不要看答案,思考下,两次输出分别是什么?

在这里插入图片描述

第一次输出的 name 值为 张三 ,第二次输出的 name 值为 李四

下面我为大家讲一下程序运行步骤:
首先从主函数进入,创建了一个Student对象,通过s引用变量调用setName 方法,将 “张三” 传递给 Student 对象,此时 name 的值为 “张三”,下一步,创建 Test 对象,在 t2 调用 m 方法前,已经输出 name 值,所以是 张三,之后通过 t2 调用 m 方法,并将引用变量的 s 的值传递给了 m 方法,所以 通过 s 变量(m 方法中的 s 变量与 main 方法中的 s 变量是相同的值,但是是两个不同的变量) 调用 setName 方法,于是 name 的值被修改为 李四 ,然后进行输出。所以两次输出结果,第一次为张三,第二次为李四。

运算符

java中的运算符,分为以下常用几类

  • 算术运算(+ - * / % ++ --)
  • 关系运算(> < == >= <= !=)
  • 逻辑运算(& | ! && || ^)

算术运算符中, + 与 - 没有任何变化, * 代表的是乘号, / 代表除号,两个整型数相除,得到的是另一个整型数,小数点后是不会进行计算了,% 是取余符号,得到的是除法式子中的余数,++ 和 - - 分别叫自增和自减,在自身基础上 +1 或 -1;
关系运算符中需要强调的是,java 中的等于是 “==” 而不是 “=” ,而 “=” 在 java 中的含义是赋值于,然后 “!=” 是不等于的意思。
逻辑运算符中,& 和 && ,只有在左右同时为 true 时, 结果为 true,| 和 || ,左右任何一方为 true 时,结果为 true, ! 为取反符号, ^ 异或符号,其主要是对两个操作数进行位的异或运算,相同去0 ,相反取 1。

另外的运算符号我以图片列出来,大家需要掌握,知道这些运算符是有什么作用

在这里插入图片描述

&和&&区别?
&:逻辑与,在进行运算时无论运算符左边的表达式结果是否为true,右侧的表达式依然会执行
&&:短路与,在进行运算时只要运算符左边的表达式结果为false,则右侧的表达式不再执行
任何类型的数据跟字符相加都会转换为字符串

表达式&语句块

表达式

表达式通常表示为运算符和运算数的结合,比如一个基本算数运算,一个赋值运算,对象调用方法,变量的声明都称之为表达式:

  • int i = 10;
  • a + b;
  • stu.getName();

表达式一般表示为一行语句

语句块

语句块一般为一系列表达式的集合,通常包裹在{}之间,也就是方法体,一个方法内部的内容也是属于语句块,条件分支,循环语句等都称之为语句块。

流程控制语句

java中一般都是从主方法开始从上往下依次执行,这被称为顺序结构,在实际情况中,还会有其他的执行方式,如:

1.条件分支语句
2.循环语句

条件分支语句

java中的条件分支分为两种类型:

  1. if…else…
  2. switch

**if…else…**分三种情况,分别为:
结构一

if(条件表达式){
	//条件表达式结果为 true 时执行
}

结构二

if(条件表达式){
	//条件表达式结果为 true 时执行
}else{
	//条件表达式为 false 时执行
}

结构三

if(条件表达式1){
	//条件表达式1为true时执行
}else if(条件表达式2){
	//条件表达式2为true时执行
}else{
	//以上条件表达式均为false时执行
}

补充:结构三中,else if 语句可以有任意多个,且判断顺序为从上往下,知道满足条件时执行。

在这里插入图片描述

if…else…实例

* 提供一个分数,根据分数的所在范围,显示成绩等级
* >=90:A+
* >=80:A
* >=70:B
* >=60:C
* <60:学渣
扩展:如果分数大于100或者分数小于0则输出 无效的分数
public class Demo1 {
public String getLevel(int score){
	String level = "";
    //容错处理
	if(score > 100 || score < 0){
	level = "无效的分数";
	}else if(score >= 90){
	level = "A+";
	}else if(score >= 80){
	level = "A";
	}else if(score >= 70){
	level = "B";
	}else if(score >= 60){
	level = "C";
	}else{
	level = "学渣";
	}
	return level;
	}
public static void main(String[] args) {
	Demo1 d = new Demo1();
	System.out.println(d.getLevel(65));
	}
}

switch语句

switch语句是另一种分支语句,一般用于对某些枚举值(确定的,少量的值)进行分支判断,语法为:

switch(值){
case 值1:
break;
case 值2:
break;

}
补充:通常switch(值)括号里的值只能为整型字符型字符串型枚举型,其中 break 为结束 switch 语句的意思,若是语句中没有 break 语句,则会导致程序会一直执行下去,无法在完成匹配后跳出 switch 语句。

实例
在平年的情况下,根据提供的月份返回该月份的总天数:

public class Demo2 {
public int getDayOfMonth(int m){
	int day = 0;
	switch(m){
	case 1:
	case 3:
	case 5:
	case 7:
	case 8:
	case 10:
	case 12:
	day = 31;
	break;
	case 2:
	day = 28;
	break;
	case 4:
	case 6:
	case 9:
	case 11:
	day = 30;
	break;
	}
	return day;
}
public static void main(String[] args) {
	Demo2 d = new Demo2();
	int day = d.getDayOfMonth(100);
	System.out.println(day);
	}
}

补充:在 switch 语句中,如果所有的 case 值都不满足条件,可以使用 default 关键字,意思是除上面 case 值以外的所有的选项。

结束语

今天就学到这里吧,内容有点多,大家需要多消化下,不要为了追求进度赶忙学习下一个章节,欲速则不达。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值