Java第三次实验
1. 本章学习总结
这份是Java第3次实验提纲,聚焦面向对象1的基本概念与继承基础。,还有PTA相关任务,像构造方法与toString、构造方法与初始化块的编程题,程序填空、编程题、函数题,以及使用jar包(调用外部jar包),另外也涉及IDEA的使用。
2. 书面作业
2.1 构造方法与toString
点击查看代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
Person[] persons = new Person[n];
for (int i = 0; i < n; i++) {
String name = scanner.next();
int age = scanner.nextInt();
boolean gender = scanner.nextBoolean();
persons[i] = new Person(name, age, gender);
}
for (int i = n - 1; i >= 0; i--) {
System.out.println(persons[i]);
}
Person p = new Person();
System.out.println(p);
scanner.close();
}
}
class Person {
private String name;
private int age;
private boolean gender;
private int id;
public Person() {
System.out.println("This is constructor");
System.out.println(name + "," + age + "," + gender + "," + id);
}
public Person(String name, int age, boolean gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
public String toString() {
return "Person [name=" + name + ", age=" + age + ", gender=" + gender + ", id=" + id + "]";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public boolean isGender() {
return gender;
}
public void setGender(boolean gender) {
this.gender = gender;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
点击查看代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
Person[] persons = new Person[n];
for (int i = 0; i < n; i++) {
String name = scanner.next();
int age = scanner.nextInt();
boolean gender = scanner.nextBoolean();
persons[i] = new Person(name, age, gender);
}
for (int i = n - 1; i >= 0; i--) {
System.out.println(persons[i]);
}
Person p = new Person();
System.out.println(p);
scanner.close();
}
}
class Person {
private String name;
private boolean gender;
private int age;
private int id;
private static int count = 0;
static {
System.out.println("This is static initialization block");
}
{
this.id = count++;
System.out.println("This is initialization block, id is " + this.id);
}
public Person() {
System.out.println("This is constructor");
System.out.println(name + "," + age + "," + gender + "," + id);
}
public Person(String name, int age, boolean gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
public String toString() {
return "Person [name=" + name + ", age=" + age + ", gender=" + gender + ", id=" + id + "]";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public boolean isGender() {
return gender;
}
public void setGender(boolean gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
点击查看代码
public Rectangle() {
this(5, 6);
}
public Rectangle(int width, int length) {
this.width = width;
this.length = length;
}
public String toString() {
return String.format("width=%d,length=%d", this.width, this.length);
}
点击查看代码
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Rectangle[] rectangles = new Rectangle[2];
for (int i = 0; i < 2; i++) {
int width = scanner.nextInt();
int length = scanner.nextInt();
rectangles[i] = new Rectangle(width, length);
}
Circle[] circles = new Circle[2];
for (int i = 0; i < 2; i++) {
int radius = scanner.nextInt();
circles[i] = new Circle(radius);
}
int totalPerimeter = 0;
int totalArea = 0;
for (Rectangle rect : rectangles) {
totalPerimeter += rect.getPerimeter();
totalArea += rect.getArea();
}
for (Circle circle : circles) {
totalPerimeter += circle.getPerimeter();
totalArea += circle.getArea();
}
System.out.println(totalPerimeter);
System.out.println(totalArea);
System.out.println(Arrays.deepToString(rectangles));
System.out.println(Arrays.deepToString(circles));
scanner.close();
}
}
class Rectangle {
private int width;
private int length;
public Rectangle(int width, int length) {
this.width = width;
this.length = length;
}
public int getPerimeter() {
return 2 * (width + length);
}
public int getArea() {
return width * length;
}
@Override
public String toString() {
return "Rectangle [width=" + width + ", length=" + length + "]";
}
}
class Circle {
private int radius;
public Circle(int radius) {
this.radius = radius;
}
public int getPerimeter() {
return (int)(2 * Math.PI * radius);
}
public int getArea() {
return (int)(Math.PI * radius * radius);
}
@Override
public String toString() {
return "Circle [radius=" + radius + "]";
}
}
点击查看代码
class Fraction {
private int numerator;
private int denominator;
public Fraction(int a, int b) {
this.numerator = a;
this.denominator = b;
simplify();
}
private int gcd(int a, int b) {
return b == 0 ? a : gcd(b, a % b);
}
private void simplify() {
if (numerator == 0) {
denominator = 1;
return;
}
int g = gcd(Math.abs(numerator), Math.abs(denominator));
numerator /= g;
denominator /= g;
if (denominator < 0) {
numerator = -numerator;
denominator = -denominator;
}
}
public double toDouble() {
return (double) numerator / denominator;
}
public Fraction plus(Fraction r) {
int newNumerator = this.numerator * r.denominator + r.numerator * this.denominator;
int newDenominator = this.denominator * r.denominator;
return new Fraction(newNumerator, newDenominator);
}
public Fraction multiply(Fraction r) {
int newNumerator = this.numerator * r.numerator;
int newDenominator = this.denominator * r.denominator;
return new Fraction(newNumerator, newDenominator);
}
@Override
public String toString() {
if (denominator == 1) {
return String.valueOf(numerator);
}
return numerator + "/" + denominator;
}
}
掌握static属性、初始化块(静态/非静态)执行时机;理解this关键字、toString方法用法;体会多态对代码扩展性的作用,以及抽象类、ArrayList、Objects工具类的应用。学会在IDEA中打包jar包,及在其他项目中导入并调用其中类的方法;了解类的访问权限对jar包使用的影响。通过实验巩固了Java类与对象核心概念,掌握了jar包工程化操作,为后续开发奠定基础。