java学习笔记_1_基础语法

1 基础语法

// 说明:学习java笔记。根据学习资源(用到的学习资源在下面分享了)整理,有纰漏欢迎指正讨论。
// 此篇为基础语法。目录如下:

1.0 学习资源

Java基础知识学习网站:github

java基础知识项目网站:github项目网站

wc3school:wc3school java

Java知识字典(总结的很好的一文档,可当作字典查阅): 百度网盘链接,提取码:65nd

Java8实战书籍(基础知识只看前三章):百度网盘链接,提取码:dfuv

java帮助文档1.6:百度网盘链接 ,提取码:wwmi
(官方翻译,阅读通畅)

java帮助文档1.8:百度网盘链接,提取码:6dsj (jdk8 机翻)

视频(黑马):黑马全套java教程bilibili

1.1 基本规则

1.1.1 命名规则
  • 大小写敏感

    Java是大小写敏感的,这就意味着标识符Hello与hello是不同的。

  • 类名

    对于所有的类来说,类名的首字母应该大写。如果类名由若干单词组成,那么每个单词的首字母应该大写,例如 MyFirstJavaClass 。

  • 方法名

    所有的方法名都应该以小写字母开头。如果方法名含有若干单词,则后面的每个单词首字母大写。

  • 源文件名

    源文件名必须和类名相同。当保存文件的时候,你应该使用类名作为文件名保存(切记Java是大小写敏感的),文件名的后缀为.java。(如果文件名和类名不相同则会导致编译错误)。

  • 主方法入口

    所有的Java 程序由**public static void main(String*[]* args)**方法开始执行。

  • 标识符

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

    • 所有的标识符都应该以字母(A-Z或者a-z),美元符($)、或者下划线(_)开始
    • 首字符之后可以是任何字符的组合
    • 关键字不能用作标识符
    • 标识符是大小写敏感的
    • 合法标识符举例:age、$salary、_value、__1_value
    • 非法标识符举例:123abc、-salary
1.1.2 源文件声明规则
  • 源文件与类:

    • 一个源文件只能有一个public类,且源文件名与该public类同名。(也可以没有)
    • 一个源文件中可以有多个非public类。
    • 原理:源文件中可以有多个类,每个类在编译的时候产生一个.class文件,它们是程序运行时候的数据来源,一个源文件为一个编译单元,java将public类作为每个编译单元的数据接口。只能有一个,且该public类名与源文件名称相同,不然不能处理存在多个类的java文件。也可以没有public类。
  • .java文件中的声明顺序

    • 首行:如果类定义在某个包中,那么package语句应该在源文件的首行
    • 引包:import语句在package语句和类定义之间
    • 类定义

1.2 类、对象

一个java程序可以认为是一系列对象的集合,而这些对象通过彼此调用彼此的方法协同工作。本章讲述基础概念,其他类和对象相关知识在面向对象部分会有更深入的介绍。

1.2.1 概念:

**类:**类可以看作一个模板,描述一类对象的状态和行为

**对象:**对象是类的一个实例,有具体的状态和行为

1.2.2 对象的创建:

**构造方法:**构造方法是通过类在创建对象的时候,调用的方法。

  • 构造方法与类同名。
  • 每个类都有构造方法,如果没有显示地为类定义构造方法,java编译器会自动为该类提供默认构造方法
  • 构造方法除了可以创建对象,还会对其进行初始化
  • 构造方法其他细则:csdn Java中的构造方法

对象创建过程:

  • 声明:声明一个对象,包括兑现名称和类型
  • 实例化:使用关键字new创建一个对象
  • 初始化:调用构造方法初始化对象

1.3 方法、变量、常量

**方法:**方法就是行为,一个类可以有很多的方法,逻辑运算、数据修改以及所有的动作都是在方法中完成的。

变量:

  • 局部变量:方法、构造方法、语句块中定义的变量。(属于某方法)
  • 成员变量:类中,方法体外的变量。(属于某对象)
  • 静态变量:类中,方法体外中定义,static类型,为全局变量,所有对象所共享。(属于某类多有对象)
