序
第一周情况
完成了Java编程与环境变量与编译器的安装,顺利完成了hello world 的输出。
对照C++基本了解其基本语法,选择,循环。
正在将以前的C++ C例题转换为JAVA代码
本周所遇到的问题
目前JAVA最令我耳目一新的是独有的数组机制,没有指针的概念,不需要提前对对内存进行分配,感觉比C++很只能。
C++与Java的服务领域
我并不知道编程语言的服务领域。很早之前就听说C++适合干嘛干嘛,JAVA适合干嘛干嘛的。但是我在本周的学习中,我并不能区分这两种语言的领域
下周计划
下下周要出去旅游,加快Java的学习速度
六月二十五日
安装了JDK和eclipse,用javac命令和java命令进行编译和运行java
写了经典代码
public class HelloWorld
{ public static void main(String[] args)
{ System.out.println("HelloWorld"); } }
在Java中,主函数实在类中,这一点与C++相去甚远。刚开始认为Java中没有了主体,都是一个个类组成,那么只有顺序执行了。
这一点就令我很疑惑
六月二十六日
带着昨天的疑惑,我去翻译C++的代码,将其翻译为Java的代码再去考虑Java的代码规则
public class Factorial { public static void main(String[] args) { int number = 5; // 要计算阶乘的数字 long factorial = calculateFactorial(number); System.out.println(number + " 的阶乘是: " + factorial); } public static long calculateFactorial(int n) { if (n == 0) { return 1; } else { return n * calculateFactorial(n - 1); } } }
一个简单计算阶乘的程序,我才了解到类中可以在加类,这里的类与C++中的不同,似乎相当于函数。
将类看作是函数,Java的代码就清晰很多了,与C++相似的语言也另我亲切不少。
六月二十七日
通过进一步了解JAVA,发现一个非常智能的规则。在Java中数组可以存储任何类型的数据对象,将C++中list容器的优点结合在一起。并且数组中可以实现动态大小,并且可以随时知道数组的长度。
既然Java数组中不再具有只能存储单一类型数据,那么迭代器与指针就没有区别。Java中就不再需要指针。我认为这个设点非常智能
在Java中,数组还具有各种各样的函数,可以进行各种功能,并且不需要头文件进行预编译,节省了时间。
以下是一些常见的Java数组操作代码的示例: 1. 声明和创建数组: int[] numbers = new int[5]; // 声明并创建长度为5的整数数组 String[] names = {"Alice", "Bob", "Charlie"}; // 声明并使用初始值创建字符串数组 2. 访问数组元素: int firstNumber = numbers[0]; // 获取数组的第一个元素 String lastName = names[2]; // 获取数组的第三个元素 3. 修改数组元素: numbers[1] = 10; // 修改数组的第二个元素为10 names[0] = "Alex"; // 修改数组的第一个元素为"Alex" 4. 获取数组长度: int length = numbers.length; // 获取数组的长度 5. 遍历数组: for (int i = 0; i < numbers.length; i++) { System.out.println(numbers[i]); // 遍历并打印数组元素 } for (String name : names) { System.out.println(name); // 使用 foreach 循环遍历并打印数组元素 } 6. 多维数组操作: java int[][] matrix = {{1, 2, 3}, {4, 5, 6}}; // 声明并使用初始值创建二维数组 int element = matrix[1][2]; // 访问二维数组的元素 matrix[0][1] = 10; // 修改二维数组的元素 7. 使用 `Arrays` 类进行排序和搜索: int[] numbers = {5, 3, 7, 1, 9}; Arrays.sort(numbers); // 对数组进行排序 int index = Arrays.binarySearch(numbers, 7); // 在数组中搜索元素的索引
六月二十八日
根据C++的学习经验,选择,循环,数组与字符串,指针,类,文件的顺序
既然Java中的类类似与C++的函数,那么Java中的与C++类类似的是什么。我发现还是类,相当于推翻了我之前的判断。
Java中类的关联好像有着某种关系。似乎是不同的物品,通过一条线来串联。在C++中,都需要在类的本身中进行某种设定(抽象,虚拟)。
通过这个关联性,我初认为Java中的类更加灵活多样。但是java中的类只能进行单继承,一个类只能有一个父类,这无疑是大大降低了复杂性,歧义性。
并且Java中的内存管理是自动化的,相较于C++更失一些精细化
所以我最后认为C++中的类是更加灵活的
六月二十九日
继续学习类。
参考C++的构造函数,拷贝构造函数,析构函数,开始学习Java的类
1. 构造方法(Constructor):Java中的构造方法类似于C++的构造函数,用于创建对象并进行初始化。构造方法与类名相同,没有返回类型,并且可以有多个构造方法的重载。 public class MyClass { private int myNumber; // 无参构造方法 public MyClass() { // 构造方法初始化对象 myNumber = 0; } // 带参构造方法 public MyClass(int number) { myNumber = number; } } 2. 拷贝构造方法(Copy Constructor):Java中没有直接的拷贝构造方法,但可以通过克隆(Clone)接口来实现类似的功能。克隆接口(Cloneable)允许对象在内存中进行复制。 public class MyClass implements Cloneable { private int myNumber; public MyClass(int number) { myNumber = number; } // 克隆方法 public MyClass clone() throws CloneNotSupportedException { return (MyClass) super.clone(); } // 使用克隆方法创建新对象 public void copyObject(MyClass other) throws CloneNotSupportedException { MyClass newObj = other.clone(); // 复制对象的属性或其他操作 } } 3. 垃圾回收器(Garbage Collector):Java使用垃圾回收器来自动管理内存,无需手动调用析构函数进行对象的销毁。垃圾回收器会自动检测和回收不再使用的对象。Java提供了一个特殊的方法`finalize()`,用于在垃圾回收器回收对象之前进行清理操作。 public class MyClass { private int myNumber; public MyClass(int number) { myNumber = number; } // finalize 方法 protected void finalize() throws Throwable { // 在对象被回收之前进行清理操作 super.finalize(); } }
六月三十日
当开始学习Java的文件操作时,我又发现上面一个错误。Java中是存在标准库的,但是数组的一些操作函数似乎是本身具有的,不需要像C++中写库函数
但是在文件操作中,Java也需要写标准库
Java与C++的文件操作似乎有非常多的相似点,一样的流式操作,对文件创建,写入,读取,删除
创建文件: import java.io.File; import java.io.IOException; public class FileOperations { public static void main(String[] args) { try { File file = new File("myfile.txt"); if (file.createNewFile()) { System.out.println("文件创建成功!"); } else { System.out.println("文件已存在!"); } } catch (IOException e) { e.printStackTrace(); } } } 写入文件: import java.io.FileWriter; import java.io.IOException; public class FileOperations { public static void main(String[] args) { try { FileWriter writer = new FileWriter("myfile.txt"); writer.write("Hello, World!"); writer.close(); System.out.println("写入成功!"); } catch (IOException e) { e.printStackTrace(); } } } 读取文件: import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class FileOperations { public static void main(String[] args) { try { BufferedReader reader = new BufferedReader(new FileReader("myfile.txt")); String line; while ((line = reader.readLine()) != null) { System.out.println(line); } reader.close(); } catch (IOException e) { e.printStackTrace(); } } } 删除文件: import java.io.File; public class FileOperations { public static void main(String[] args) { File file = new File("myfile.txt"); if (file.delete()) { System.out.println("文件删除成功!"); } else { System.out.println("文件删除失败!"); } } }
七月一日
Java的基本语言已经明白,接下来开始写编程题了
与C++一样的思路,写题熟练一下Java的语法规则
1.(风扇类Fan)设计一个名为Fan的类来表示一个风扇。这个类包括:
三个名为SLOW、MEDIUM、FAST而值是1、2和3的常量表示风扇的速度。
一个名为speed的int类型私有数据域表示风扇的速度(默认值为SLOW)。
一个名为on的boolean类型的私有数据域表示风扇是否打开(默认值为false)。
一个名为radius的double类型的私有数据域表示风扇的半径(默认值为5)。
一个名为color的String类型的数据域表示风扇的颜色(默认值为blue)。
这四个数据域的访问器和修改器。
一个创建默认风扇的无参构造方法。
一个名为toString()的方法返回描述风扇的字符串。如果风扇是打开的,那么该方法在一个组合的字符串中返回风扇的速度、颜色和半径。如果风扇没有打开,该方法就返回一个由“fan is off”和风扇颜色及半径组合成的字符串。
实现这个类。编写一个测试程序,创建两个fan对象。将第一个对象设置为最大速度、半径为10、颜色为yellow、状态为打开。将第二个对象设置为中等速度、半径为5、颜色为blue、状态为关闭。通过调用它们的toString方法显示这些对象。
public class Fan_test { public static void main(String[] args) { Fan F1=new Fan(); Fan F2=new Fan(); F1.setSpeed(F1.FAST); F1.setRadius(10); F1.setColor("yellow"); F1.setOn(true); F2.setSpeed(F2.MEDIUM); F2.setRadius(5); F2.setColor("blue"); F2.setOn(false); System.out.println("第一个风扇:"); System.out.println(F1.toString()); System.out.println("第二个风扇:"); System.out.println(F2.toString()); } } class Fan { Fan() { speed =SLOW; on=false; radius=5; color ="blue"; } final int SLOW=1; final int MEDIUM=2; final int FAST=3; private int speed =SLOW; private boolean on=false; private double radius=5; String color ="blue"; //访问器 public int getSpeed() { return speed; } public boolean isOn() { return on; } public double getRadius() { return radius; } public String getColor() { return color; } //修改器 public void setSpeed(int speed) { this.speed = speed; } public void setOn(boolean on) { this.on = on; } public void setRadius(double radius) { this.radius = radius; } public void setColor(String color) { this.color = color; } public String toString() { if(this.on==true) { return "风扇的速度为:"+this.speed+" 风扇的颜色为:"+this.color+" 风扇的半径为:"+this.radius; } else { return "fan is off."+" 风扇的颜色为:"+this.color+" 风扇的半径为:"+this.radius; } } }
在知乎上面找的题目,最后对着答案进行修改完善