Java基础语法

Java基础语法

Eclipse IDE 的使用

创建工程

File -> JavaProject -> 写工程名字(授课天数命令) --> Finish 工程创建完毕,可以进行程序的开发

src文件夹, 写类使用的

在src文件夹,鼠标右键 -> new -> class -> name对话框写上类的名字

Eclipse的项目目录结构

默认的情况下,工程都放在了 workspace (工作空间)

工作空间中的文件夹就是在eclipse中的工程的名字

工程目录下:

  • bin : 存储编译后的可运行文件 class文件 eclipse自动编译

  • src : 存储是是我们编写的java文件 (源文件)

  • 好处 : 程序是我们写的,源代码是否需要保护, 开发完了,交付使用,直接提供用户 class文件!

Eclipse的字体调整

Ctrl 和加号 以及减号 ,调整字体大小

window -> Rreferences -> General -> App -> color and Fonts -> java -> java Editor Text Font -> edit

Eclipse的窗口设置

package Explorer 包资源浏览器, 管理我们创建的工程,类

Window -> show view -> package Explorer 开启包资源浏览器

Eclipse的界面,混乱 (故意) 恢复到初始化状态

window -> pers -> reset

Eclipse快捷键

  • 万能提示快捷键 alt + / 代码上的自动提示

  • 注释的快捷键

    • 单行注释 Ctrl + / 要注释哪行,光标在这行内即可

    • 多行注释 Ctrl + Shift + / 必须要选中注释的行

    • 取消多行注释 Ctrl + Shift + \ 不需要选中哪一行,只要光标在注释内即可

数据类型

注意 : Java语言是强制类型语言. 任何的数据,都是进行严格分类的

方便管理数据,Java语言将数据分成了两大类别.

  • 基本数据类型 (四类八种)

    • 整型

      • 字节型 (关键字 byte)

        字节型在内存中,占用1个字节(8个二进制位)

        字节型的数据的取值范围 -128 ~ 127

      • 短整型(关键字 short)

        短整型在内存中,占用2个字节(16个二进制位)

        短整型的数据的取值范围 -32768 ~ 32767

      • 整型(关键字 int) Java的默认类型

        整型在内存中,占用4个字节(32个二进制位)

        整型的数据的取值范围 -2147483648~ 2147483647

      • 长整型(关键字 long)

        长整型在内存中,占用8个字节(64个二进制位)

        长整型的数据的取值范围 -9223372036854775808~ 9223372036854775807

    • 浮点

      • 单精度(关键字 float)

        单精度浮点在内存中,占用4个字节

        单精度浮点的数据的取值范围 1.4E-45~ 3.4028235E38

      • 双精度(关键字 double)Java的默认类型

        双精度浮点在内存中,占用8个字节

        双精度浮点的数据的取值范围 4.9E-324~ 1.7976931348623157E308

    • 字符 (关键字 char)

      • 类型每次只能存储1个字符

      • 字符型在内存中,占用2个字节 (和short一致)

    • 布尔 (关键字 boolean)

      • 布尔类型只有true和false

      • 内存中占1个字节

  • 引用数据类型 (5种)

    • 数组 (英语 Array)

    • 类 (英语 class 也是关键字)

    • 接口 (英语 interface 也是关键字)

    • 枚举 (英语 enum 也是关键字)

    • 注解 (英语 Annotation)

变量

变量 : 常量是固定不变化, 变量的数据是可以随时改变的, 变量方便进行运算

变量的定义三要素 :

  • 明确数据类型

  • 变量的名字

  • 变量的值

变量定义三要素.jpg

变量定义的格式 :

数据类型 变量名字 = 值

public static void main(String[] args) {
/*

  • 定义出所有的基本数据类型变量
  • 4类8种
  • 定义格式:
  • 数据类型 变量名字 = 值
    */

    //定义字节型,关键字 byte
    byte b = 100;
    System.out.println(b);

    //定义短整型,关键字 short
    short s = 10000;
    System.out.println(s);

    //定义整型,关键字 int 最常用的类型
    int i = 999999;
    System.out.println(i);

    //定义长整型,关键字 long
    //注意 : Java语言,任何整数默认都是int类型
    //将整数变成long类型, 数字后面写字母L (不分大小写,建议大写)
    long l = 1234567890123L;
    System.out.println(l);

    //定义浮点数据,单精度 关键字float
    //Java中浮点数据,默认是double
    //浮点数变成float类型,数字后面写字母F (不分大小写,建议大写)
    float f = 3.14F;
    System.out.println(f);

    //定义浮点数据,双精度 关键字 double
    double d = 3.14;
    System.out.println(d);

    //定义字符类型, 关键字char
    char c = '去';
    System.out.println(c);

    //定义布尔类型,关键字 boolean
    boolean bool = true;
    System.out.println(bool);
    }

