一、动手任务
-
创建对象,调用方法
public class Student {
String studentID;
String studentName;
String gender = "男";
int age;
String nation;
public String eat(String food) {
System.out.println("正在吃" + food);
return "好吃";
}
public void speak() {
System.out.println("大家好!");
}
public void bite(String name) {
System.out.println(name + ":被咬了");
}
public String bite(String school, String studentName) {
System.out.println(school + "学校的" + studentName + ":被咬了");
return studentName + "喊:疼啊!";
}
}public class Test {
public static void main(String[] args) {
Student student = new Student();
System.out.println("stu对象的属性:studentID的值是"+student.studentID);
System.out.println("stu对象的属性:studentName的值是"+student.studentName);
System.out.println("stu对象的属性:gender的值是"+student.gender);
System.out.println("--------------以上是属性,以下是方法");
student.speak();//调用speak方法
String eatResult = student.eat("烤鸡翅");
System.out.println("eat方法调用的结果是" + eatResult);
student.bite("杨孟");
String biteResult = student.bite("太原工业学院", "张荣");
System.out.println("bite方法调用的结果是" + biteResult);
}
}属性有默认值,默认值规则:整数和字符型默认位0,小数默认为0.0,布尔类型默认为false,引用类型默认为null
-
使用默认构造方法创建对象
-
什么是构造方法?名字和类名相同且没有返回类型
-
构造方法的作用是啥?与new配合创建对象,给对象的属性赋值
-
默认构造方法,如果在一个类里,程序员没有明确提供构造方法,JVM会自动提供一个默认的构造方法,默认构造方法没有形参,方法体为空。如果程序员明确提供了构造方法,JVM将不再提供默认的。
简而言之:如果我们没有,JVM会提供,我们有,JVM不再提供
// JVM默认构造方法
public class Person {
String name;
int age;
String nation;
public static void main(String[] args) {
// 使用默认的构造方法
Person p = new Person();
System.out.println(p.age);
System.out.println(p.name);
}
}
// 等价于以下代码public class Person {
String name;
int age;
String nation;
public Person() {
}
public static void main(String[] args) {
// 使用默认的构造方法
Person p = new Person();
System.out.println(p.age);
System.out.println(p.name);
}
}
public class Person {
String name;
int age;
String nation;
public Person() {
}
public static void main(String[] args) {
// 使用默认的构造方法
Person p = new Person();
System.out.println(p.age);
System.out.println(p.name);
}
} -
-
使用有参数构造方法创建对象
public class Person {
String name;
int age;
String nation;
public Person(String n,int a) {
name = n;
age = a;
}
public Person(String n, int a, String na) {
name = n;
age = a;
nation = na;
}
public static void main(String[] args) {
Person person1 = new Person("刘翔", 20);
System.out.println(person1.age);
System.out.println(person1.name);
System.out.println(person1.nation);
System.out.println("------------------------");
Person person2 = new Person("王志勇", 21, "广东");
System.out.println(person2.name);
System.out.println(person2.age);
System.out.println(person2.nation);
}
} -
从键盘接收数据
-
导入包:java.util.Scanner
-
类功能:用户输入两个整数,程序做加法和减法计算
public class Calc {
public int add(int num1, int num2) {
return num1 + num2;
}
public int sub(int num1, int num2) {
return num1 - num2;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入第一个数字");
int first = scanner.nextInt();
System.out.println("请输入第二个数字");
int second = scanner.nextInt();
Calc calc = new Calc();
int addResult = calc.add(first, second);
System.out.println("加法结果:" + addResult);
int subResult = calc.sub(first, second);
System.out.println("减法结果:" + subResult);
}
} -
二、代码分析
-
代码输出结果
public class Person {
String name;
int age;
String nation;
public Person() {
System.out.println("Person");
}
public void Person() {
System.out.println("123456");
}
public static void main(String[] args) {
Person p = new Person();
p.Person();
}
}
// 结果:
Person
123456 -
属性值的变化过程
public class Person {
String name;
int age=21;
String nation;
public Person(int a) {
age = a;
}
public static void main(String[] args) {
Person p = new Person(19);
System.out.println(p.age);
}
}
// age最初是0,变成21,最后是19
三、面试题
-
什么样的方法是构造方法?
名字和类名相同,且没有返回类型
-
能不能用对象调用构造方法?
不能,只能用new来调用构造方法
-
构造方法的作用是什么?
与new配合创建对象,给对象的属性赋值
-
属性的默认值规则?
整数和字符型默认为0,浮点型默认为0.0,布尔型默认为false,引用类型默认为null
-
属性值的变化过程?
默认值,显示赋值,构造方法赋值
-
一般方法名字能否和类名相同?
可以
四、任务
-
教务系统中需要计算学生年龄,设计学生类,提供计算年龄的方法,根据出生年份计算年龄。用户输入出生年份,程序输出年龄
public class StudentAge {
/**
* 根据出生年份计算年龄
* @param birth
* @return 计算得到的年龄
*/
public int calAge(int birth) {
GregorianCalendar gregorianCalendar = new GregorianCalendar();
int year = gregorianCalendar.get(Calendar.YEAR);
return year-birth;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入用户的出生年份");
int birth = scanner.nextInt();
StudentAge studentAge = new StudentAge();
System.out.println("用户今年" + studentAge.calAge(birth) + "岁了");
}
} -
编写并使用教务系统中的老师类Teacher,具体包括:
属性:教师工号,教师姓名,教师年龄,教师学历,教师职称,月薪。其中教师学历默认为"硕士",教师职称默认为”讲师“,月薪默认为3000;
提供3个构造方法,第一个不带参数,第二个对教师姓名和教师职称赋值;第三个对所有属性赋值。
提供3个一般方法,:
计算教师年龄的方法:参数是教师出生年份,返回值是教师年龄。计算教师工龄的方法:参数是教师入职年份,返回值是教师工龄
计算教师年薪:按13个月计算
编写程序,调用以上三个方法、
public class Teacher {
/**
* 教师工号
*/
int id;
/**
* 教师姓名
*/
String name;
/**
* 教师年龄
*/
int age;
/**
* 教师学历
*/
String education = "硕士";
/**
* 教师职称
*/
String professional = "讲师";
/**
* 教师月薪
*/
int sal = 3000;
public Teacher() {
}
public Teacher(String name, String professional) {
this.name = name;
this.professional = professional;
}
public Teacher(int id, String name, int age, String education, String professional, int sal) {
this.id = id;
this.name = name;
this.age = age;
this.education = education;
this.professional = professional;
this.sal = sal;
}
/**
* 计算教师年龄
* @param birth 教师的出生年份
* @return 教师年龄
*/
public int calAge(int birth) {
GregorianCalendar gregorianCalendar = new GregorianCalendar();
int year = gregorianCalendar.get(Calendar.YEAR);
return year - birth;
}
/**
* 计算教师工龄
* @param begin 入职年份
* @return 教师工龄
*/
public int calWorkYear(int begin) {
GregorianCalendar gregorianCalendar = new GregorianCalendar();
int year = gregorianCalendar.get(Calendar.YEAR);
return year - begin;
}
/**
* 计算教师的年薪
* @return 教师年薪
*/
public int calYearSal() {
return this.sal * 13;
}
public static void main(String[] args) {
Teacher teacher1 = new Teacher();
int