Fundamentals
Function
- 函数是完成一个task的一段代码。
- 返回类型:不返回任何的值的,写为void
- 括号里写传给函数的参数parameters
- 花括号:左括号放在同一行
- 每个Java program至少有一个函数:main,main是程序的entry point
- class:函数总是被class包起来。class是一个容器,放related functions
- package: group related classes
- method: 方法是类中的一个函数。 method is a function that is part of a class
- access modifier:所有的类和方法都有一个access modifier。比如public,private等。
-
命名
public class Main {
public void main() {
}
}
第一个项目
IntelliJ,创建新项目,Java
选择对应的project JDK
create project from template
首行表示这个class属于哪个包
JAVA代码,分号结束
System是一个Class,属于java.lang包
out:是一个field,这个filed的类型是PrintStream,printstream是一个类。
println:method
System.out.println(“”Hello!)
Run 绿色三角
快捷键:ctrl+R
如何执行
两个步骤,编译和执行。
编译:IntelliJ用Java编译器来编译代码;Java编译器随Java开发工具包(JDK)一起提供
intelliJ,打开终端;
javac Main.java
可以看到Main.class
intelliJ实际编译结果在out文件夹
Main.class是byte code,在任意平台都可以运行,只要有JRE(Java Runtime Environment)
执行
JRE里有JVM。
因此我们可以在windows写java,但在mac上面执行。C sharp和python也是类似的。
如何调用JVM?
进入src路径,java full path to main class file
java com.codewithmosh.Main
可以执行Main.java
Types
- Primitives:保存简单的值:数字,字符和布尔值
-
Reference Types:复杂的,比如邮件信息,date
声明变量
- 在读取一个变量之前需要初始化变量
- 单个字符用单引号,字符串用双引号
- Java默认整数是int类型,如果要long 类型,需要在后面加L
- Java默认小数是double类型,如果要float,需要加F
byte age = 30;
long viewsCount = 3_123_456L;
float price = 10.99F;
char letter = ‘A’;
boolean isEligible = true;
Reference Types:
这些types不直接将actual objects存入memory。他们将object的referenct(地址)存入memory。
需要new来分配内存。
这里的now是date class的一个实例,继承了date的所有methods
Date now = new Date();
Primitive VS Reference:
byte x = 1;
byte y = x;
x和y存在memory的不同位置,相互独立。修改x的值,不会影响y。
point1和point2在内存中都是同一个地址,指向point object。修改point1,point2也会改变。
Point point1 = new Point(x:1,y:1);
Point point2 = point1;
point1.x = 2;
Strings
String message = new String("Hello World");
有更简洁的写法
String message = "Hello World";
Strings不能修改,所有修改Strings的方法返回的是一个新的Strings对象。
- startsWith(“a”)
- endsWith(“a”)
- length()
- indexOf(“a”) -1表示未找到
- replace(“a”, “b”)
- toUpperCase()
- toLowerCase()
- “aaa" + "bbb"
Array
array里面可以放任何类型的object,一个array中的elements需要是同一类型。
array有一个固定的长度,不能增加和删除元素。如果需要增加和删除,需要用collection classes。
// Creating and and initializing an array of 5 elements
int[] numbers = new int[3];
numbers[0] = 10;
numbers[1] = 20;
numbers[2] = 30;
// Shortcut :如果已知array的所有元素
int[] numbers = { 10, 20, 30 };
直接print numbers,会返回地址。
用Arrays 类的方法toString
int[] numbers = { 4, 2, 7 };
Arrays.sort(numbers);
String result = Arrays.toString(numbers);
System.out.println(result);
multi-dimensional Arrays
// Creating a 2x3 array (two rows, three columns)
int[2][3] matrix = new int[2][3];
matrix[0][0] = 10;
// Shortcut
int[2][3] matrix = {
{ 1, 2, 3 },
{ 4, 5, 6 }
};
System.out.println(Arrays.deepToString(numbers);
常量
大写字母来命名常量
final float INTEREST_RATE = 0.04;
计算表达式
int x = 10 / 3; // returns an int
float x = (float)10 / (float)3; // returns a float
int x = 10 % 3; // modulus (remainder of division)
Casting
byte>short>int>long>float>double
- Implicit:隐式
- Explicit:显示
// Implicit casting happens because we try to store a short
//value (2 bytes) in an int (4 bytes).
short x = 1;
int y = x;
// Explicit casting
int x = 1;
short y = (short) x;
将字符转为数字
Byte.parseByte(“1”)
Short.parseShort(“1”)
Integer.parseInt(“1”)
Long.parseLong(“1”)
Float.parseFloat(“1.1”)
Double.parseDouble(“1.1”)
Math 类
Math.round(1.1F)
int result = (int)Math.ceil(1.1F) //2 ceil返回double,需要显示cast为int
Math.floor(1.1F) //1
Formatting Numbers
NumberFormat类是抽象类,不能通过new来实例化
通过getxxx的factory method来创建实例
NumberFormat currency = NumberFormat.getCurrencyInstance();
String result = currency.format(“123456”); // $123,456
NumberFormat percent = NumberFormat.getPercentInstance();
String result = percent(“0.04”); // 4%
Reading Input
print() 不会打印换行符
Scanner scanner = new Scanner(System.in);
double number = scanner.nextDouble();
byte number = scanner.nextByte();
String name = scanner.next(); //只读一个词,空格之后不再读
String line = scanner.nextLine().trim(); //读整行
Mortgate 计算
月利率= 输入/12/100
Math.pow()
用常量而不是数字,便于阅读
Control Flow
逻辑运算符
&& AND
|| OR
!x NOT
IF
简化版:花括号可省略
声明的变量也能作于在它所在的code block中
所以因为hasHighIncome,if后面必须带花括号;但这样,这个变量就不能在block之外访问
因此最好在if之外创建变量
最简洁做法
将逻辑运算式用括号圈起来,方便阅读
String className = (income > 100_000) ? “First” : “Economy”;
Switch
FizzBuzz:
数字被5整除:Fize
数字被3整除:Buzz
被3,5整除:FizzBuzz
For Loop
for (int i = 0; i < 5; i++)
statement
While Loop
while (someCondition) {
…
if (someCondition)
break;
}
更常用 true和break 联用
do while loop
和while的区别在于,至少会执行一次
比较少用
break 结束loop
continue 结束当前loop,回到loop开始
for each
限制一:不能倒着访问
限制二:不能访问索引
mortgate:
principal (1k-1M)
rate (0-1)
year (1-30)
其他
sout:输出的快捷键
shift+f6:重命名
布尔变量命名: hasGoodCredit isEligible