简介:
先必须配置java的运行环境,所以先要安装jdk,我用的是jdk8,
编辑器我用的是editplus3编辑器,在window底下的命令窗口下编译的。
java运行环境jdk8和editplus3编辑器网盘链接:链接:https://pan.baidu.com/s/1TbFE2hHGiTMQ1HxtVfI1BQ
提取码:moev
复制这段内容后打开百度网盘手机App,操作更方便哦
1 java 的方法
1.1 什么是java 的方法
方法:就是为了完成某个功能而编写的一段代码.
例如:我们开始学习的System.out.println(“hello,world”) 语句中,println()
就是一个方法, 它的功能是在屏幕上打印信息, 如果你想在屏幕上打印, 就
调用该方法即可sc.next() 语句中, next() 就是方法, 可以从键盘上接收一
个字符串, 如果想要从键盘上接收字符串就调用该方法Math.random() 中
random() 就是一个方法, 它的作用是产生[0,1) 范围之内的随机小数
这些方法是SUN 公司已经定义好了, 我们直接调用就行
使用方法的优点:
可以使代码更加简洁
方便代码的修改
可以随意复用代码
1.2 自己定义一个方法
[修饰符] 方法返回值类型方法名( 参数类型参数1, 参数类型参数2…)
方法体, 就是方法要执行的代码说明:
-
- 方法修饰符: 访问权限修饰符pubilc, protected, private, abstract,
final, static 等
- 方法修饰符: 访问权限修饰符pubilc, protected, private, abstract,
-
- 返回值类型, 调用方法, 有时需要返回一个值, 方法返回值类型就是
方法返回值的类型; 如果方法没有返回值, 方法返回值类型使用void
表示
- 返回值类型, 调用方法, 有时需要返回一个值, 方法返回值类型就是
-
- 方法名, 程序员起的名字, 是一个动词,
-
- 方法参数, 方法在完成这个功能时, 可能需要从外部接收一些数据,
是通过参数来接收的
- 方法参数, 方法在完成这个功能时, 可能需要从外部接收一些数据,
-
- 方法体, 用一对大括弧括起来, 就是为了完成功能而编写的代码. 如
果方法需要返回一个值, 在方法体中通过return 语句返回
3
1.2.1 定义一个没有参数,没有返回值的方法
代码如下:
- 方法体, 用一对大括弧括起来, 就是为了完成功能而编写的代码. 如
/*
1)定义一个没有参数, 没有返回值的方法
*/
class Hjw11{
public static void main(String[] args) {
/*
直接调用自定义的printRose()方法
通过方法名来调用方法, 如果方法没有返回值,直接调用即可,作为一条独立语句
程序执行到这一行, 就会转到该方法的方法体中执行,方法体执行完毕后再返回到这儿继续向下执行其他代码
*/
printhjw();
printliu();
System.out.println("谢谢大家");
}
//注意:在类体中定义方法, 不能在一个方法体中定义另外一个方法
/*
定义方法在屏幕上打印喜欢的人
public 表示当前方法是公共的
static表示当前方法是静态的, 想在main方法中直接调用该方法,
因为main方法使用static修饰为静态的,所以main方法直接调用的其他方法也需要使用static修饰为静态的
void表示当前方法没有返回值
printhjw是方法名,
当前方法不需要接收参数,所以没有参数,但是小括弧不能省略
大括弧 中的语句就是方法体, 在屏幕上打印喜欢的人
注意:
当前只是定义了一个方法, 该段代码不会自动执行, 需要在main方法中调用它
*/
public static void printhjw(){
System.out.println("何");
System.out.println("佳"); //表示输出字符
System.out.println(" 玮");
}
public static void printliu(){
System.out.println("努力学习"); //表示输出字符
}
}
1.2.2 编译结果:
1.2.3 定义一个没有参数,有返回值的方法
代码如下:
class Hjw2 {
public static void main(String[] args) {
/*
调用liu()方法, 也是通过方法名调用
因为该方法返回一个[0,100)之间的整数, 可以定义一个变量来保存方法的返回值
*/
int num = liu(); //把liu()方法的返回值赋值给num
System.out.println( liu() ); //把liu()方法的返回值打印到屏幕上
//liu()方法使用static修饰为静态的, 可以通过类名直接调用
System.out.println( hjw2.liu() );
//调用hjw1类中的printhjw()方法
//在2类中调用1类的方法,编译时,需要先编译1.java源文件,再编译2.java源文件
Hjw11.printhjw(); //在2类中调用1类中的静态方法,只能通过类名调用
//printhjw(); //如果没有通过类名调用,表示该方法是当前类中定义的方法
// System.out.println( hjw1.printhjw() ); //printhjw()没有返回值,不能打印
System.out.println("Hello World!");
}
/*
定义方法返回一个[0,100)之间的随机整数
*/
public static int liu(){
/*
SUN公司定义了一个Math类, 在Math类中定义了一个static修饰的静态方法random()
可以通过Math类名调用该方法
Math.random()方法可以返回一个[0,1)之间的随机小数
可以定义一个局部变量来保存该方法返回的随机小数
*/
double xxx = Math.random();
//如果方法需要返回一个值,可以通过return语句
return (int)(xxx*100);
}
}
1.2.4 编译结果
1.2.5 定义一个有参数,有返回值的方法
代码如下:
class Hjw3 {
public static void main(String[] args) {
//调用liu()方法判断10是否为奇数,把结果打印
System.out.println( liu(10) ); //false
System.out.println( liu(11) ); //true
//把1~100之间的奇数进行累加
int sum = 0 ; //保存累加和
for( int num = 1; num <= 100; num++){
if( liu(num) ){
sum += num;
}
}
System.out.println("sum=" + sum);
}
//定义方法判断一个数是否为奇数,如果是奇数就返回true,不是奇数返回false
public static boolean liu( int num ) { //通过参数num来接收一个整数
if(num % 2 == 1 ){
return true;
}else{
return false;
}
}
}
1.2.6 编译结果
1.2.7 定义多个参数,有返回值的方法
代码如下:
class Hjw4 {
public static void main(String[] args) {
//调用方法, 计算10与20相加的和, 把和保存到result变量中
int result= sum(10,20);
/*注意:在定义方法时,如果方法指定了参数,在调用该方法时,需要传递相应的数据
传递的个数和定义时的参数个数要一样。传递数据的类型要与定义时的参数类型兼容
*/
System.out.println("result="+result");
}
//定义方法,返回任意两个整数和
public static int sum{int m,int n}{
return m+n;
}
}
1.2.8 编译结果
1.3 方法的形参与实参
在定义方法时, 指定的方法参数, 称为方法的形式参数, 简称为形参在调用方法时, 给方法传递的数据数据, 称为实际参数, 简称为实参注意:
- 在定义方法时, 声明的形参没有分配存储空间, 也没有值, 形参就相当
于一个点位符, 仅仅表示可以接收指定类型的数据 - 在调用方法时, 给形参分配存储空间, 把实参的值传递给形参
- 在调用方法时, 实参的个数/类型要与形参匹配
代码如下:
class Hjw5{
public static void main (String[]args){
int x=10;
int y=20;
swap(x,y);
System.out.println("x="+x+",y="+y);
}
//定义方法,实现两个整数的交换
public static void swap(int m,int n){
int t=m;
m=n;
n=t;
}
}
1.3.1 编译结果
1.4 方法重载
在同一个类中, 允许出现重名的方法, 要求方法的参数个数或者参数类型不同. 这就是方法重载在一个类中, 一般情况下, 相同的功能使用相同的方法名, 方便记忆与使用, 如: 不管在屏幕上打印整数, 小数, 布尔值, 还是字符串, 都调用System.out.println() SUN 在定义println() 方法时, 实现了方法的重载, 通过不同类型的参数来接收不类型的数据。
1.4.1 演示方法重载
代码如下:
/*
演载示方法重
1)在同一个类中, 相同的功能使用相同的方法名, 通过参数类型,或者参数个数实现方法重载
2)方法重载只跟参数类型与参数个数相关, 跟方法返回值类型,修饰符没有关系
3)方法重载,在编译阶段,就会确定要执行哪个方法
系统总是找最匹配的方法执行
*/
class MethodOverload {
public static void main(String[] args) {
sum( 10 , 20 ); //在调用方法时,如果传递两个int类型整数,系统会调用最匹配的方法执行
sum( 3.4 , 5.6);
sum( 1,2,3);
sum( 12, 3.5 ); //没有定义sum(int, double)方法, 系统会找兼容的sum(double, double)
System.out.println("Hello World!");
}
//计算两个整数的和
public static void sum( int x, int y ){
System.out.println("两个整数" + x + "+" + y + "=" + (x+y) );
}
//计算两个小数的和
public static void sum( double x, double y ){
System.out.println("两个小数" + x + "+" + y + "=" + (x+y) );
}
//计算三个整数的和
public static void sum( int x, int y , int z){
System.out.println("三个整数" + x + "+" + y + "+" + z + "=" + (x+y+z) );
}
}
1.4.2 编译结果
1.5 作业演示:定义一个方法,使其判断一个数是素数
/*
1)定义一个方法,判断一个数是否为素数
*/
class Hjw7{
public static void main(String[] args) {
boolean flag=hjw88(10);
System.out.println(flag);
//打印10——100之间的素数
for(int i=10;i<=100;i++){
if(hjw88(i)){
System.out.println(i);
}
}
}
//判断一个数是否为素数,如果是素数则返回true,不是素数返回false
public static boolean hjw88(int num){
//除了1和它本身之外不能被其他数整除的数就是素数
for (int x=2; x<num;x++){
if (num%x==0){
return false; //return一旦执行,当前方法会结束执行
}
}
return true;
}
}
1.5.1 编译结果
1.6 作业演示:定义方法返回两个整数的较大者;定义方法返回
两个小数的平均数
代码如下:
/*定义方法返回两个整数的较大者;
定义方法返回两个小数的平均数
*/
class Hjw8{
public static void main (String[] args){
System.out.println(max(10,20));
System.out.println(max(55.55,66.66));
System.out.println(liu(100,251));
System.out.println(liu(55.55,66.66));
}
//定义方法返回两个数的较大者
public static int max(int m,int n){
return m>n?m:n;
}
//定义方法返回两个小数的最小值
public static double max(double m,double n){
return m<n?m:n;
}
//定义方法返回两个整数的平均值
public static int liu(int m,int n){
return (m+n)/2;
}
//定义方法返回两个小数的平均值
public static double liu(double m,double n){
return (m+n)/2;
}
}
1.6.1 编译结果
1.7 作业演示:定义方法,返回某个指定日期对应这一年的第几
天
代码如下:
/*定义方法,返回某个指定日期对应这一年的第几天
*/
import java.util.Scanner;
class Hjw9{
public static void main (String[] args){
//从键盘输入日期
Scanner sc =new Scanner(System.in);
System.out.println("请按yyyy MM DD 格式输入日期");
int year=sc.nextInt();
int month=sc.nextInt();
int day=sc.nextInt();
int days=liu(year,month,day);
System.out.println(year+"年"+month+"月"+day+"日是"+year+"年的第"+days+"天");
}
//返回指定日期对应这一年的第几天
private static int liu(int year, int month, int day){
//2019 9 10
int sumdays = 0 ; //保存这个日期对应这一年的天数
//先把1月到month-1月这些整月的天数累加进来
for(int m = 1; m < month; m++){
sumdays += hjw(year, month); //当m为1时累加1月的天数, 当m为2时累加2月的天数,当m为3时就累加3月的天数...
}
//再把当月的天数累加进来
sumdays += day;
//返回总天数
return sumdays;
}
//定义方法, 返回指定月份的天数
private static int hjw(int year, int month) {
//当前方法指定了返回值类型为int, 该方法必须有return语句返回一个值
//如果month 传递20
switch ( month ){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31; //在case语句块中通过return返回一个数, 不需要再使用break了
// break;
case 4:
case 6:
case 9:
case 11:
return 30;
case 2:
if (isLeap(year)){
return 29;
}else {
return 28;
}
default:
return 0;//其余情况返回0天
}
// return 0;
}
//判断是否为闰年
public static boolean isLeap(int year){
/* if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0){
return true;
}
return false;*/
//如果能被4整除但是不能被100整除, 或者能被400整除
return year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
}
}
1.7.1 编译结果
1.8 方法递归调用
方法递归调用:即在方法体中又调用了方法本身递归调用主要确定两点:1) 找到规律;2) 确定结束条件
class Test01 {
public static void main(String[] args) {
System.out.println( factor(1) );
System.out.println( factor(2) );
System.out.println( factor(3) );
System.out.println( factor(4) );
System.out.println( factor(5) );
}
/*
定义方法,计算n!
6! = 1*2*3*4*5*6
5! = 1*2*3*4*5
4! = 1*2*3*4
3! = 1*2*3
2! = 1*2
1! = 1
规律:
n! = (n-1)! * n
*/
public static int factor( int n ){
if( n == 1 ){
return 1; }
//n不等于1的情况 f(n) = f(n-1) * n
return factor(n-1) * n; //在一个方法体中又调用了它本身, 称为递归调用
}
//计算 1+2+3+4+5+..+n的和
}
1.8.1 编译结果
总结:
java方法是后续的基础,必须学好,不然后续进行将非常困难。
有疑问可以留言!