Java基础语法(持续更新......)

以下是作者自学Java的一些个人笔记,笔记部分由作者理解后整理(作者小白,若有理解不够到位的地方,欢迎友好讨论~),后续会考虑补全笔记,希望可以帮助到你,共勉!

Java 基础语法知识点

大小写敏感

类名:首字母大写

方法名:小写字母开头。若由多个单词组成,后面的单词首字母大写

源文件名:源文件名必须和类名相同

主方法入口:所有都是从public static void main(string[] args)方法开始执行

Java 标识符

Java 所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识符

关于 Java 标识符,有以下几点需要注意:

  • 所有的标识符都应该以字母(A-Z 或者 a-z),美元符($)、或者下划线(_)开始

  • 首字符之后可以是字母(A-Z 或者 a-z),美元符($)、下划线(_)或数字的任何字符组合

  • 关键字不能用作标识符

  • 标识符是大小写敏感

  • 合法标识符举例:age、$salary、_value、__1_value

  • 非法标识符举例:123abc、-salary

Java 修饰符

像其他语言一样,Java可以使用修饰符来修饰类中方法和属性。主要有两类修饰符:

  • 访问控制修饰符 : default, public , protected, private

  • 非访问控制修饰符 : final, abstract, static, synchronized

Java 关键字

常见的有public、class、static、void,后续再继续学习记录

Java 字面量

整数型:10、-5等

浮点型:3.14、-0.5等

布尔型:true、false

字符型:'d' 'a'等

字符串型:“Hello”、“world”、“你好”等

Java + 运算符

主要作用:求和、字符串拼接

求和:两边都是数字

字符串拼接:只要有一边是字符串

Java 变量

三要素:变量名、变量值、数据类型

int a,b,c = 300;//此处只给c赋值了300,其他a和b没有赋值

Java 作用域

变量的有效范围,在java当中通常是一个{}对应一个作用域

Java 变量分类

1.凡是在方法体当中定义的变量,一定是局部变量

局部变量只在当前方法中有效

2.在类体当中定义的变量叫做成员变量

成员变量当中,带static的是静态变量,不带static的是实例变量

进制转换(十进制、二进制、八进制、十六进制)

十进制 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

八进制 1 2 3 4 5 6 7 10 11 12 13 14 15 16 17 20

十进制转换成八进制:

除8取余,一直到商0为止,最后将所有的余数逆序输出

八进制转换成十进制:

每一个与权值相乘,最后求和

其余的进制转换方法大致相似,后续再进行补充

原码反码补码

0表正数,1表示负数

字节和比特

1 Byte = 8 bit

每个比特(bit)是计算机最小的存储单位,只能存储0或1两个状态

1 kb = 1024 Byte,依次类推

计算机底层采用补码的形式存储,但显示给人类的时候是以原码的形式显示

正数的原码反码补码都是相同的

负数的原码运算规则:将绝对值转换为二进制后,最高位改1

反码:以原码为参考,符号位不变,其他位取反

补码:以反码为参考,符号位不变,加1

数据类型

整数型说明字节
byte小整数1
short中等大小整数2
intJava最常用的整数4
long极大或极小的整数8
浮点型说明字节
float单精度,精度为7位小数4
double双精度,精度为15位小数,Java最常用的浮点类型8
布尔型:boolean逻辑判断1
字符型:char单个字符,’a‘等2


整数型

java允许小容量的数据直接赋值给大容量的变量

如果在整数型字面量后面添加L,会将这个整数型字面量当作long类型来处理

例如:int a = 28234923432 这个数太大了,int 分配4个字节放不下(会报错),所以要在后面加个L

变成long a = 28234923432L 这样就没问题了


强制类型转换,编译时可能会损失精度,也可能不会损失

long x = 1000L

int y =(int)x


当一个整数型字面量没有超出byte的取值范围(-128~127)时,可以直接赋值给byte下的变量

short取值范围:-32768~32767

多种数据类型混合运算,先各自转换成容量最大的,再做运算

byte < short < int < long < float < double

浮点型

float:单精度,可以精确到7位小数

double:双精度,可以精确到15位小数

double是常用的


浮点型数据两种表示形式

1.十进制

double x = 1.23

double y = 0.23

2.科学计数法

double x = 0.123E2 // 0.123*10 的二次方

double y = 123.34E-2 // 123.34/10 的二次方

浮点型数据参与运算的结果,一定不要使用”==“与其他数字进行相等比较

主要原因:任何浮点型数据,在计算机底层存储的都是近似值

