Java学习,有其他语言基础(一)

1. java运行机制

1.1 JVM、JRE、JDK

  • JVM Java Virtual Machine,Java虚拟机,JVM是一个虚拟的计算机,具有指令集并使用不同的存储区域。负责执行指令,管理数据、内存、寄存器。对于不同的平台,有不同的虚拟机。Java虚拟机机制屏蔽了底层运行平台的差别,实现了“一次编译,到处运行”。
  • JRE Java Runtime Environment,Java运行时环境,包含JVM,可以运行Java的环境
  • JDK Java Development Kit,Java开发工具包,包含JRE,还有一些工具如java、javac、jar等等
    在java中,我们写出来的代码都是源代码(.java),源代码是不能执行的,必须编译成字节码文件(.class)
    pic

2.简单例子

使用的工具是IDEA

输出一个hello,world

public class Hello {
    public static void main(String[] args) {
        System.out.println("hello,world");
    }
}

class就是一个类,类名首字母注意大写,且与文件名一致。

3. 基础语法

3.1 标识符、注释、关键字

3.1.1 标识符

Java 所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识符。
关于 Java 标识符,有以下几点需要注意:

  • 所有的标识符都应该以字母(A-Z 或者 a-z),美元符($$)、或者下划线(__)开始
  • 首字符之后可以是字母(A-Z 或者a-z),美元符($)、下划线(_)或数字的任何字符组合
  • 关键字不能用作标识符
  • 标识符是大小写敏感的

3.1.2 关键字

类别 关键字 说明
访问控制 private 私有的
protected 受保护的
public 公共的
default 默认
类、方法和变量修饰符 abstract 声明抽象
class
extends 扩充,继承
final 最终值,不可改变的
implements 实现(接口)
interface 接口
native 本地,原生方法(非 Java 实现)
new 新,创建
static 静态
strictfp 严格,精准
synchronized 线程,同步
transient 短暂
volatile 易失
程序控制语句 break 跳出循环
case 定义一个值以供 switch 选择
continue 继续
default 默认
do 运行
else 否则
for 循环
if 如果
instanceof 实例
return 返回
switch 根据值选择执行
while 循环
错误处理 assert 断言表达式是否为真
catch 捕捉异常
finally 有没有异常都执行
throw 抛出一个异常对象
throws 声明一个异常可能被抛出
try 捕获异常
包相关 import 引入
package
基本类型 boolean 布尔型
byte 字节型
char 字符型
double 双精度浮点
float 单精度浮点
int 整型
long 长整型
short 短整型
变量引用 super 父类,超类
this 本类
void 无返回值
保留关键字 goto 是关键字,但不能使用
const 是关键字,但不能使用
null
### 3.1.3 注释 public class Hello { public static void main(String[] args) { System.out.println("hello,world"); //单行注释 /*多 行注释*/ /** * @Description 文档注释 */ } } 写注释对之后理解代码挺有帮助的 # 4. 数据类型 Java语言提供了八种基本类型。

4.1 整数类型:

  1. byte
    占1字节,范围-128~127
  2. short
    占2字节,范围-32768~32767
  3. int
    占4字节,范围-2,147,483,648~2,147,483,647
  4. long
    占8字节,范围-9,223,372,036,854,775,808~9,223,372,036,854,775,807

4.2 浮点类型

  1. float,占4字节
  2. double,占8字节

4.3 字符类型

char,占2字节

String是一个类

4.4 boolean类型

boolean,占1位,值只有true和false

位(bite)是计算机内部数据,储存的最小单位
字节(byte)是计算机中数据处理的基本单位,1字节=8位

int num1=10;
byte num2=20;
short num3=30;
long num4=40L; //long类型要在数字后面加L
float num5=50.1F; //float类型在数字后加F
double num6=60.0000001;
char c='a';
boolean b=false;

4.5类型转换

运算中,不同类型的数据先转换为同一类型,然后进行运算。

4.5.1 自动转换

由低到高
byte,short,char->int->long->float->double

    char c='a';
    int n=c+1;
    System.out.println(n);

计算n时自动将char类型转换为int类型

4.5.2 强制转换

由高到低
(类型)变量名

char c='a';
int n=c+1;
System.out.println((char)n);

输出:b

转换的时候可能出现内存溢出

    int num1=188;
    byte b=(byte)num1;
    System.out.println(b);

输出:-68,因为超出byte范围

或精度损失

    float f1=53.2f;
    double d1=58.321;
    System.out.println((int)f1);
    System.out.println((int)d1);

输出:53 58

5. 运算符

  1. 算术运算符:+,-,*,/,%,++,--
  2. 赋值运算符:=
  3. 关系运算符:>,<,>=,<=,==,!=
  4. 逻辑运算符:&&,||,!
  5. 位运算符:&,|,^,~,>>,<<,>>>
  6. 条件运算符: ?:
  7. 赋值运算符:+=,-=,*=,/=
    比较基础,不多赘述

6. 条件语句

6.1 if

if……else

if(布尔表达式)
{
   //如果布尔表达式为true将执行的语句
}else{
  //如果布尔表达式的值为false
}

if...else if...else

if(布尔表达式 1){
   //如果布尔表达式 1的值为true执行代码
}else if(布尔表达式 2){
   //如果布尔表达式 2的值为true执行代码
}else if(布尔表达式 3){
   //如果布尔表达式 3的值为true执行代码
}else {
   //如果以上布尔表达式都不为true执行代码
}

嵌套的 if…else