成员变量(实例变量)局部变量静态变量(类变量
类中的位置类中方法外类中方法或代码块内类中方法外,用static修饰
在内存中的位置在对象被建立时,被实例化,在内存堆中随着方法进入栈中方法区
生命周期与对象共存亡随着方法调用而存在与类共存亡
初始化有默认初始值无默认初始值,需要先定义,赋值后再使用有默认初始值

常量:

常量是一个固定值。用final标志。为了便于识别,通常用大写字母表示常量。

1.4 修饰符

​ 定义类、方法或者变量,通常放在语句最前端。主要分为以下两类:

1.4.1 访问修饰符
default

default即默认无修饰符。在同一个包内可见。

private

同一类内可见。功能是隐藏类的实现细节,保护类的数据。可通过类中的public方法访问。

public

对所有类可见。

protected

对同一包内的类∪所有的子类可见(包括不同包中的子孙类)

控制访问与继承:(此处详见面对对象编程中的继承小节)

  • 父类中声明为public的方法在子类中也必须为public
  • 父类中声明为protected的方法在子类中可为protected、public
1.4.2 非访问修饰符
static
  • 静态变量:也称类变量。声明独立于对象的静态变量,无论一个类实例化多少对象,它的静态变量只有一份拷贝。静态变量也被称为类变量。局部变量不能被声明为static变量。
  • 静态方法:独立于对象的静态方法。静态方法不能使用类的非静态变量。静态方法从参数列表得到数据,然后计算这些数据。
final
  • final类:不能陪继承,没有类能继承final类的任何特性。

  • final方法:不能被继承类重新定义

  • final变量:常量,不可修改。为了与变量进行区分,通常大写。

    final double PI = 3.1415927;
    

    ·深入理解:csdn:java中的final与效率

abstract
  • 抽象类:

    • 抽象类不能用来实例化对象,声明抽象类的唯一目的是为了将来对该类进行扩充。

    • 一个类不能同时被 abstract 和 final 修饰。如果一个类包含抽象方法,那么该类一定要声明为抽象类,否则将出现编译错误。

    • 抽象类可以包含抽象方法和非抽象方法。

    • 例子:

      abstract class Caravan{
         private double price;
         private String model;
         private String year;
         public abstract void goFast(); //抽象方法
         public abstract void changeColor();
      }
      
  • 抽象方法:

    • 抽象方法是一种没有任何实现的方法,该方法的的具体实现由子类提供。抽象方法不能被声明成 final 和 static。

    • 任何继承抽象类的子类必须实现父类的所有抽象方法,除非该子类也是抽象类。

    • 如果一个类包含若干个抽象方法,那么该类必须声明为抽象类。抽象类可以不包含抽象方法。

    • 抽象方法的声明以分号结尾,例如:public abstract sample();

    • 例子:

    public abstract class SuperClass{
        abstract void m(); //抽象方法
    }
     
    class SubClass extends SuperClass{
         //实现抽象方法
          void m(){
              .........
          }
    }
    
其他

synchronized 和 volatile 修饰符,主要用于线程的编程。

1.5 运算符

该小节对略去浅显易懂的知识,细则可查看:w3school/java

1.5.1 算数运算符

1.5.2 关系运算符
1.5.3 位运算符

Java定义了位运算符,应用于整数类型(int),长整型(long),短整型(short),字符型(char),和字节型(byte)等类型。

位运算符作用在所有的位上,并且按位运算。假设a = 60,和b = 13;它们的二进制格式表示将如下:

/*
    & 与
    | 或
    ^ 异或
    ~ 补(反转)
    << 左移运算符
    >> 右移运算符
    >>> 右移补零运算符
*/
public class Test {
  public static void main(String args[]) {
     int a = 60; /* 60 = 0011 1100 */ 
     int b = 13; /* 13 = 0000 1101 */
     int c = 0;
     c = a & b;       /* 12 = 0000 1100 */
     System.out.println("a & b = " + c );

     c = a | b;       /* 61 = 0011 1101 */
     System.out.println("a | b = " + c );

     c = a ^ b;       /* 49 = 0011 0001 */
     System.out.println("a ^ b = " + c );

     c = ~a;          /*-61 = 1100 0011 */
     System.out.println("~a = " + c );

     c = a << 2;     /* 240 = 1111 0000 */      System.out.println("a << 2 = " + c );       c = a >> 2;     /* 215 = 1111 */
     System.out.println("a >> 2  = " + c );
  
     c = a >>> 2;     /* 215 = 0000 1111 */
     System.out.println("a >>> 2 = " + c );
  }
} 
1.5.4 逻辑运算符

1.5.5 赋值运算符

左操作右的得数,赋给左

1.5.6 条件运算符(?:)

条件运算符也被称为三元运算符。该运算符有3个操作数,并且需要判断布尔表达式的值。该运算符的主要是决定哪个值应该赋值给变量。

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  如果不是,b=30
       b = (a == 1) ? 20: 30;    
       System.out.println( "Value of b is : " +  b );
       
       // a的值是10吗? 如果是,b=20  如果不是,b=30
       b = (a == 10) ? 20: 30;    
       System.out.println( "Value of b is : " + b );
   }
}
1.5.7 instanceof 运算符

该运算符用于操作对象实例,检查该对象是否是一个特定类型(类类型或接口类型)。

使用格式如下:

( Object reference variable ) instanceof  (class/interface type)

实例:

String name = 'James';
boolean result = name instanceof String; // 由于name是String类型,所以返回真

1.6 数据类型

java有两大数据类型:内置数据类型和引用数据类型。

  • 内置数据类型即八种基本类型。
  • 引用数据类型变量由类的构造函数创建。对象、数组、包装类型都属于引用数据类型。

本小节讲解八种基本数据类型和其对应的包装类型。对象和数组分别在别的小节讲述。

1.6.1 基本数据类型

八种基本数据类型如下:(其他详情查看网站:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html)

