Java学习小结:
- 个人觉得,学习一门编程语言,首先掌握它怎么编译运行的:
对Java来说,控制台上
javac 文件名;
java 类名; (后面不要加后缀)
便是它的运行方式。
- 写“Hello World”
了解感受一下这门语言的最简单的编写。
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
文件名为HelloWorld.java(必须与类名相同)
- 变量
定义方式:
int a, b, c; // 声明三个int型整数:a、 b、c
int d = 3, e = 4, f = 5; // 声明三个整数并赋予初值
byte z = 22; // 声明并初始化 z
String s = "runoob"; // 声明并初始化字符串 s
double pi = 3.14159; // 声明了双精度浮点型变量 pi
char x = 'x'; // 声明变量 x 的值是字符 'x'。
特别重要的,理解Java中三种变量类型:
- 类变量(又叫静态变量):方法之外,类中的变量,用 static 修饰。是属于类的变量。静态变量在第一次被访问时创建,在程序结束时销毁。有默认值。
- 实例变量(又叫成员变量):方法之外,类中的变量,不过没有 static 修饰。是属于实例化对象的变量。实例变量在对象创建的时候创建,在对象被销毁的时候销毁。有默认值。
- 局部变量:类的方法中的变量。是属于对象的方法的变量。在方法、构造方法、或者语句块被执行的时候创建,当它们执行完成后,变量将会被销毁。无默认值。
- 循环结构、条件语句
比如for循环、if{}else{}语句等,和C语言差不多,有C基础的小伙伴掌握起来应该很容易。 - 流(Stream)、文件(File)和IO
- Java面向对象编程。
这里就不过多赘述了,想要继续学习的小伙伴推荐一个网站:菜鸟教程,很多编程语言我都是在上面学的,内容很丰富齐全,有兴趣的同学可以去上面继续学习。
最后说一说我个人学习编程语言的体会:
学习语言不是像学习数学、计算机组成原理等那些理论性强的东西,语言是要拿来用的,是实践性的东西。因此不要单单去看,最好的学习方法是自己做个项目,在项目中遇到不懂的再去查资料,理解,自己动手实践的东西理解得最深刻。
附上自己练习用的一个小项目,供大家参考:
- Player.java
import java.io.*;
import java.util.Scanner;
import java.util.InputMismatchException;
import java.util.Date;
public class Player{
int playerId;
String playerName;
BufferedReader br1 = new BufferedReader(new InputStreamReader(System.in));
Scanner inputInt = new Scanner(System.in);
public Player() throws InputMismatchException{
try{
System.out.println("请输入人物名称:");
String name = br1.readLine();
System.out.println("请输入人物ID号:");
int id = inputInt.nextInt();
this.playerId = id;
this.playerName = name;
}catch(IOException e){
System.out.println(e.toString());
System.out.println("输入出现异常!");
}catch(InputMismatchException n){
System.out.println("输入值必须是数值!");
n.printStackTrace();
throw new InputMismatchException();
}
}
public void setPlayer(int id, String name){
this.playerId = id;
this.playerName = name;
System.out.println("你好,我是你新创建的人物。");
System.out.println("我叫:" + this.playerName);
System.out.println("我的id号是:" + this.playerId);
}
protected void run(){
System.out.println("我要跑了!");
}
protected void timeKeeping(){
Date date = new Date();
System.out.println("现在的时间是:");
System.out.printf("%tc\n",date);
}
protected void fileWriter(){
System.out.println("请输入要让我写入的文件路径及名称:");
try{
/* 以下三行,先开一个文件,再用该文件开一个(输入/输出)流,再用该流开一个用于(用字符流)写入的对象。同理下面的Reader也是如此 */
/* 其中前两行可以合并成一行:FileOutputStream fos = new FileOutputStream("./a.txt",true);当然这是在直到文件路径的情况下,如果要自定义一个文件名,则必须按照下面的3段式来写,否则Java会把""里的东西当初路径来解析 */
File f = new File(br1.readLine());
FileOutputStream fos = new FileOutputStream(f,true); //不覆盖原有内容
//FileOutputStream fos = new FileOutputStream("br1.readLine()",true); //不能这样写,否则当前目录下会出现一个br1.readLine()的文件或目录
OutputStreamWriter osWriter = new OutputStreamWriter(fos,"UTF-8");
System.out.println("要写入的数据是:");
osWriter.append(br1.readLine());
System.out.println("写入完毕!请继续操作,您想让我干啥?");
osWriter.close(); //最后关的时候要从里到外依次关,后开的先关
fos.close();
}catch(IOException e){
System.out.println("IO流异常!");
e.printStackTrace();
}catch(Exception e){
System.out.println("出现异常!");
e.printStackTrace();
}
}
protected void fileReader(){
System.out.println("请输入要让我读取的文件路径及名称:");
try{
File f = new File(br1.readLine());
FileInputStream fis = new FileInputStream(f);
InputStreamReader isReader = new InputStreamReader(fis,"UTF-8");
StringBuilder sb = new StringBuilder();
while(isReader.ready()){ //读取只能一个字符一个字符的读取
sb.append((char)isReader.read());
}
System.out.println("文件里的数据是:" + sb.toString());
System.out.println("请继续操作。您想让我干啥");
isReader.close();
fis.close();
}catch(IOException e){
System.out.println("IO流异常");
e.printStackTrace();
}catch(Exception e){
System.out.println("出现异常!");
e.printStackTrace();
}
}
}
- SmallGame.java
import java.util.Scanner;
import java.io.*;
import java.util.InputMismatchException;
public class SmallGame{
public static void main(String[] args){
System.out.println("欢迎来到小游戏!");
System.out.println("请输入(开始/退出)游戏:");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
try{
StringBuilder str = new StringBuilder (br.readLine());
while(true){
if ((str.toString()).equals("开始")){
Player player1 = new Player(); //此时如果这个方法抛出异常,则会被下面的catch捕获,后面的语句就不会执行了。如果不catch的话,则抛出的异常会在终端上输出,但由于main函数本身没有catch异常,因此下面的语句依旧会继续执行。理解try,throw,throws,catch间的关系。而且throw、throws只能跟在方法后面,类不能抛出异常,类如果抛出异常,那理论上所有的类都能抛出异常,那最后一个类(包含main函数的)抛出的异常要由谁来接收?
System.out.println("请创建一个人物。");
player1.setPlayer(player1.playerId,player1.playerName);
System.out.println("您想让人物做什么?(跑/报时/读入文件/写入文件/退出游戏)");
label:while(true){
str.replace(0,str.length(),br.readLine());
switch (str.toString())
{
case "跑":
player1.run();
break;
case "报时":
player1.timeKeeping();
break;
case "写入文件":
player1.fileWriter();
break;
case "读入文件":
player1.fileReader();
break;
case "退出游戏":
break label;
default :
System.out.println("输入有误,请重新输入!");
}
}
player1.br1.close();
player1.inputInt.close();
System.out.println("游戏将退出!");
break;
}else if((str.toString()).equals("退出")){
break;
}else{
System.out.println("输入有误,请重新输入");
str.replace(0,str.length(),br.readLine()); //用readLine方法可以重复读取输入
}
}
}catch(IOException e){ //不管怎么样,有io类出现的必须catch异常
System.out.println("输入出现异常!");
e.printStackTrace();
}catch(InputMismatchException n){
System.out.println("退出!");
}finally{
try{
br.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
}