if(布尔表达式 1){
   ////如果布尔表达式 1的值为true执行代码
   if(布尔表达式 2){
      ////如果布尔表达式 2的值为true执行代码
   }
}

6.2 switch

基本结构

switch(expression){
    case value :
       //语句
       break; //可选
    case value :
       //语句
       break; //可选
    //你可以有任意数量的case语句
    default : //可选
       //语句
}

7 循环

7.1 while

基本结构

while( 布尔表达式 ) {
  //循环内容
}

public class Test {
   public static void main(String args[]) {
      int x = 10;
      while( x < 20 ) {
         System.out.print("value of x : " + x );
         x++;
         System.out.print("\n");
      }
   }
}

value of x : 10
value of x : 11
value of x : 12
value of x : 13
value of x : 14
value of x : 15
value of x : 16
value of x : 17
value of x : 18
value of x : 19

7.2 do……while

基本结构

do {
       //代码语句
}while(布尔表达式);

public class Test {
   public static void main(String args[]){
      int x = 10;
 
      do{
         System.out.print("value of x : " + x );
         x++;
         System.out.print("\n");
      }while( x < 20 );
   }
}

value of x : 10
value of x : 11
value of x : 12
value of x : 13
value of x : 14
value of x : 15
value of x : 16
value of x : 17
value of x : 18
value of x : 19

7.3 for

基本结构

for(初始化; 布尔表达式; 更新) {
    //代码语句
}

public class Test {
   public static void main(String args[]) {
 
      for(int x = 10; x < 20; x = x+1) {
         System.out.print("value of x : " + x );
         System.out.print("\n");
      }
   }
}

value of x : 10
value of x : 11
value of x : 12
value of x : 13
value of x : 14
value of x : 15
value of x : 16
value of x : 17
value of x : 18
value of x : 19

可用于数组的for循环

for(声明语句 : 表达式)
{
   //代码句子
}

声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等。

表达式:表达式是要访问的数组名,或者是返回值为数组的方法。

public class Test {
   public static void main(String args[]){
      int [] numbers = {10, 20, 30, 40, 50};
 
      for(int x : numbers ){
         System.out.print( x );
         System.out.print(",");
      }
      System.out.print("\n");
      String [] names ={"James", "Larry", "Tom", "Lacy"};
      for( String name : names ) {
         System.out.print( name );
         System.out.print(",");
      }
   }
}

10,20,30,40,50,
James,Larry,Tom,Lacy,

8.方法

方法是语句的集合,他们在一起执行一个功能

8.1 方法定义

基本语法

修饰符 返回值类型 方法名(参数类型 参数名){
    ...
    方法体
    ...
    return 返回值;
}
  • 修饰符:是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型。
  • 返回值类型 :方法可能会返回值。returnValueType 是方法返回值的数据类型。有些方法执行所需的操作,但没有返回值。在这种情况下,returnValueType 是关键字void
  • 方法名:是方法的实际名称。方法名和参数表共同构成方法签名。
  • 参数类型:参数像是一个占位符。当方法被调用时,传递值给参数。这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。
  • 方法体:方法体包含具体的语句,定义该方法的功能。

public class demo {
    public static void main(String[] args) {
        int a=max(1,2);
        System.out.println(a);
    }
    public static int max(int num1, int num2) {
        int result;
        if (num1 > num2){
            result = num1;
        }else{
            result = num2;
        }
        return result;
    }
}

2

8.2 方法调用

Java都是值传递,没有引用传递。
调用一个方法时候需要提供参数,你必须按照参数列表指定的顺序提供。

int a=max(1,2);

8.3 方法重载

重载就是在一个类中,有相同的函数名称,但形参类型不同的函数。
重载的方法必须拥有不同的参数列表,不能仅仅依据修饰符或者返回类型的不同来重载方法。

   public static int max(int num1, int num2) {
        int result;
        if (num1 > num2){
            result = num1;
        }else{
            result = num2;
        }
        return result;
    }
    public static double max(double num1, double num2) {
        double result;
        if (num1 > num2){
            result = num1;
        }else{
            result = num2;
        }
        return result;
    }

调用的时候可以用

int sum1=max(1,2);
double sum2=max(1.0,2.0);

8.4 可变参数

JDK 1.5 开始,Java支持传递同类型的可变参数给一个方法。
在方法声明中,在指定参数类型后加一个省略号。

typeName... parameterName

一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明。

public class demo {
    public static void main(String[] args) {
        printMax(34, 3, 3, 2, 56.5);
        printMax(1,2,3);
    }
    public static void printMax( double... numbers) {
        if (numbers.length == 0) {
            System.out.println("No argument passed");
            return;
        }
        double result = numbers[0];
        for (int i = 1; i <  numbers.length; i++){
            if (numbers[i] >  result) {
                result = numbers[i];
            }
        }
        System.out.println("The max value is " + result);
    }
}

The max value is 56.5
The max value is 3.0

8.5 递归

方法自己调用自己叫递归。
递归结构包含两个部分:

  • 递归头:什么时候不调用自己。如果没有头,将陷入死循环。
  • 递归体:什么时候需要调用自身方法。

public class demo {
    public static void main(String[] args) {
        int v=f(5);
        System.out.println("5的阶乘是:"+v);
    }
    public static int f( int n) {
        if(n==1){
            return 1;
        }else {
            return n*f(n-1);
        }
    }
}

5的阶乘是:120

9.数组

持续更新

posted @ 2021-08-12 16:26  ellll  阅读(93)  评论(0)    收藏  举报