Java基础(1)语法、数组

1 Java介绍

Sun公司(Stanford University NetWork):美国的斯坦福大学)在1995年推出的高级编程语言。sun公司在2009年被甲骨文(Oracle)公司收购了。Java之父是詹姆斯·高斯林(James Gosling)
Java:Windows平台,它的JDK和Linux平台的JDK不一样。
window:Java源代码(.java),JVM编译器,Java字节码(.class)。
JDK再拿着字节码进行解释执行。
Java不像Python,直接拿着源代码解释执行,
Java是通过JVM把源代码编译成了字节码,拿着字节码,来解释执行的。

Java跨平台。Java源代码是一次编写,到处运行。
JVM跨平台吗,不是。

Java:编译型语言,需要编译+解释(JDK)的过程。

编译型语言是指使用专门的编译器,针对特定平台(操作系统)将某种高级语言源代码一次性“翻译”成可被该平台硬件执行的机器码(机器指令和操作数),并包装成该平台所能识别的可执行性程序的格式,这个转换过程成为编译。

Scala是编译型语言。

Java平台版本说明

J2SE: 标准版。也就是其他两个版本的基础, 在JDK1.5的时候, 正式更名为: JavaSE
J2ME: 小型版。一般是用于研发嵌入式程序, 已经被android替代了, 在JDK1.5更为为 JavaME
J2EE: 企业版。一般开发企业级互联网程序, 在JDK1.5的时候正式更为为JAVAEE

JDK和JRE的概述

JDK:Java开发工具包(Java Development Kit)。包含开发工具 和 JRE。
常用的开发工具:javac,java
JRE:Java运行时环境(Java Runtime Environment)。包含运行Java程序时所需的核心类库和 JVM。核心类库: java.lang,java.util,java.io
JVM:Java虚拟机(Java Virtual Machine),作用是用来保证Java程序跨平台性的。但是JVM本身并不能跨平台。

JDK与JRE
使用的集成环境为IDEA,常见的快捷键如下:
IDEA快捷键
shit+回车:不管此时光标在哪自动换行
编码过程中的快捷方法:
sout:
sout

psvm:
psvm

2 JAVA语法

2.1 注释

// 单行注释

/*
多行注释
多行注释
*/

/**
文档注释
文档注释
*/

2.2 关键字

常见的关键词:
public:公开的,公共的,大家都能用
class:表示在创建一个类。
static:静态的,不需要创建对象就可用
void:无返回值类型,也就是这个方法没有返回值
main:特殊的方法,所有程序的入口

eg:static 和 final 是 Java 中两个关键字,它们分别用于修饰类、方法和变量。
static: 用于表示静态的、与类关联的成员,可以通过类名直接访问。

修饰变量:静态变量属于类本身,而不是类的实例。静态变量在内存中只有一份拷贝,被所有的对象共享。可以通过类名直接访问静态变量,无需创建对象。
修饰方法:静态方法属于类本身,而不是类的实例。静态方法不能直接访问非静态成员,只能访问静态成员。可以通过类名直接调用静态方法,无需创建对象。
修饰代码块:静态代码块在类加载时执行,且只执行一次。一般用于初始化静态变量或执行静态方法。
修饰内部类:静态内部类与外部类无关,可以直接访问外部类的静态成员,但不能直接访问外部类的非静态成员。

特点:
1.随着类的加载而加载.
2.优先于对象存在.
3.被static修饰的内容, 能被该类下所有的对象共享.
解释: 这也是我们判断是否使用静态关键字的条件.
4.可以通过类名.的形式调用.

final: 用于表示不可修改的常量、不可重写的方法、不可继承的类。

修饰变量:final 变量表示常量,一旦赋值后不可修改。final 变量必须在声明时或构造函数中进行初始化。
修饰方法:final 方法不能被子类重写。
修饰类:final 类不能被继承,即不能有子类。

2.3 变量

在程序的执行过程中,其值可以在某个范围内发生改变的量就叫变量。Java中要求一个变量每次只能保存一个数据,而且必须要明确保存数据的数据类型

2.4 数据类型

Java是一种强类型语言, 针对于每一个数据都给出了明确的数据类型.

基本数据类型(简称: 基本类型) :byte, short, char, int, long, float, double, boolean
引用数据类型(简称: 引用类型):​ String, 数组, 类, 接口

基本类型占用字节大小以及取值范围
在这里插入图片描述
注:

1.变量未赋值,不能使用
2.变量只在它所属的范围内有效
3.一行上可以定义多个变量,但是不建议

数据类型转换
数据类型转换分类两类:自动(隐士)类型转换和强制(显示)类型转换

1.范围小的类型向范围大的类型提升,byte、short、char 运算时直接提升为int。
2.boolean类型的数据只有true和false这两个, 所以boolean类型的数据不参与类型转换。
即: byte、short、char–>int–>long–>float–>double

格式:数据类型 变量名 = (数据类型)要被转换的数据值;

b2 = (byte)(b1 + i1)

2.5 运算符

1、+号运算符

(1)当与字符串使用时,+号表示拼接
(2)当与非字符串使用时,+号表示数学

2、算术运算符: +, -, *, /, %, ++, –
3、赋值运算符: =, +=, -=, *=, /=, %=
4、比较(关系)运算符:==, !=, >, >=, <, <=
5、逻辑运算符:

