Java基础学习笔记(持续更新)

Java基础

前言:较为基础的内容就不记录了

Java的三个体系

  • JavaSE
    JavaSE(J2SE)(Java2 Platform Standard Edition,java平台标准版)
  • JavaEE
    JavaEE(J2EE)(Java 2 Platform,Enterprise Edition,java平台企业版)
  • JavaME
    JavaME(J2ME)(Java 2 Platform Micro Edition,java平台微型版)。

Java的三大特性

  • 封装

  • 继承

  • 多态


Java标识符命名规则

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

Java关键字:
类、方法和变量修饰符:abstract、class、implements、interface、native、new、 strictfp、static、synchronized、transient、volatile、extends、enum
程序控制语句:break、case、continue、do、else、for、if、return、instanceof、switch、while
基本类型:boolean、byte、char、double、float、int、long、short
访问控制:private、protected、public、default
包相关:import、package
变量引用:super、this、void
保留关键字:goto、const
错误处理:assert、final、finally、catch、try、throw、throws

注意:Java 的 null 不是关键字,类似于 true 和 false,它是一个字面常量,不允许作为标识符使用。

Java修饰符

Java可以使用修饰符来修饰类中方法和属性。主要有两类修饰符:

  • 访问控制修饰符 : default, public , protected, private
  • 非访问控制修饰符 : final,abstract, static, synchronized

1-访问控制修饰符

修饰符当前类同一包内子孙类(非同包)其他包
publicYYYY
protectedYYY/NN
defaultYYNN
privateYNNN
protected 可以修饰数据成员,构造方法,方法成员,不能修饰类(内部类除外)。
接口及接口的成员变量和成员方法不能声明为 protected。

2-非访问控制修饰符

  • static 修饰符,用来修饰类方法和类变量。
  • final 修饰符,用来修饰类、方法和变量,final
    修饰的类不能够被继承,修饰的方法可以被继承,不能被继承类重新定义,修饰的变量为常量,是不可修改的。
  • abstract 修饰符,用来创建抽象类和抽象方法。
  • 一个类不能同时被 abstract 和 final 修饰。
  • 任何继承抽象类的子类必须实现父类的所有抽象方法,除非该子类也是抽象类。
  • volatile 修饰的成员变量在每次被线程访问时,都强制从共享内存中重新读取该成员变量的值。而且,当成员变量发生变化时,会强制线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。
  • synchronized 和 volatile 修饰符,主要用于线程的编程。

Java枚举

枚举可以单独声明或者声明在类里面。方法、变量、构造函数也可以在枚举中定义。
Java 5.0引入了枚举,枚举限制变量只能是预先设定好的值。使用枚举可以减少代码中的 bug。


Java对象和类

构造方法

构造方法是类的一种特殊方法,用来初始化类的一个新的对象,在创建对象(new 运算符)之后自动调用。Java 中的每个类都有一个默认的构造方法,并且可以有一个以上的构造方法。
Java 构造方法有以下特点:

  • 方法名必须与类名相同
  • 可以有 0 个、1 个或多个参数
  • 没有任何返回值,包括 void
  • 默认返回类型就是对象类型本身
  • 只能与 new 运算符结合使用

需要注意的是:

  1. 如果为构造方法定义了返回值类型或使用 void 声明构造方法没有返回值,编译时不会出错,但 Java 会把这个所谓的构造方法当成普通方法来处理。
  2. 构造方法不能被 static、final、synchronized、abstract 和 native(类似于 abstract)修饰。
  3. 构造方法用于初始化一个新对象,所以用 static 修饰没有意义。
  4. 构造方法不能被子类继承,所以用 final 和 abstract 修饰没有意义
  5. 多个线程不会同时创建内存地址相同的同一个对象,所以用 synchronized 修饰没有必要。
  6. 在一个类中,与类名相同的方法就是构造方法。每个类可以具有多个构造方法,但要求它们各自包含不同的方法参数。

Java数据类型

1-基本数据类型

Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。

1个字节是8个比特,即:1Byte = 8bit
二进制的一位,就叫做 1 比特,比特要么为 0 要么为 1
通常来说,一个英文字符是一个字节,一个中文字符是两个字节
1KB=1024B
1MB=1024KB
1GB=1024MB
1TB=1024GB

类型大小默认值
byte1byte8位0
short2byte16位0
int4byte32位0
long8byte64位0L
float4byte32位0.0f
double8byte64位0.0d
boolean1位false
char2byte16位‘\u0000’

自动类型转换:

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