变量定义的注意事项

  • 变量定义,但是没有赋值,不能使用

    public static void main(String[] args) {
    int i ;
    System.out.println(i);
    }

  • 可以先定义变量,再赋值

public static void main(String[] args) {
int i ;
i = 1;
System.out.println(i);
}

  • 在同一个大括号内,变量名不能相同

    public static void main(String[] args) {
    int i ;
    i = 1;
    System.out.println(i);

    int i = 2;
    System.out.printl(i);
    }

  • 作用范围,变量只能作用在定义的一对大括号内有效,出去大括号无效

变量定义格式补充

先声明变量,后赋值

public static void main(String[] args) {
int a;
a = 1;
//一次定义多个变量名字
int b,c,d,e;
//分别进行赋值
b=1;
c=2;
d=3;
e=4;

//比较恶心
int f = 1, m=2, n,g;
n=1;
g=2;
}

数据类型转换 (有点难)

Java语言是强制类型语言,要求在数据进行运算的时候,必须保证类型的一致性.

如果数据在运算的时候,类型不一致,发生类型转换现象.

所有的基本数据类型中,只有布尔类型不参与转换

自动类型转换

  • 转换原则 : 数据类型取值范围小的会自动提升为取值范围大的类型

    • byte -> short -> int -> long -> float -> double

      public static void main(String[] args) {
      /*

      • 字节byte和整型int 求和
      • byte取值范围小的类型,int取值范围大
      • 求和的时候,发生类型的转换!!
        */
        byte b = 1;
        int i = 2;
        int j = b + i; // b+1 类型转换 b转成int
        System.out.println(j);
        }
      类型转换自动.jpg
*   byte和short的计算,默认转成int

    public static void main(String[] args) {
     //求和计算
     //1 == Java默认int
     //1.1 == Java默认double
     //1 自动转换double 补: 1.0
     double d = 1+1.1; //计算后的最终的类型结果是 double
     System.out.println(d);
    ​
     d = 1+0.0;
     System.out.println(d);
    ​
     /*
     *  求和计算,认真思考
     */
     byte b = 1;
     short s = 1;
     //b+s不能运算,数据类型不同,类型的转换,计算结果的数据类型int
     //Java规定 : byte short 进行运算,都会自动转成int!!
     int k = b+s;
     System.out.println(k);
    }

