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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,080评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,422评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,630评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,554评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,662评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,856评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,014评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,752评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,212评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,541评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,687评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,347评论 4 331
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,973评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,777评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,006评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,406评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,576评论 2 349

推荐阅读更多精彩内容