继续学习:
5.偏头痛杨的Java入门教学系列之流程控制语句篇
详细的去看原文,这里分割线中摘录一些我觉得对新手比较重要的概念(也容易混淆)。
方法的种类
1.实例方法
属于每个实例的方法,必须使用对象来调用,方法前不要加static修饰。
2.类方法
属于类的方法,必须加static修饰,使用类名调用(当然类方法也可以使用实例调用,但是不建议这么做),为什么要用类名来访问一些方法呢?因为不耗费内存,不用创建实例。
3.构造方法/构造器(Constructor)
构造方法是一个类创建对象的根本途径,如果一个类没有构造方法,这个类通常无法创建实例。
因此如果程序员忘记定义构造方法的话,Java编译器将会为该类提供一个默认构造方法(无参的构造方法),一旦程序员已经定义了构造方法,则系统不再提供默认的构造方法。(注意:如果程序员定义了一个有参构造,系统也不再提供默认的无参构造)当然,如果你也想使用无参数构造方法,就可以自己手动写一个。
构造方法的作用
- 通过new关键字来调用某个类的构造方法,即可创建这个类的实例。在创建一个对象(类实例化成对象)的时候,至少要调用一个构造方法。
- 构造方法的作用是完成对象的创建,即完成对象的实例化,在构造方法中一般可以对成员变量进行初始化
构造方法的特点
- 构造方法的名称必须与类同名
- 一个类可以有多个构造方法(参数列表不同)
- 构造方法没有返回类型,不能return
- 构造方法可以设置为private即在外部无法调用该类的构造方法(单例模式)
方法的重载(overload)
- 方法的重载就是在同一个类中允许同时存在一个以上同名的方法。
- 方法名称相同,方法的参数必须不同,参数个数不同,参数类型不同,方法的返回值类型可以相同,也可以不同。
类变量与实例变量
类变量
- 也叫静态变量
- 说明类的属性
- 类变量声明在类中,方法体之外,必须声明为static类型
- 类变量在创建类时被初始化
- 类的所有示例变量在调用该变量的时候共享一块内存空间,可以类名直接调用,也可拿对象调用(不推荐)
实例变量
- 说明类的一个实例的属性
- 实例变量定义在类中,方法体之外,不声明成static类型
- 实例变量在创建对象的时候被初始化
- 类所有实例调用该变量的时候都开辟一块新内存,只能拿对象调用实例变量。
局部变量
- 在方法内、代码块内、形参中定义的变量被称为局部变量
- 所有局部变量均在方法的栈内存中存储
- 方法、代码块结束后,变量就会自动销毁。
- 部变量的作用范围越小,它在内存里停留的时间就越短,程序运行性能就越好。因此能用代码块局部变量的地方,就不要使用方法局部变量
- 访问修饰符不能用于局部变量
作业
- 编写一个方法,需要传1个整型变量作为参数,方法中先把参数输出,再判断参数为偶数就返回true,非偶数返回false。在main方法中调用该方法3次,分别传入参数为3、4、5,并将方法的返回值输出。
答:
代码:
package test;
import java.util.Scanner;
public class Getodd {
public static boolean judge(int tem) {
if(tem%2==0) {
return true;
}
else {
return false;
}
}
public static void main(String [] args) {
Scanner sc=new Scanner(System.in);
for(int i=1;i<=3;i++){
int tem=sc.nextInt();
boolean ans=judge(tem);
System.out.println("the"+i+" 's ans: "+ans);
}
}
}
输出:
3
the1 's ans: false
4
the2 's ans: true
5
the3 's ans: false
- 编写一个方法,需要传入2个整型变量作为参数,方法中返回数值较大的参数,在main方法中调用该方法几次,参数自定义,并将方法的返回值输出。
答:
代码:
package test;
import java.util.Scanner;
public class WhoIsMax {
public static int judge(int a,int b) {
if(a>b) {
return a;
}
else {
return b;
}
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
for(int i=0;i<3;i++) {
int a=sc.nextInt();
int b=sc.nextInt();
int ans=judge(a,b);
System.out.println("the max between "+a+" and "+b+" is "+ans);
}
}
}
输出:
2 3
the max between 2 and 3 is 3
5 8
the max between 5 and 8 is 8
99 22
the max between 99 and 22 is 99
- 编写一个方法,需要传入1个整型变量作为参数,方法中使用switch做判断,如果参数值为1则输出"星期一",如果参数值为2则输出"星期二",依此类推,如果参数值不在1-7的范围内则输出"参数错误",在main方法中调用该方法几次,参数自定义。
答:
代码:
package test;
import java.util.Scanner;
public class DateShow {
public static void judge(int tem) {
switch(tem) {
case 1:
System.out.println("Monday");
break;
case 2:
System.out.println("Tuesday");
break;
case 3:
System.out.println("Wednesday");
break;
case 4:
System.out.println("Thursday");
break;
case 5:
System.out.println("Friday");
break;
case 6:
System.out.println("Saturday");
break;
case 7:
System.out.println("Sunday");
break;
default:System.out.println("Wrong input!");
}
}
public static void main (String [] args){
Scanner sc=new Scanner(System.in);
for(int i=0;i<3;i++) {
int tem=sc.nextInt();
judge(tem);
}
}
}
输出:
3
Wednesday
5
Friday
9
Wrong input!
- 编写一个方法,打印出一个菱形(这道题比较难,不允许搜百度上的答案)。
*
***
*****
*******
*****
***
*
友情提示:
- System.out.println();输出是带换行的
- System.out.print();输出是不带换行的
- 需要使用嵌套for循环
- 一个循环输出空格,一个循环输出星号;一个循环输出换行
答:
代码:
package test;
import java.util.Scanner;
public class DrawPic {
public static void drawPic(int num) {
int half=num/2+1;
for(int i=0;i<half;i++) {
for(int j=0;j<half-1-i;j++) {
System.out.print(' ');
}
for(int k=0;k<2*i+1;k++) {
System.out.print('*');
}
System.out.println();
}
for(int i=0;i<half-1;i++) {
for(int j=0;j<i+1;j++) {
System.out.print(' ');
}
for(int k=0;k<num-2*(i+1);k++) {
System.out.print('*');
}
System.out.println();
}
}
public static void main(String [] args) {
Scanner sc=new Scanner(System.in);
int tem = sc.nextInt();
drawPic(tem);
}
}
输出:
17
*
***
*****
*******
*********
***********
*************
***************
*****************
***************
*************
***********
*********
*******
*****
***
*