数据类型所占字节bit取值范围描述默认值例子包装类
byte18-128~1270byte b = -50Byte
short216-32,768~32,7670short s = 1000Short
int432-231~231-1整型0int a = 100000,Integer
long864-263~263-1长整型0Llong a = 100000LLong
float432单精度32位浮点0.0ffloat f1 = 234.5fFloat
double864双精度64位浮点0.0ddouble d1 = 123.4Double
char216最小‘ \u0000’(即为0); 最大值是’\uffff’(即为65,535)字符char letter = ‘A’Character
boolean~~ture or false布尔,大小不精确定义falseboolean one = trueBoolean
1.6.2 包装类型

深入理解:csdn:java的基本类型和包装类型(写的很好)

将基本类型封装成对象的好处:可以在对象中定义更多的功能方法操作该数据

常用的操作:用于基本数据类型与字符串之间的转换。

对于包装类型的相关知识主要包括:获得该包装类型对象装箱拆箱类型转换方法包装类型提供的常用方法常用api。以上信息均可以通过java api帮助文档查看。此处以Integer包装类型为例,其他类型大同小异。

Integer

获得Integer对象

public class IntegerDome {
    public static void main(String[] args) {
        // public static Integer valueOf(int i); 返回表示指定的int值的Integer实例
        Integer i1 = Integer.valueOf(100);
        System.out.println(i1);

        // public static Integer valueOf(String s); 返回一个保存指定值的Integer对象String
        Integer i2= Integer.valueOf("100");
        System.out.println(i2);
    }
}
装箱和拆箱
  • 装箱:把基本数据类型转化为对应的包装类类型
  • 拆箱:把包装类类型转化为对应的基本数据类型
public class IntegerDome {
    public static void main(String[] args) {
        
        // 装箱 int变成Integer对象
        int i5 = 500;
        Integer i5integer = Integer.valueOf(i5);// 调用静态方法装箱
        Integer i5integer2 = i5; // 自动装箱
        System.out.println(i5integer2);

        // 拆箱 Integer对象变成int
        int i6 = i5integer.intValue(); //调用静态方法拆箱
        
        if(i5integer != null){
            int i7 = i5integer + 200; // 直接当成int来使用:自动拆箱   
        }
        System.out.println(i7);
        // 注:如果是Integer对象是null 不能自动拆箱。
        
    }
}
常用方法
方法说明
Integer.compara(a,b)用来比较两个Integer对象或int类型数据。如果a>b,返回值为1,如果a<b,返回值为-1,如果a==b,返回值为0。
Integer.toBinaryString()将一个Integer对象或一个整型数据转换成二进制
int 和 String 转换
public class IntegerDome {
    public static void main(String[] args) {
        // int 类型转换成 String 类型
        int number = 100;
        String s2 = String.valueOf(number);
        System.out.println(s2);
        
        // String类型转换成 int类型
        String s = "520";
        Integer i4 = Integer.paseint(s);
        System.out.println(i4);
    }
}
常用api:Math

Java 的 Math 包含了用于执行基本数学运算的属性和方法,如初等指数、对数、平方根和三角函数。

Math 的方法都被定义为 static 形式,通过 Math 类可以在主函数中直接调用。

Math类的常用方法:

方法名说明
public static int abs(int a)返回int参数的绝对值
public static double ceil(double a)向上取整(返回大于等于参数的最小整数)
public static double floor(double a)向下取整
public static int max(int a, int b)返回两个参数中大的整数
public static int round(float a)返回浮点数四舍五入后的整数结果
public static double pow(double a, double b)返回a 的b次幂
public static double random()返回double正值随机数,范围[0.0,1.0]

调用方法举例:

int a = -4;
sout(math.abs(a)); //输出a的绝对值

1.7 数据结构和集合

Java中的数据结构有栈、队列、数组、链表等。这些底层数据结构由集合框架来实现。这两部分内容比较多,详见java中的数据结构与集合。

1.8 语句结构

语句结构一共有三种:

  • 顺序语句
  • 循环语句
  • 分支语句
1.8.1 循环语句
while
int i = 0;
while(i<=19){
    //代码语句
    i++;
}
do…while
int i = 0;
do{
    //代码语句
    i++;
}while(i<=19)
for
 for(int i = 0; i <= 19; i++){
     //代码语句
 }
增强型for循环
int [] a = {10, 20, 30, 40, 50};
for(int i : a){
    // 代码语句
    // i取遍数组中的每一个
}
break

break用在循环中,基于条件控制,终止循环体内容的执行,也就是说结束当前的整个循环

continue

continue用在循环中,基于条件控制,跳过某次循环体内容的执行,继续下一次执行

1.8.2 分支语句
if

switch
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 :
        // default分支不需要有break
            System.out.println("无效等级");
      }
  • 遇到break:退出switch,执行switch后面的语句。不是一定要有break
问号语句

表达式:

        boolen-exp ? value1 : value2;【(条件表达式)?表达式1:表达式2;】

运算规则:

        a:判断条件表达式(boolean-exp),返回的结果是一个布尔值;        、
        b:如果“布尔表达式”的结果为true,那么运算结果为表达式1;        
        c:如果“布尔表达式”的结果为false,那么运算结果为表达式2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值