2021-10-18 Mosh Java Basics

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等。
  • 命名


    image.png
public class Main {
  public void main() {

  }

}

第一个项目

IntelliJ,创建新项目,Java
选择对应的project JDK
create project from template


image.png
image.png

首行表示这个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)一起提供


image.png

intelliJ,打开终端;
javac Main.java
可以看到Main.class
intelliJ实际编译结果在out文件夹

image.png

Main.class是byte code,在任意平台都可以运行,只要有JRE(Java Runtime Environment)

执行


image.png

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


    image.png

声明变量

  • 在读取一个变量之前需要初始化变量
  • 单个字符用单引号,字符串用双引号
  • 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;
image.png

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 计算


image.png

月利率= 输入/12/100
Math.pow()

image.png

用常量而不是数字,便于阅读

Control Flow

逻辑运算符
&& AND
|| OR
!x NOT

IF

简化版:花括号可省略


image.png

声明的变量也能作于在它所在的code block中
所以因为hasHighIncome,if后面必须带花括号;但这样,这个变量就不能在block之外访问
因此最好在if之外创建变量


image.png
image.png

最简洁做法
将逻辑运算式用括号圈起来,方便阅读


image.png

String className = (income > 100_000) ? “First” : “Economy”;

Switch

image.png

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;
}
image.png

更常用 true和break 联用


image.png

do while loop

和while的区别在于,至少会执行一次
比较少用


image.png

break 结束loop
continue 结束当前loop,回到loop开始

for each

限制一:不能倒着访问
限制二:不能访问索引


image.png

image.png

mortgate:
principal (1k-1M)
rate (0-1)
year (1-30)

其他

sout:输出的快捷键
shift+f6:重命名
布尔变量命名: hasGoodCredit isEligible

你可能感兴趣的:(2021-10-18 Mosh Java Basics)