符号作用说明
&并且的意思. 不管前者是否满足,左右两侧都执行.
&&短路与并且的意思.左侧不满足,则不执行右侧,提高程序的判断效率,实现类似短路的效率.
||短路或或者的意思, 有true则整体为true, 都为false, 则整体为false,有短路效应.
!逻辑非取反的意思, 以前为true, 取反后为false, 以前为false, 取反后为true.
^逻辑异或异同的意思, 相同为false, 不同为true.

6、三元(三目)运算符

int max=a>b?a:b;

2.6 Scanner

import java.util.Scanner;
public class ScannerDemo {
    public static void main(String[] args) {
        /**
         * 键盘输入在工作中很常用,比如银行密码,转账金额输入等
         * java中键盘输入和python不一样,需要通过Scanner类,创建对象来完成
         * 这个对象在util工具包中,需先导包
         */
        Scanner sc=new Scanner(System.in);
        System.out.print("请输入:");
//        int num接受外界输入的整数
        int num=sc.nextInt();
        System.out.println("num="+num);
    }
}

2.7 流程控制

2.7.1 选择结构

也叫分支结构,主要分为以下两种:
1、if语句,主要用于范围的判断
单分支格式:

if(判断条件){
    // 满足条件的内容
}

双分支:

if(判断条件){
   // 满足条件的内容
} else {
  // 不满足条件的内容
}

多分支:

if(判断条件){
   // 满足条件的内容
} else if (判断条件) {
  // 满足条件的内容
}else if (判断条件) {
  // 满足条件的内容
} else {
   // 不满足条件的内容
}

2、switch case语句,主要用于固定值的判断,格式如下

switch(表达式) {  
    case1: 	
        语句体1;
        break;
    case2:
        语句体2;
        break;
    case3:
        语句体3;
        break;
    ...    //根据需求, 可以写多组case.
    default:	
        语句体n;
        break;
}
2.7.2 循环结构

1、for循环
开发中应用到的最多的循环, 它一般适用于循环次数固定的情况.,格式如下:

for(初始化条件1; 判断条件2; 控制条件3) {
    //循环体;
}

初始化条件:用来记录 循环的初始状态的. 即: 从哪开始循环。
判断条件:用来决定循环是否继续执行的, 条件成立, 则循环继续执行, 条件不成立, 整个循环就结束了。
控制条件:用来控制初始化条件变化的, 一般是每循环一次, 初始化条件+1。
循环体:需要用来重复做的事情(代码)。

2、while循环
一般适用于循环次数不固定的情况,格式如下:

初始化条件1;
while(判断条件2) {
    //循环体3;
    //控制条件4;
}

3、死循环
在Java中,死循环的写法格式常用有以下2种:
for(; ; ) { }
while(true){ }

public class DeadLoop {
    public static void main(String[] args) {
        /*for(;;) {
            System.out.println("Loop!");
        }*/
        while(true) {
            System.out.println("Loop!");
        }
     }
}

4、循环嵌套
所谓的循环嵌套指的是循环结构中还包裹着循环结构,外边的循环结构叫外循环,里边的循环结构叫内循环
循环嵌套输出九九乘法表:

public class Demo09_MutiTable {
    public static void main(String[] args) {
        for (int i=1;i<=9;i++){//        外层循环,控制9行
            for (int j=1;j<=i;j++){//            内存循环,控制每一行的打印次数
                System.out.print(j+"*"+i+"="+(i*j)+"\t");
            }
            System.out.println(); //换行
        }
    }
}

3 JAVA数组

1、数组的定义
两种方法:
① 数组类型[] 数组名
② 数组类型 数组名[]

//        定义int类型数组类型
        int arr[]=null;
        int[] arrr=null;
//        定义double类型数组类型
        double[] doubles=null;
        double dou[] = null;

2、数组的初始化
① 静态初始化:数组类型[] 数组名=new 数据类型[]{元素1,元素2,元素3…}

手动指定数组的元素,系统会根据元素的个数,计算出数组的长度。

② 动态初始化:数据类型[] 数组名 = new 数据类型[数组的长度];

手动指定数组长度,由系统给出默认初始化值。

//  1.数组的定义
        int[] arr =null;
        int[] arr1 =null;
//  2.数组的初始化
//  ① 静态初始化:开发、测试常用:new 数组类型[]{数组的元素(可以为空)}
        arr1 =new int[]{};
        //        上面两行等价于下面一行
        int [] arr2 =new int[]{11,22};
//  ② 动态初始化:工作中常用 => 数组类型[] 变量名=new 数据类型[5]
		String[] arrs=new String[5];
        System.out.println(arrs);
//  3.数组的使用
        System.out.println(arr1); //[I@1b6d3586,内存地址池
        System.out.println(arr1.length);

数组常见问题
当访问了数组中不存在的索引,就会引发索引越界异常。
最小索引:0;最大索引:数组的长度 - 1=》数组名.length - 1

int[] arr = {1,2,3,4,5,5,5,5,5};
//用索引来访问数组中的元素
System.out.println(arr[10]);//报错:ArrayIndexOutOfBoundsException
int[] arr =null;
System.out.println(arr.length); //报错:NullPointerException(空指针异常)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值