JavaStudy 入门-基础语法(Day03 - Day05)

【Java语言基础】
* 标识符
* 关键字
* 字面值
* 变量
* 数据类型
* 二进制
* 字符编码
* 运算符
* 控制语句
* 方法

一、 标识符(黑色/可自定义处)

(一)起名规则:

  1. 不可用数字开头
  2. 可: $、_ 、字母、数字
  3. 区分大小写

(二)规范

  1. 见名知义为佳
  2. 不要太长
  3. 方法和变量起名, 采用小驼峰命名法, 如: firstName
  4. 类和接口起名, 采用大驼峰命名法, 如: GoodStudent
  5. 常量名全部大写

二、字面值

即数据, 类型有:

boolean: 1字节 false和true

数字: int 4 double 8

字符串: 双引号, “ABC”

字符: char 2, 单引号, ‘A’

三、变量

  1. 定义

值可变, 本质是内存中一块空间的名字, 是存储数据的基本单元

这块空间是有类型、有名字、有字面值的

(数据类型指导程序在运行阶段该开辟多大的空间)

  1. 格式:

声明:数据类型 变量名; 注意变量名是小驼峰

int a, b, c; ✔️ 声明完成≠开辟了空间

​ 在同一个作用域中, 变量名不可重名; 声明只有 1 次

初始化:变量名 = 字面值 字面值与数据类型一致; 初始化才可用\空间才已被开辟

声明+初始化:数据类型 名字 = 值;

  1. 访问一个变量的2种形式
    • get 读取
    • set 设置/修改
  1. 变量的作用域: 出了{}就不认识了(方法结束后, 变量的内存就释放了)
  1. 变量的类型

    1)局部变量

    ​ 在方法体内的变量

    2)成员变量

    ​ 在方法体外、类体之内声明的变量

```java
public class HelloWorld {
    public static void main(String[] args) {
        int i = 1;
        System.out.println(i);//就近访问1处
    }

    static int i = 2;
    //若main方法体内找不到,会找全局有否static变量可访问

    public static void doSth() {
        int i = 3;
        //不可跨方法体访问(1、2处都找不到也不会找到3处
    }
}
```

四、数据类型

作用:指导JVM在运行程序时需要给该数据分配多大的内存空间

类型-大类: 基本数据类型引用数据类型

基本数据类型——四大类、八小种

(一) 整数型

byte short int long 1 2 4 8

(二) 浮点型

float double 4 8

数字类型-练习

  1. 如何表示一个数字的正负?
  2. byte的最大值是?
  3. 00000000 00000000 00000000 10000000是什么类型?
  4. 00000000 00000000 00000000 10000000 - 1 = ?
  5. 八进制与十六进制的开头?
  6. 整数字面值默认类型为?如何转为其他, 比如long?
  7. 是否有精度比double更高的类型?
  8. 浮点数字面值默认类型为?如何转为其他?�

key

  1. 最高位(最左边) 0正1负

  2. 01111111

  3. int 4个字节

  4. 00000000 00000000 00000000 01111111

  5. 0和0x

  6. int; 后加L

    long y = 1234567899;    //编译报错
    long z = 1234567899L;   //编译通过
    
  7. SUN在基础SE类库内提供了更高精度的类型(引用数据类型而非基本数据类型): java.math.BigDecimal

  8. double; 后加F

(三) 布尔型

bool 2

底层 0假1真

有效值 false和true

(四) 字符型

char 2

‘a' 97 01100001

’A' 65 01000001

‘0’ 48 00110000