*   char类型计算的时候,查询ASCII编码表,取出整数进行计算 (转成int类型)

    public static void main(String[] args) {
     //char 字符类型,内存中占用2个字节
     char c = 'a';
     System.out.println(c);
    ​
     //char字符类型,也可以进行计算
     //字符char类型计算的时候,转成int类型
     //会到ASCII编码表中查询数字出来
     System.out.println(c+1);// 98
    }

   ![字符编码表.jpg](https://upload-images.jianshu.io/upload_images/23942007-0b10b3ef9a7f65a0.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


*   char类型是否存在取值范围

    在内存中,和short占用2个字节 0-65535

强制类型转换

强制 : 程序人员手动的参与转换

强制类型转换 : 取值范围大的类型,转成取值范围小的类型

尽量少做,出现数据精度丢失问题.

  • 浮点数,转成整数

    • 1.5 转成整数 结果是1,小数部分直接丢弃
  • 转换的公式 :

    被转换后的类型 变量名字 = (被转换后的类型)要转换的数据;

    public static void main(String[] args) {
    //浮点数据,转成整数
    double d = 1.5;
    //d取值范围大的类型,转成int类型 (丢失精度)
    //被转换后的类型 变量名字 = (被转换后的类型)要转换的数据;
    int i = (int)d;
    System.out.println(i);
    }

  • 整数之间的类型转换

    public static void main(String[] args) {
    byte b = 1;

    int i = 2;
    /*

    • b 1个字节
    • i 4个字节
    • b+i 的结果还是4个字节
    • 4个字节的结果,复制到1个字节的c中
    • b + i 的结果,强制的转成byte类型
    • 被转换后的类型 变量名字 = (被转换后的类型)要转换的数据;
      */
      byte c = (byte) (b + i);
      System.out.println(c);

    short s = 1 ;
    /*

    • s + 1 int类型,和short类不能计算
    • s 提升为int类型,求和后变成int
    • 赋值回变量s ,需要类型的强制转换
    • s + 1的结果,强制转换为short
      */
      s = (short) (s + 1);
      System.out.println(s);
      }

    public static void main(String[] args) {
    /*

    • 1 是int类型
    • int类型, 赋值到byte了呢
    • javac 编译器 : .java文件,编译为可以执行的class文件
    • 编译的时候,检测1是否超过byte的范围
    • 没有超过byte范围, javac帮你将int类型的1,转成byte类型
      */
      byte b = 1;
      System.out.println(b);

    byte b2 = (byte)300; //超过byte范围的300,强制转byte类型
    System.out.println(b2);

    }

  • 计算中,常量是已经确定计算结果,(固定不变)

  • 变量,在计算中,不确定结果,运行完毕才可知

    short s1 = 1;
    short s2 = 1;

    /*

    • s1 + s2 == > 变成int
      /
      short s3 = (short) (s1 + s2);
      System.out.println(s3);
      /
    • s4 = 1+1 是正确的
    • 变量计算和常量计算的区别
    • s1 + s2 是变量, 编译的时候javac, 编译器不确定的值是什么
    • 求和的结果按照int计算
    • 1 + 1是常量,固定不变 javac编译,可以确定计算的结果
    • 判断出结果没有超过short范围,不会报错
      */
      short s4 = 1 + 1;
      System.out.println(s4);

运算符

运算符在程序中作用是数据之间进行运算.运算符分类

算数运算符

  • + - * / %

    • % 取模, 计算的结果要余数

赋值运算符

  • = 符号右边的数据,赋值到左边的变量

  • += -= *= /= %= 不能分开

    public static void main(String[] args) {
    int i = 1;
    /*

    • i+1的结果,再赋值变量i
      */
      i = i + 1;
      System.out.println(i);

    /*

    • += 赋值运算符
    • j+=1; 本质上理解为 j = j+1
      */
      int j = 1;
      j+=1; // 等价于 j = j + 1
      System.out.println(j);

    /*

    • += 另一个问题
    • s += 2; 等价于s = s + 2
    • += 是一个符号,运算是一次完成 (javac自动的进行强制转换)
      */
      short s = 1;
      s += 2;
      System.out.println(s);
      }
  • ++ 和 --

    public static void main(String[] args) {
    //++ 符号,含义是变量自增1 -- 变量自减1
    int i = 1;
    i++;
    System.out.println(i);

    /*

    • ++或者--符号,可以出现在变量的前面或者是后面
      /
      ++i;
      System.out.println(i);

      /

    • ++在前在后的区别
      */
      int m = 1;
      //++在后面,后运算
      //先将m的值,赋值变量n, m自己在增1
      int n = m++;
      System.out.println(m); //2
      System.out.println(n); //1
      //++在前面,先运算
      //m自己先增1, 增1后的结果,赋值到n
      n = ++m;
      System.out.println(m);//3
      System.out.println(n);//3
      }

    • ++ 和--的结论:

      • 变量只有自己的时候 ++ 写在前还是后没有区别,自己都会增1

      • 变量和其他变量做运算

        • 写后面,是先将自己的值赋给其他变量,自己在增1

        • 写前面,先自己增1,增1后赋值另一个变量

比较运算符

比较运算符,是数据之间做比较的,特点:比较运算符的执行结果只能是布尔类型

比较运算符的运算结果,要么是true,要么是false,不会出现其他的结果

  • == 等等于 比较符号两边的数据是否相等,如果相等,计算结果是true

  • != 不等于 比较符号两边的数据是否不相等,如果不等待,结算结果是true

  • >大于号 比较符号左边的数是否大于右边的数,如果大于结果是true

  • <小于号 结果略

  • >=大于等于 <=小于等于 结果略

逻辑运算符

逻辑的运算符,计算结果也是布尔类型,要么是true,要么是false

  • & 逻辑与 &符号的两边 一边结果是false,整体运算结果是false,两边都是true,结果是true

  • | 逻辑或 |符号的两边 一边结果是true,整体的运算结果是true,两边都是false,结果是false

  • ! 逻辑非 ! 取反 true取反变false, false取反变true

  • && 双与 提高运算效率,和单符号的计算结果无区别

    • 高效处理 : 左边是false,右边不计算
  • || 双或 提高运算效率,和单符号的计算结果无区别

    • 高效处理 : 左边是true,右边不计算

public static void main(String[] args) {
//&符号的两边 一边结果是false,整体运算结果是false
System.out.println(2==2 & 2==1);
//System.out.println(false & true );

//|符号的两边 一边结果是true,整体的运算结果是true
System.out.println( 1==1 | 2==3);

//! 取反 true取反变false, false取反变true
System.out.println( !false );

int i = 1;
int j = 1;
System.out.println( i==2 && ++j==2);
System.out.println(j);

System.out.println(i==1 || j==3);
}

位运算符

位运算,数字的二进制位的运算

运算之前,先将数字转成二进制后,才能计算

  • & | ^ << >> >>>

    • 计算过程中,二进制0表示false,1表示true

    • 计算结果,和逻辑运算符一致

    • ^ (异或)相同结果是false,不相同结果是true

    • <<左移动 >>右移动 数字的二进制进行位置移动

    • >>> 无符号右移动

    public static void main(String[] args) {
    System.out.println( 6 & 7 );

    System.out.println(6 | 7);

    // ^异或 计算结果,相同为false,不同为true
    System.out.println( 6 ^ 7);

    //2 向右移动1位 相当于原数字/2
    System.out.println(2 >> 1);
    //2左移动2位 相当于原数字*2
    System.out.println( 2 << 2);

    //无论数据的最高位是1还是0,移动后全部补0
    System.out.println(-1 >>> 2);
    }

三元运算符

三元又称为三目运算

  • 运算符格式 :

    布尔表达式?结果1:结果2

    public static void main(String[] args) {
    //布尔表达式?结果1:结果2
    //布尔表达式 : 怎么写都可以,运算结果是true,false即可
    //三元运算符的计算结果 : 布尔表达式结果是true,执行结果1,否则执行结果2
    int i = 2==2?100:200;
    System.out.println(i);

    System.out.println(1==2?"等于":"不等于");
    //System.out.println(1==1?5:1.0);
    }

字符串数据的+计算

字符串和+一起计算, +变成连接作用,失去的求和的含义

计算的结果都是字符串类型.

public static void main(String[] args) {
//"5" 是字符串类型 ,5是int类型
//不计算,遇到字符串, + 变成连接作用
//计算的结果的类型,是字符串
System.out.println("5" + 5);
System.out.println(1+2+"3");
System.out.println(true+"1");
}

Scanner 键盘输入作用

在Java基础阶段 SE技术平台中,是有意义

Scanner是Java中,已经做好的一个类,拿来使用即可

注意 : 使用已经做好的类Scanner,我们自己创建类,类名不能是Scanner

//1: 导入该类所在的包
import java.util.Scanner;

public class ScannerDemo {
public static void main(String[] args) {
//2: 创建Scanner类的对象
Scanner sc = new Scanner(System.in);
//3: 创建好的对象,调用方法,实现键盘的输入 (整数,字符串)
int i = sc.nextInt();//接收键盘输入,整数
System.out.println(i+1);
}
}

Sacnner接收字符串类型

public static void main(String[] args) {
//Scanner键盘输入字符串
Scanner sc = new Scanner(System.in);
//接收字符串, Scanner类中方法 next()
//String s = sc.next(); //字符串中有空格,空格后面不接收

//接收字符串,Scanner类中方法 nextLine()
String s = sc.nextLine(); //接收一行
System.out.println(s+123);
}

Scanner反复接收数据的问题

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//输入int
int i = sc.nextInt(); // 123 回车
System.out.println(i);
//输入字符串
String s = sc.nextLine();
System.out.println(s);
}

