1、return语句后面不能跟break语句
2、如果方法有返回值的情况下,所有的分支都必须有返回值
3.四种类型:
(1)无返回值无参数
void fun(){
}
(2)有返回值无参数
int fun() {
int a=1;
return a;//a与返回值类型相同
}
(3)无返回值有参数
void fun(int a,String b) {
}
(4)有返回值有参数
int fun(int a,String b) {
return a;//a与返回值类型相同
}
4、成员变量和局部变量:
(1)成员变量:
类之中,方法之外
作用范围为当前类{ }
class A{//类
String time;//成员变量
String shape;//成员变量
}
(2)局部变量
方法之中或方法的参数
作用范围为当前方法
class A{//类
String time;//time为成员变量
void ding(String name){
String s1="初始时间为:";//s1为局部变量
String message=name+time+s1;//message、name也为局部变量
//name在前面进行过string定义
}
5、方法调用
(1)形参是创建方法时定义,实参是调用方法时传递
(2)实参形参不相关,只是进行值的传递
(3)形参可以多个,实参需要相对应-个数、类型都要对应
6、成员方法和构造方法
(1)成员方法:1.参数 2.返回类型
模板:返回值类型 函数名(参数){}
eg:int Coffee(int a,int b) {return 0;}
(2)构造方法:参数
模板:public Coffee(String a) {}
eg:Duck myDuck=new Duck();//实例化一只鸭子
new Duck-实际在调用的-构造函数
package test3;
import java.io.PrintStream;
import java.io.UnsupportedEncodingException;
public class test15 {
public static void main(String[] args) throws UnsupportedEncodingException {
D a = new D();// 3.new实例化对象时候,调用构造方法
D a1 = new D("咖啡冻");
D a2 = new D(8);
D a3 = new D("咖啡冻", 8);//如果想要集合,则需要将其重新写一个a3
}
}
//1.定义一个Dog类
class D {
// 2.自定义一个构造方法 类名([参数]){}
// 构造方法1-无参数构造方法
D() throws UnsupportedEncodingException {
PrintStream ps = new PrintStream(System.out, true, "UTF-8");
ps.println("实例化一个D");
}
// 构造方法2-有参数构造方法-string
D(String name) throws UnsupportedEncodingException {
PrintStream ps = new PrintStream(System.out, true, "UTF-8");
ps.println("实例化一个叫" + name + "的D");
}
// 构造方法3-有参数的构造方法-int
D(int age) throws UnsupportedEncodingException {
PrintStream ps = new PrintStream(System.out, true, "UTF-8");
ps.println("实例化一个生产时间为" + age + "年的D");
}
// 构造方法4-有参数构造方法集合
D(String name, int age) throws UnsupportedEncodingException {
PrintStream ps = new PrintStream(System.out, true, "UTF-8");
ps.println("实例化一个生产时间为" + age + "年,名字为" + name + "的D");
}
}
7、方法的重载
方法重载条件:
(1)方法名相同
(2)参数不同:可以是 参数个数不同、参数数据类型不同、不同数据类型的参数顺序不同
注:方法重载与方法的返回值类型、参数名都无关
package test3;
//举个例子(方法重载和成员方法和构造方法
public class test16 {
public static void main(String[] args) {
Coffee a=new Coffee();
}
}
class Coffee{
//构造方法
public Coffee() {}
public Coffee(int a) {}
public Coffee(int c) {}//因为只是参数名不同-a->c,所以不是方法重载
public Coffee(int a,int b) {}
public Coffee(int b,int a) {}//同一数据类型int,前后顺序不同,也不是方法重载
public Coffee(String a) {}
public Coffee(String a,int b) {}
public Coffee(int b,String a) {}
//成员方法
void Coffee() {}
void Coffee(int a) {}
int Coffee(int a,int b) {return 0;}
int Coffee(int b) {return 1;}//return不同,不能改变不是方法重载本质
}
题目练习:
一、学生卡类
定义表示学生卡的类,类名为StudentCard,属相包含:卡号、学号、学生姓名、余额等属性,编写两个带参的构造方法,一个构造方法实现给四个属性赋值,另外一个构造方法实现给卡号、学号和学生姓名三个属性赋值,编写一个方法,实现输出学生卡的基本信息的功能。编写主类使用StudentCard类创建对象,分别调用两个构造方法,创建两个学生卡,并调用对象的方法输出学生卡的信息。
【输出形式】
调用两个对象的输出学生卡基本信息功能方法,输出每个学生的基本信息,形式为卡号,姓名,学号,余额
【样例输出】
201800623,zhangxiaohua,20151250623,0 201800625,zhanghuahua,20151250601,100.00
//注;这道题我还没弄懂怎么添加两个卡,一个卡是可以的,但是两个卡就报错qwq
//让我再学习一下,再补充完善
package test3;
import java.io.PrintStream;
import java.io.UnsupportedEncodingException;
//实验五 作业题目
public class test17 {
public static void main(String[] args) throws UnsupportedEncodingException {
StudentCard a = new StudentCard();
StudentCard a1 = new StudentCard("201800623", "zhangxiaohua", "20151250623", 0);
}
}
class StudentCard {
StudentCard() {
String card;// 卡号
String number;// 学号
String name;// 学生姓名
double money;// 余额
}
StudentCard(String card, String number, String name, double money) throws UnsupportedEncodingException {
PrintStream ps = new PrintStream(System.out, true, "UTF-8");
ps.println(card + "," + number + "," + name + "," + money);
}
}
【问题描述】
public class Register {
public static void main(String[] args) throws UnsupportedEncodingException {
//用户类 对象名 = new 用户类();
//接收用户名 密码 手机号——控制台 scanner接收
//int a = 对象名.register();
// a 1 **用户注册成功 0**用户注册失败
}
}
//1.定义一个用户类
/* 用户名
* 密码
* 手机号
* 注册-行为 函数 int register(参数){
用户名赋值
密码赋值
手机号赋值
* }
*/
【输入形式】
用户名
密码
手机号
【输出形式】
** Register Success
【样例输入】
zhangsan
1234
122222
【样例输出】
zhangsan Register Success
补充:
输入输出·
//输入
Scanner sc = new Scanner(System.in, "utf-8");
PrintStream ps = new PrintStream(System.out, true, "utf-8");
//输出
PrintStream ps = new PrintStream(System.out, true, "utf-8");
System.out.println(color + shape + weight + "的闹钟,正在响铃");
题目解答:
package test3;
import java.io.PrintStream;
import java.io.UnsupportedEncodingException;
import java.util.Scanner;
public class test18 {
public static void main(String[] args) throws UnsupportedEncodingException {
U a1 = new U();// 用户类 对象名=new 用户类();
Scanner sc = new Scanner(System.in, "utf-8");// 接受收用户名等
a1.a = sc.nextInt();
a1.name = sc.next();
a1.phonenumber = sc.next();
a1.passworld = sc.next();
a1.ding(null, null, null);
}
}
class U {
int a;
String name;
String passworld;
String phonenumber;
void ding(String name, String passworld, String phonenumber) throws UnsupportedEncodingException {
if (a == 1) {
PrintStream ps = new PrintStream(System.out, true, "utf-8");
ps.print(name + "Register Success");
} else {
if (a == 0) {
PrintStream ps = new PrintStream(System.out, true, "utf-8");
ps.println(name + "Register false");
}
else {
PrintStream ps = new PrintStream(System.out, true, "utf-8");
ps.println("输入错误");
}
}
}
}
this关键字
this.name=name;
局部变量
static:
1.修饰成员变量
如果一个成员变量使用了static关键字,那么这个变量不再属于对象自己,而是属于所在的类。多个对象共享同一份数据。
static修饰成员方法:
一旦使用static 修饰成员方法,那么这就成为了静态方法。静态方法不属于对象,而是属于类的。
如果没有static关键字,那么必须首先创建对象,然后通过对象才能使用它。
如果有了static关键字,那么不需要创建对象,直接就能通过类名称来使用它。
静态方法推荐通过类名称进行调用
无论是成员变量,还是成员方法。如果有了static ,都推荐使用类名称进行调用
静态变量:类名称.静态变量
静态方法:类名称.静态方法()
注意:对于本类当中的静态方法,可以省略类名称
(如带类中main函数中调用自定义函数,可以省略类名称)
注意:
1、静态不能直接调用非静态。
原因:因为在内存当中是【先】有的静态内容,【后】有的静态内容
2、静态方法中,不能调用this
原因:this代表当前对象,通过谁调用的方法,谁就是当前对象
public class 类名称{
static{
//静态代码块
}
}
特点:当第一次用到本类时,静态代码块执行唯一的一次
静态内容总是优于非静态,所以镜头代码块比构造方法先执行
静态代码块的典型用途:
用来一次性地对静态成员变量进行赋值