java基础总结


java基础总结

参考《java2 实用教程》
简介:个人的java笔记,为了日后学习方便,用来记录所学的东西

一、基础数据类型与数组

1. 标识符与关键字

  1. 标识符
    • 由字母、下划线、美元符号和数字组成
    • 第一个字符不能是数字
    • 不能是关键字
  2. Unicode
    • 前128刚好是ASCII码
    • 包括世界上大部分语言中的字母表
  3. 关键字:关键字通常以小写字母开头,例如:String不是关键字

2. 基本数据类型

  • 布尔型(boolean)
    • 取值true/false
  • 整型
    • int型:
      • 4个字节内存,占24位
    • byte型:
      • 1个字节内存,占8位,取值:-128~127
      • 如果想要强调一个整数是byte/short型,可以使用强制类型转换来表示。例如(short)-12,(short)28
    • short型:
      • 2个字节内存,占16位,取值:-32768~32767
    • long型:
      • 8个字节内存,占64位
      • long型常量用后缀L来表示,例如:12L
    • java没有无符号的byte,short,int和long,因此unsigned int m是错误声明
  • 字符类型
    • char型
      • 分配2个字节内存占16位,无负数char
      • 常见的转义字符:\n(换行),\b(退格),\t(水平制表),’(单引号),"(双引号),\(反斜线)
      • 可以用字符在Unicode表中排序位置的十六进制转义(以u为前缀)来表示该字符,格式:'u****'例如:'u0041'为A

3. 类型转换规则

  1. 当把级别低的变量赋值给级别高的变量时,系统自动完成数据类型转换。级别低的转换成为级别高的,它的内存是确定足够用的,所以可以自动类型转换,不会造成精度缺失
  2. 当把级别高的变量赋值给级别低的变量时,必须使用类型转换运算(强制类型转换),格式:(类型名)要转换的值
    例如:float m = 5.6;这种表达是错误的,必须进行强制类型转换:float m = 5.6f

4. 输入和输出数据

  1. Scanner类输入数据
    1. 先用Scanner 创建一个对象
      Scanner sc = new Scanner(System.in);
    2. sc调用下列方法进行输入
      nextBoolean(),nextByte(),nextShort(),nextInt(),nextLong(),next()等
  2. 输出的几种形式
    • System.out.println();
    • System.out.print();
    • System.out.printf(“格式控制部分”,表达式1,表达式2···);
    • 对于数组:
      • 一般数组System.out.println(m);输出的是数组m的引用
      • 对于char型数组,System.out.println(m);输出的是数组的全部内容
      • 如果要输出char的引用,必须让数组a和字符串做并置运算:System.out .println(" "+a);

5.数组

  1. 定义数组

    int [] a,b;//等价于int a[],b[];
    int [] a,b[];//等价于int a[],b[][];

  2. 为数组分配元素
    1. 数组属于引用类型变量,数组变量中存放着数组的首元素的地址,通过数组变量的名字加索引使用数组的元素
    2. 数组的声明和创建可以一起完成:int a[] = new int [5];无论是二位数组还是一维数组,在声明之后必须用new运算符为数组分配元素
int a[][] = new int[3][];
a[0] = new int[2];
a[1] = new int[6];
a[2] = new int[4];
//创建了一个二维数组a,由三个一维数组组成,但是长度未知(还没有为这些数组分配元素),因此必须要创建三个一维数组
  1. length函数(数组名.length;它的值就是数组中元素的个数)

int a[2][3];则a.lenght = 2,a[1].length = 3

二、运算符、表达式和语句

1. 运算符与表达式

  1. 算术混合运算精度
    1. 精度从“高”到“低”的排列顺序是:
      byte short char int long float double
    2. 计算算术表达式的值时,使用以下的运算精度规则:
      表达式的最高精度式什么类型的数据,就按照该数据的精度进行运算,例如,12L+100+‘a’ 的运算结果是209L,因为表达式中最高精度是long型整数
  2. 关系运算符
    1. 关系运算符是二目运算符,用来比较两个值的关系,关系运算符的运算结果是Boolean类型,关系成立时值为true
  3. 逻辑运算符与逻辑表达式
    1. &&与||是二目运算符,其优先级低于关系运算符,!是单目运算符,优先级高于关系运算符,结果为boolean类型。
  4. 赋值运算符与赋值表达式
    • =是一个二目运算符,优先级低于关系运算符
  5. 位运算符
    1. 整型数据在内存中以二进制的形式表示,左面最高位是符号位,最高位是0表示正数,是1表示负数。负数采用补码表示,例如-8的补码是:11111111 11111111 11111111 11111000
    2. 按位与运算:运算符&为双目运算,对两个整型数据a,b按位进行运算,结果为整数c:如果a、b两个数据对应位都是1,则c该位位1,否则为0,如果b的精度高于a,那么c的精度与b相同
    3. 按位或运算:运算符|是二目运算符:如果a、b两个数据对应位都是0,则c该位是0,否则是1,c的精度和a、b中较高者相同
    4. 按位非运算:运算符~是单目运算符,对一个整型数据a、进行按位运算,运算结果是一个整型数据c:如果a对应位是0,则c该位是1
    5. 按位异或运算:运算符^是二目运算符:如果a、b两个数据对应位相同,则c该位是0,否则是1.如果b的精度高于a,那么c的精度与b相同。
    6. 位运算也可以操作逻辑型数据