字符型

char 类型占用2个字节

char类型的字面量必须使用单引号括起来:'A' 'a' '中'

采用统一的字符编码方式:Unicode编码

char 的默认值是:\u0000

转义字符:

\t

                            制表符,相当于按下Tab键

\n换行符
\"双引号
\'单引号
\ \ 反斜线本身

char参与的运算:

有一个运算规则需要记住:

             byte  short  char 混合运算的时候,各自先转换成int再做运算

比如    ‘a' + 1 直接输出得到98

但是 如果 先是 char c = ’a‘ + 1 然后输出c 那就是得到b

再比如,

byte b = 1;

short s = 1;

char c = 1;

要将上面的相加起来,只能 int num = b + s + c 或者强制转换 short num = (short)(b + s + c)

布尔型

boolean 只有true和false,没有0和1的说法,用于条件判断等语句

Java String类

在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串

1.创建字符串最简单的方式如下:

String str = "Runoob";

2.用构造函数创建字符串:

String str2=new String("Runoob");

3.字符串长度表示:int len = str.length();

4.连接字符串可以使用来进行, 比如,“你好” + “欢迎你”;

运算符

算术运算符

操作符说明
+加法
-减法
*乘法
/整除
%取模(求余数)
++自增加1
--自减减1

++出现在变量之后,先赋值再加1

++出现在变量之前,先加1再赋值

关系运算符

> >= < <= == !=

所有的关系运算符结果一定是布尔类型:true/false

= 赋值运算符

== 可以比较两个值是否相等

逻辑运算符

操作符描述例子
如果相对应位都是1,则结果为1,否则为0(A&B),得到12,即0000 1100
|如果相对应位都是 0,则结果为 0,否则为 1(A | B)得到61,即 0011 1101
^如果相对应位值相同,则结果为0,否则为1(A ^ B)得到49,即 0011 0001
按位取反运算符翻转操作数的每一位,即0变成1,1变成0。(〜A)得到-61,即1100 0011
<< 按位左移运算符。左操作数按位左移右操作数指定的位数。A << 2得到240,即 1111 0000
>> 按位右移运算符。左操作数按位右移右操作数指定的位数。A >> 2得到15即 1111
>>> 按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。A>>>2得到15即0000 1111

条件运算符(?:)

variable x = (expression) ? value if true : value if false
public class Test {
   public static void main(String[] args){
      int a , b;
      a = 10;
      // 如果 a 等于 1 成立,则设置 b 为 20,否则为 30
      b = (a == 1) ? 20 : 30;
      System.out.println( "Value of b is : " +  b );
 
      // 如果 a 等于 10 成立,则设置 b 为 20,否则为 30
      b = (a == 10) ? 20 : 30;
      System.out.println( "Value of b is : " + b );
   }
}

Java 条件语句

布尔表达式结果为true则执行,为false则不执行

//第一种语法:

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


//第二种语法:

if(布尔表达式){
 
}else{
  
}

//第三种语法:

if(布尔表达式 1){


else if(布尔表达式 2){

} }

Java 分支语句

switch case 语句语法格式如下:

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

一般是这样的 会在switch语句外进行变量声明和赋值 expression就是变量

case 后面跟着的可以是对应等级或者1 2 3 4  反正就是你根据变量值的情况进行一个判断

break 出现后 如果变量与value相等 则停止往下执行代码 

default 就是 如果以上都没有对应的情况出现的默认内容(可选,自定义)

举个例子,

public class Test {
   public static void main(String args[]){
      //char grade = args[0].charAt(0);
      char grade = 'C';
 
      switch(grade)
      {
         case 'A' :
            System.out.println("优秀"); 
            break;
         case 'B' :
         case 'C' :
            System.out.println("良好");
            break;
         case 'D' :
            System.out.println("及格");
            break;
         case 'F' :
            System.out.println("你需要再努力努力");
            break;
         default :
            System.out.println("未知等级");
      }
      System.out.println("你的等级是 " + grade);
   }
}

运行的结果就是,

良好
你的等级是 C

Java 循环语句

while循环:

只要布尔表达式为 true,循环就会一直执行下去

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

do…while 循环:

do…while 循环和 while 循环相似,不同的是,do…while 循环至少会执行一次

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

for循环:

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

Java 增强 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(",");
      }
   }
}

IDEA快捷键

idea会自动保存,自动编译,不需要其他操作

生成main方法psvm (直接缩写输入,idea会帮忙补全的)