(五)类型转换规则

  1. 除bool其他都可相互转换
  1. 自动类型转换: 小容量转为大容量

    • byte不可向char转换;

    • short、char都可向int转换

  1. char可以get更大的数(因为字符无正负
  1. 强制类型转换: 大容量转换为小容量

    格式: int y = (int) x; //long x = 100L;   赋值左右类型要一致
    
    • 结果: 高位(左边)的二进制会被砍掉(精度损失、谨慎使用)
  1. 多种类型混合运算实现:

    • 各自都转换成大容量的, 再做运算

      • int值不超过小弟们的取值范围,也可直接赋给小弟们

五、运算符

(一)加减乘除

(二)关系运算符

= != > >= < <=

结果: 布尔型

(三)赋值运算符

=

+= -= %= *=

(四)逻辑运算符

两边都是布尔, 最后结果也是布尔

符号 说明
& 有false则false
| 有true则true
! 取反
^ 异或, 两边不一样就是true
&& 短路与: 左false则false (不算右可得)
|| 短路或: 左true则true (不算右可得)

根据需求决定要不要用短路逻辑运算符 (第二个算子是否需要执行)

另可划分:布尔运算符与位运算符

类型 符号
布尔运算符 &&,||, &, |
位运算符 &, 按位与; |, 按位或; ^, 按位异或; ~, 按位非; >>, 右移; >>>, 右移,左边空出位以0填充; <<, 左移

Q: 2->8的最快方法?

A: 00000010 将1左移2位

(五)三目运算符/条件运算符

(六)+

  1. 字符+

    ASICII码, char -> int

  2. 字符串+

    拼接: 表达式中只要有一个字符串, 则进行的都是拼接操作

六、输入

三步骤

  1. 导包

    import java.util.Scanner;
    
  1. 创建对象

    Scanner sc = new Scanner(System.in);
    
  1. 接收数据

    Int i = sc.nextInt();
    

七、方法function

(一)格式

[修饰符列表] 返回值类型 方法名(形参列表){  //方法名要有动词属性, 见名知义, 不同功能区别也要大一点
    方法体  //main方法里要短,要学会抽离方法
}

1. 修饰符列表

该项为可选项

Q: 方法有static关键字, 如何调用该方法?

A: 类名.方法名(实参列表);

​ 但有时可省略类名: 该方法在当前类中

2. 返回值

- 非void的方法

1). 返回格式必须为return 值; (值要相对应)
2). 虽然有返回值, 但调用者可选接收否 (使用变量接收)
3). 可直接输出结果, 不用必须变量才可输出

- void方法

​ return;

3.内存分配

JVM虚拟内存模型

1). 方法只定义, 不调用, 是不会执行的; 并且在JVM中也不会给该方法分配“运行所属”的内存空间

2). JVM内存划分
- 方法区内存——存方法代码片段 (.class字节码文件的一部分)
(1) 字节码文件在类加载的时候, 类加载器将其放入方法区中(方法区内存最先有数据)
(2) 方法代码片段可以被重复调用: 每次调用都需要给该方法分配独立的活动场所(栈)
(3) String.class 、System.class ... 也在此 (rt.jar中)
- 堆内存
- 栈内存
(1) 分配方法运行所属的内存空间——压栈(局部变量的内存在这里)
(2) 释放该方法的内存空间——弹栈
(3) 最先调用main方法, 而它最后结束

image-20200212205633951.png

(二)方法重载/overload

  1. 功能相似时,尽可能让方法名相同 (不同功能名字也要有区别)

  2. 重载情况:在同一个类中, 方法名相同, 但参数列表不同: 参数的数量、顺序、数据类型不同 (方法重载仅和方法名+参数列表有关, 而与返回值类型、修饰符列表无关)

  3. 仅参数名不同不构成重载

public static void m1(int a , int b);
public static void m1(int b , int a);   //方法重复,而非重载

(三)方法的递归调用

  1. 无递归出口: java.lang.StackOverflowError (栈内存溢出错误)

  2. 耗内存,尽量不用 (递归太深也会导致栈溢出错误)

  3. 感觉: “大” -> “小”的套娃, 递归出口时最小情况

  4. 出口:

    if(条件){
        return 值;
    }
    

以上是全部基础语法的内容, 算是开了门, 接下来要迈门槛啦~

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

推荐阅读更多精彩内容

  • Win7下如何打开DOS控制台? a:开始--所有程序--附件--命令提示符 b:开始--搜索程序和文件--cmd...
    逍遥叹6阅读 1,584评论 4 12
  • 目前MaxMind对MMDB的读写支持如下Writer:perlReader:CC#JavaPerlPHPPyth...
    openex阅读 8,206评论 0 0
  • Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和...
    Java小辰阅读 1,096评论 0 2
  • DAY 01 JAVA简述 Java是由SUN公司在1995年推出的一门高级编程语言,是现今服务器端的首选编程语言...
    周书达阅读 892评论 0 0
  • 、6一、基本知识 1.JDK和JRE的区别 答:JDK是java语言开发工具包,包含JRE和开发工具(javac....
    梦游的沙师弟阅读 1,191评论 0 4