流程控制语句

现在阶段,写的所有程序,都称为顺序解构.程序只能从上向下依次执行.

实现更加复杂的功能,使用流程控制语句

判断语句 if ,选择语句 switch ,循环语句 for while do while

if判断语句

只有一个关键字 if (如果)

格式 :

if(条件的判断){
if语句的执行体
}
条件的判断 : 这里的结果必须是布尔类型
if的语句体 : 如果条件判断的结果是true,执行该语句体,判断的结果是false,什么也不做

  • if的语句实现

public static void main(String[] args) {
int i = 1;
//if的判断语句
if( i > 0) {
System.out.println("执行了大括号里面程序");
System.out.println("if的条件判断是true");
}
}

if语句注意事项

if语句是可以省略大括号的 : 0基础,新手,大括号一定要写

如果不写大括号, if判断语句只能控制距离他最近的一行程序!!

public static void main(String[] args) {
int i = 1 ;
if( i == 1)
System.out.println("你好");
System.out.println("我好");
}

if语句: (判断条件) 有一个写法,希望你用, 建议在判断里面,常量写在变量的前面.

public static void main(String[] args) {
//定义布尔类型的变量
boolean bool = false;
//System.out.println(false == false);
if(false == bool) {
System.out.println("if的判断条件是true");
}
}

if...else语句

if是如果,else是否则. 如果怎么样,就怎么样. else语句是不能单独出现,只能跟随if出现

语句格式 :

if(条件判断){
if语句的执行体
}else{
else语句的执行体
}

  • 执行流程 :

    • 程序先执行if中的条件判断语句,如果判断语句是true,那么就执行if的语句体

    • 如果if中的条件判断结果是false,那么就会执行else的语句体

  • if语句和else语句,永远不会同时执行,不会都不执行

    • if和else每天鸡犬相闻,但是老死不相往来
  • 适合于多个条件的判断

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