第三章 java的基本程序设计结构
- 源代码的文件名必须与公共类的名字相同,并且都大写字母开头
-
System.out.println()
输出后换行,System.out.print()
输出后不换行 - 从java7开始可以为数字字面量加下划线如:1_000_000表示一百万
- 使用float和double会引入误差,如果不希望有任何误差则应该使用BigDecimal类
- 整型和布尔值不能相互转换(不同于C++)。例如if(x=0)不能通过编译,因为x为整型0,不能转换成if所需要的布尔值
- C++中区分变量的声明和定义,在java中不区分
- java移位运算符: >>>用0填充高位,>>用符号位填充高位
C++移位运算符: >>无法确定用什么填充的高位,所以右移位实际上是对非负数定义的 - 当一个字符串与一个非字符串进行拼接时,后者被转换成字符串,如下,b自动转换成了String类型
String a = "nihao";
int b = 10086;
String c = a + b; //=> 你好10086
-
==
运算符判断两个变量是否在内存同一位置上,而不是判断他们的内容是否相等 -
StringBuffer
支持多线程,但效率低;StringBuilder
仅支持单线程,但效率高,它们有相同的API - 屏幕读取输入
Scanner in = new Scanner(System.in)
String name = in.nextline(); //这里的nextline可以为nextInt、nextDouble等等
想以空格为分隔符读取一个单词就用in.next()
- 格式化输出,
System.out.printf(" Hello, %s. Next year, you'll be %d", name, age)
- 文件输出
String path = "C:\\Users\\Lang\\Desktop\\1.txt";
Scanner in = new Scanner(Paths.get(path));
while(in.hasNextLine())
{
System.out.println(in.nextLine());
}
- 文件写入
PrintWriter out = new PrintWriter(path);
out.println("test2");
out.close();
- java没有运算符重载的功能
-
for each
遍历,如
int[] a = {1,2,3,4};
for (int element: a)
System.out.println(element);
第四章 对象与类
- 在java中,任何对象变量的值都是对存储在另外一个地方的一个对象的引用。new操作符的返回值也是一个引用
- 在一个源文件中只能有一个公有类
public
,但可以有任意数目的非公有类protect,private
- JAVA和C++调用静态方法的不同,
C ++为 类名::StaticMethod
JAVA为 类名.StaticMethod - java中方法参数的重点理解:
一个方法不能修改一个基本数据类型的参数(即数值型和布尔型),因为传入时进行了形参到实参的复制
一个方法可以改变一个对象参数的值
一个方法不能让对象参数引用一个新的对象 - 如果类中提供了至少一个构造器,但是没有提供无参数的构造器,则在构造对象时使用无参数的构造器将被视为不合法,也就是说仅当类没有提供任何构造器的时候系统才会提供默认构造器
- 如果构造器的第一个语句形如
this(...)
,这个构造器将调用同一个类的另一个构造器。例如:
public Employee( double s )
{
// calls Employee( String, double )
this( "Employee #" + nextId, s);
nextId++;
}
- 类中实例域初始化的三种方式
- 在构造器中初始化
- 在声明时直接赋值
- 使用初始化块
- java的
import
和C++的#include
没有共同之处。在C++中必须使用include
将外部特性的声明加载进来,这是因为C++编译器无法查看任何文件的内部,除了正在编译的文件以及在头文件中明确包含的文件。java编译器可以查看其他文件的内部,只要告诉他到哪里去查看就行了。
在java中通过显示的给出包名,如java.util.Date
,就可以不用import
;而在C++中无法避免使用#include
import
的唯一好处是便捷。可以使用简短的名字而不是完整的包名来引用,其与C++的命名空间(namespace
)类似