快速生成输出语句:在“......”(你想输出的内容)后面加上 .sout  比如 “你好”.sout

运行结果:ctrl + shift + F10

for循环:直接 fori   idea会帮忙补全

复制一行:ctrl + d

打开运行结果:alt + 4

新建/新增任何东西:alt + insert 

退出任何窗口:ESC

编写源码的窗口最大化:ctrl + shift + F12

打开project窗口:alt + 1

查找某个类:敲两下shift,选择classes,输入类名

切换选项卡:alt + 左右方向键

自动生成变量:在一个值的后面输入 .var ,比如 10.var

删除一行:ctrl + y

在一个类中查找方法:ctrl + F12

Java 方法

方法定义

1.方法本质上就是一段可以被重复利用的代码片段  每个方法都是一个独立的封装好的功能

2.方法要执行的话,必须要去调用它,比如:

public class Test01 {
       public static void main(String[] args){
         
       sum(100,200)   //调用方法
}
       //定义方法
       public static void sum(int a,int b){
        int c = a + b;
        System.out.println(a + "+" + b + "=" + c);
}
}

3.语法格式:[修饰符列表] 返回值类型 方法名 (形参列表){  方法体; }

目前,修饰符列表这一块,统一编写public static,具体原因后面学习补充

返回值类型:可以是java语言中任何一种数据类型,包括基本数据类型和引用数据类型,就是byte int那些

如果方法执行结束的时候没有返回任何数据给调用者,返回类型写:void

返回类型是int,方法结束就返回一个整数给调用者

返回类型是String,方法结束就返回一个字符串给调用者

返回类型是void,方法结束就不会返回任何数据给调用者

4.当返回值类型不是void的时候,方法在结束的时候必须使用“return 值”;语句来完成数据的返回

如果是void,可以使用“return;”来结束语句,也可以不使用,绝对不可以返回一个值

5.return语句有两种写法:
第一种:return 值;

第二种:return;

不管是哪一种,只要return语句执行,方法必然结束

6.当调用一个返回值类型不是void的方法时,方法结束时会返回值,可以采用变量接收,但是类型要一致

7.方法名:一般都是首字母小写,后面的单词首字母大写

方法调用

格式:类名.方法名()

调用者 和 被调用者 在同一类的情况下,可以省略 类名.

但是在不同类的情况下,必须遵循这个格式

以下是一个登录界面,可以更好帮助理解方法的定义与调用

import java.util.Scanner;

public class Test01 {
    public static void main(String[] args){
        login();
    }
    public static void login(){
        Scanner scanner = new Scanner(System.in);
        System.out.println("用户名:");
        String username = scanner.next();
        System.out.println("密码:");
        String password = scanner.next();
        boolean isOk = check(username,password);

        if (isOk){
            System.out.println("登录成功");
        }
        else{
            System.out.println("登陆失败");
        }
    }
    public static boolean check(String username,String password){
        return username.equals("admin") &&  password.equals("123456");
    }
}

方法重载(overload)

方法重载,程序员使用起来很轻松

就比如,System.out.println( ) 这个方法就是算是在java.io.PrintStream类中的方法重载,我们可以往里面传各种实参,只需要记住这个方法名就好,十分方便


Java重载,即可以在同一个类中定义多个构造方法,只要参数列表不同即可

当一个程序满足怎样的条件时,代码就构成了方法重载呢

条件1:在同一个类中;

条件2:方法名一致

条件3:形参列表不同:类型不同算不同、顺序不同算不同、个数不同算不同

//形参的个数不同
public static void m1(){ }
public static void m1(String s){ }

//形参的类型不同
public static void m2(int a,int b){ }
public static void m2(long a,long b){ }

//形参的顺序不同
public static void m3(String a,int b){ }
public static void m3(int b,String a){ }

//以下两个方法没有构成方法重载:
public static void noOverload(int a,int b){ }
public static void noOverload(int x,int y){ }

方法递归

方法递归就是方法递归调用自己

一般来说,初学者能循环就循环处理,不建议方法递归,因为递归占内存较大,没有结束语句的话,还会导致栈内存溢出错误

如果要使用,记得有结束语句

举个例子理解一下,斐波那契数列(关于一对兔子每三个月新生一对新兔子,求对应月数总数问题)



public class Test01 {
    public static void main(String[] args) {
        int n = 12;
        int total = rabbit(n);
        System.out.println(total);
    }
    public static int rabbit(int n) {
        if(n == 1 || n == 2){
            return 1;
        }
        return rabbit(n - 1) + rabbit(n - 2);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值