Java初识
**
构造方法与文件读取
前言
这个系列是根据B站UP主:刘二大人的“Java编程语言入门”的系列视频,将所讲的内容手打出来的( 类似课堂笔记 ),配合视频食用效果更佳。
PS:萌新第一次写博客,如发现了错误,请帮忙指出,万分感谢!最后,希望大家食用愉快,一起进步!
一、代码简介
分为4个类:FileMain,FileStudent,Main,Student
二、
##FileMain
代码如下:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
import java.util.Scanner;
public class FileMain {
public static void main(String[] args) throws IOException {
/*扔给了虚拟机*/
FileStudent[] students = null;
InputStream is = new FileInputStream("C:\\Users\\Dell\\Desktop\\Java尝试\\构造方法与文件读取\\Construction method and file reading\\.idea\\data\\info.txt");
/*路径分为绝对路径和相对路径
*前者是D盘中的路径
* 后者是Java里面的,如data\\info.txt
* 注意:一个\是反义字符,\\才是合法路径
* 注意:文件名可以因为打错等原因找不到,这里交给虚拟机即可
* */
Scanner scanner = new Scanner(is,"UTF-8");
// Scanner scanner = new Scanner(System.in);
/*InputStream 输入流
*我们把输入看做一个管道,scanner提供了相当复杂的字节流的解析功能
*键盘上,字符被一个个敲出来;同样的,文件也是一个字符流
* */
/*
*因为scanner读进来不一定是这个整数
* 因此我们最常见的方法是每次都读一行,然后一行行的进行解析
*
int x1 = scanner.nextInt();
int x2 = scanner.nextInt();
scanner.nextLine();
//在前面加一行,把回车干掉!
String s1 = scanner.nextLine();
System.out.println(x1);
System.out.println(x2);
System.out.println(s1);
//注意:nextLine()会把回车当做要读的一行
*/
/*最大的问题是怎样判断行数,我们可以看里面是否还有内容*/
//但下面的这个方法有一个不好的地方,我们只有等他跑完才知道有多少内容
//解决方法有两个,一个是使用集合类,可以不断的往里面添加元素,
//或者是在info.txt最前面加上行数
int count = Integer.valueOf(scanner.nextLine());
students = new FileStudent[count];//会自动调用默认的构造函数
/*
while (scanner.hasNext()) {
String line = scanner.nextLine();
String[] tokens = line.split(",");
//鼠标长时间停在split,可以看出第三行 public String[] split
//regex:regular expression
//System.out.println(tokens);
//上面会显示出数组,Arrays.toString的功能是把字符串数组转化成字符串,所以用
System.out.println(Arrays.toString(tokens));
//接下来把三个元素分开
String name = tokens[0];
int age = Integer.valueOf(tokens[1]);
double grade = Double.valueOf(tokens[2]);
//创建一个新对象
FileStudent student = new FileStudent(name,age,grade);
System.out.println(student.msg());
}
*/
for(int i=0;i<count;i++){
String line = scanner.nextLine();
String[] tokens = line.split(",");
//接下来把三个元素分开
String name = tokens[0];
int age = Integer.valueOf(tokens[1]);
double grade = Double.valueOf(tokens[2]);
//创建一个新对象
students[i] = new FileStudent(name,age,grade);
}
for(FileStudent stu:students){
System.out.println(stu.msg());
}
//FileStudent stu :students 增强for循环 students 是个集合 而stu就是遍历的每个学生实体类
is.close();
}
}
FileStudent
代码如下:
//目的是构造一组学生信息
public class FileStudent {
//字段也可以在这里进行初始化
private String name = "unnamed";
private int age = 0;
private double grade = 0.0 ;
public FileStudent(String name,int age,double grade){
this.name = name;
this.age = age;
this.grade =grade;
}
public FileStudent(){
}
public String msg(){
return "this student "+name+age+grade;
}
}
Main
public class Main {
public static void main(String[] args) {
Student student = new Student();
student.setName("Mike");
String name = student.getName();
System.out.println(name);
student.setName("Jack");
System.out.println(name);
//两次输出结果均为Mike,涉及引用
Student student1 = new Student("Mike",21,3.5);
Student Javk = new Student("Javk");
//如果构造函数只设立了name,其他的值会为0;
Student somebody = new Student();
//注意:如果咱们自己写了一个构造方法,编译器中那个全空的默认方法是不会再加上的
//故而,如果仍需使用那个方法,咱们可以自己在新建一个
}
}
Student
//这里留一个坑,package为什么重要后面说
public class Student {
//字段也可以在这里进行初始化
private String name;
//private String name = “unnamed”
private int age;
//private int age = 0;
private double grade;
//private double grade = 0.0 ;
//构造函数1,3个变量都有设置
public Student(String name,int age,double grade){
this.name = name;
this.age = age;
this.grade =grade;
}
//构造函数2
public Student(String name){
this.name =name;
}
//构造函数3
public Student (int age){
this.age =age;
this.name = "Jann";
this.grade = 3.6;
}
public Student (){
this.name = "unnamed";
this.age = 0;
this.grade = 0;
//结果为:unnamed,0,0
}
/*
public Student (){
}
//结果为:NULL,0,0
//默认的构造方法没有参数(构造方法也可以自定义)
*/
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
总结
我们都会有光明的未来!