2. 语句

  1. 方法调用语句、表达式语句、复合语句、空语句、控制语句、package和import语句
  2. if和if-else语句
  3. switch语句:如果表达式的值和某个case后面的常量值相等,就执行该case里的若干语句知道遇到break为止
  4. for循环,while循环,do-while循环
  5. break,continue语句,continue:如果在某次循环中执行了continue语句,那么本次循环就结束,即不再执行本次循环中循环体中continue语句后面的句子。
  6. for语句与数组
    1. 格式:
      for(声明循环变量: 数组的名字){·····}
    2. 声明的循环变量的类型必须和数组的类型相同:对于循环变量依次去数组中的每一个元素的值。
      int a[] = {1,2,3,4};
      char b[] = {'a','b','c','d'};
      for(int n = 0;n < a.lenght; n++){
      	System.out.println(a[n]);//传统方式
      }
      for(int i:a){
      	System.out.println(i);
      }```
      
      

三、类与对象

1. 面向对象的三大特性

  1. 封装性
    面向对象的核心思想之一就是将数据和对数据的操作封装在一起,通过抽象,即从具体的实例中抽取出共同的性质形成的一般概念。
  2. 继承
    子类可以继承父类的属性和行为,即继承父类所具有的数据和数据上的操作,同时又可以增添子类独有的数据和数据上的操作
  3. 多态
    有两种意义上的多态:
    1. 操作名称的多态,即有多个操作具有相同的名字,但这些操作所接收的消息类型必须不同。所谓操作名称的多态性,是指可以向操作传递不同消息,一遍让对象根据相应的消息来产生相应的行为
    2. 另一种多态和继承有关,是指同一个操作被不同类型对象调用时可能产生不同的行为**

2. 类

  1. 类时java最重要的“数据类型”,类的定义包括类声明和类体,格式:

class 类名{ 类体的内容 }

  1. 类体
    类的目的是抽象出一类事物共有的行为,并用一定的语法格式来描述所抽象出的属性和行为

  2. 成员变量
    类中的内容可以分为:1. 变量的声明 2. 方法的定义

  3. 方法

    方法类型 方法名 (参数列表){
    方法体的内容;
    }

    1. 方法中的内容包括局部变量的声明和语句,在方法体内可以对成员变量和方法体中声明的局部变量进行操作
    2. 成员变量与局部变量
      如果成员变量的名字与局部变量的名字相同,那么成员变量被隐藏,即该成员变量在这个方法内暂时失效。如果在方法体中,想使用被隐藏的成员变量,必须使用关键字this
    3. 成员变量有默认值,但是局部变量没有默认值,因此在使用局部变量时必须保证局部变量有具体的值
  4. 注意⚠️:
    类体的内容由两部分组成:一部分是变量的声明;另一部分是方法的定义。对成员变量的操作只能放在方法中。方法体使用语句对成员变量和局部变量进行操作。

3.构造方法与对象的创建

在java中用类声明的变量叫做对象。和基本数据类型不同的是,在声明对象之后必须创建对象(即确定对象所具有的属性)。

  1. 构造方法是一种特殊的方法:
    1. 方法名必须与对象名相同
    2. 构造方法没有类型。
    3. 一个类里可以有很多个构造方法,但是这些构造方法的参数列表(参数或参数个数)必须不同
    4. 当没有为类构造方法时,类里面有一个隐含的构造方法,这个构造方法既没有参数列表,也没有方法体。
      下面就是默认构造方法的格式
public 构造方法名(){
(这里没有任何东西)
}
  1. 创建对象
    包括对象的声明和为对象分配变量两个步骤。
    1. 格式:类的名字 对象的名字;
    2. 为声明的对象分配对象:用new运算符和类的构造方法为声明的对象分配变量。格式:
      类名 对象名 = new 类名(参数列表)如果构造方法的参数列表为空的,这里的就为类名 对象名 = new 类名()
    3. 注意⚠️:如果java的类中自己写了构造方法,那么Java就不给你提供默认的构造方法,如果你没有写无参数列表的构造方法,但你写了其他构造方法,就不能通过类名 对象名 =new 类名()来创建并分配对象
    4. 创建对象时内存中的状态:用类Animal创建一个对象bird之后,bird被声明后还没有任何空间,因而我们就要给bird这个对象分配空间,这时候我们就需要用到new和构造方法,new和构造方法运行时
      • 为bird的各个变量分配内存,然后执行构造方法中的语句。如果声明时和使用构造方法时成员变量没有初始化,系统就会给这些变量一个默认初始值。
      • new为bird的变量分配内存后,将计算出一个称作引用的值,然后把这个引用赋值给bird。引用的内容就类似于C里面的地址
      • 由此可以看出创建对象的本质就是为对象分配变量,获得引用值,以达到对象的变量能被对象操作管理。创建一次对象就分配一次空间。
        对象的引用存在栈中,对象的实体(变量)存在堆中,栈与堆都存在RAM中

其他内容:

子类与继承

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值