强制类型转换:

  1. 条件是转换的数据类型必须是兼容的。
  2. 格式:(type)value type是要强制类型转换后的数据类型

2-引用数据类型

在Java中,引用类型的变量非常类似于C/C++的指针。引用类型指向一个对象,指向对象的变量是引用变量。这些变量在声明时被指定为一个特定的类型,比如 Employee、Puppy 等。

  • 变量一旦声明后,类型就不能被改变了。
  • 对象、数组都是引用数据类型。
  • 所有引用类型的默认值都是null。
  • 一个引用变量可以用来引用任何与之兼容的类型。

Java变量类型

1-类变量(静态变量)

 独立于方法之外的变量,用 static 修饰
  • 无论一个类创建了多少个对象,类只拥有类变量的一份拷贝
  • 静态变量储存在静态存储区。经常被声明为常量,很少单独使用 static 声明变量
  • 静态变量可以通过:ClassName.VariableName的方式访问

2-实例变量

独立于方法之外的变量,不过没有 static 修饰。
  1. 实例变量在对象创建的时候创建,在对象被销毁的时候销毁
  2. 实例变量的值应该至少被一个方法、构造方法或者语句块引用,使得外部能够通过这些方式获取实例变量信息
  3. 实例变量可以声明在使用前或者使用后
  4. 访问修饰符可以修饰实例变量
  5. 实例变量具有默认值
  6. 实例变量可以直接通过变量名访问。但在静态方法以及其他类中,就应该使用完全限定名:ObjectReference.VariableName

3-局部变量

类的方法中的变量
  1. 访问修饰符不能用于局部变量
  2. 局部变量是在栈上分配的
  3. 局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用

Java运算符

1-位运算符

在这里插入图片描述

2-instanceof 运算符

检查该对象是否是一个特定类型(类或接口)
例如:

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

如果被比较的对象兼容于右侧类型,该运算符仍然返回 true。

Java循环结构

Java中有三种主要的循环结构:

  • while 循环
  • do…while 循环
  • for 循环

Java5 引入了一种主要用于数组的增强型 for 循环。

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

Java Switch case语句

switch-case 语句是判断一个变量与一系列值中某个值是否相等的语句。

switch(expression){
    case value :
       //语句
       break; //可选
    case value :
       //语句
       break; //可选
    //你可以有任意数量的case语句
    default : //可选
       //语句
}
  • switch 语句中的变量类型可以是: byte、short、int 或者 char。从 Java SE 7 开始,switch 支持字符串 String 类型了,同时 case 标签必须为字符串常量或字面量
  • case 语句中的值的数据类型必须与变量的数据类型相同,而且只能是常量或者字面常量
  • 如果 case 语句块中没有 break 语句时,匹配成功后,从当前 case 开始,后续所有 case 的值都会输出

Java Character类

常用方法:

isLetter()	是否是一个字母
isDigit()	是否是一个数字字符
isWhitespace()	是否是一个空白字符
isUpperCase()	是否是大写字母
isLowerCase()	是否是小写字母
toUpperCase()	指定字母的大写形式
toLowerCase()	指定字母的小写形式
toString()	返回字符的字符串形式,字符串的长度仅为1

Java String类

1-创建字符串

//String创建的字符串存储在公共池中
String a = "hello"; //String直接创建
String b = "hello"; //String直接创建
//a和b指向公共池中的同一个hello字符串

//new 创建的字符串对象存储在堆上
String a1 = new String("hello"); // String 对象创建
String b1 = new String("hello"); // String 对象创建
//a1和b1在堆中创建的是不同字符串

2-String常用方法

length()	字符串长度
concat()	字符串连接
char charAt(int index)	返回指定索引处的char值
boolean endsWith(String suffix)	是否以指定的后缀结束
boolean matches(String regex)	字符串是否匹配给定的正则表达式
String[] split(String regex)	根据给定正则表达式的匹配拆分此字符串
char[] toCharArray()	将此字符串转换为一个新的字符数组
String toLowerCase()	将此 String 中的所有字符都转换为小写
String toUpperCase()	将此 String 中的所有字符都转换为大写
String trim()		返回字符串的副本,忽略前导空白和尾部空白

3-StringBuffer和StringBuilder

StringBuffer(JDK1.0):

线程安全,执行速度慢

StringBuilder(JDK5.0):

非线程安全,执行速度快

使用原则:

如果要操作少量的数据,用String

单线程操作大量数据,用StringBuilder

多线程操作大量数据,用StringBuffer

Java Arrays类

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值