Java基础

Java基础

注释

1. 单行
2. 多行
3. 文件注释

变量

分为:

  1. 基本数据类型(CPU可以直接进行运算的类型)
  2. 引用数据类型

基本数据类型:

  • 整数类型:byte,short,int,long
  • 浮点数类型:float,double
  • 字符类型:char
  • 布尔类型:boolean

各个数据类型能表示的值的范围。

  • byte:-128 ~ 127
  • short: -32768 ~ 32767
  • int: -2147483648 ~ 2147483647
  • long: -9223372036854775808 ~ 9223372036854775807

各个数据类型所占的字节数

     ┌───┐
byte │   │
     └───┘
     ┌───┬───┐
short │   │   │
     └───┴───┘
     ┌───┬───┬───┬───┐
 int │   │   │   │   │
     └───┴───┴───┴───┘
     ┌───┬───┬───┬───┬───┬───┬───┬───┐
long │   │   │   │   │   │   │   │   │
     └───┴───┴───┴───┴───┴───┴───┴───┘
     ┌───┬───┬───┬───┐
float │   │   │   │   │
     └───┴───┴───┴───┘
     ┌───┬───┬───┬───┬───┬───┬───┬───┐
double │   │   │   │   │   │   │   │   │
     └───┴───┴───┴───┴───┴───┴───┴───┘
     ┌───┬───┐
char │   │   │
     └───┴───┘

float

后缀需要加上f

char

使用的是‘’单引号

位运算

与(&)或(|)非(~)异或(^)

与 两边同时为1 结果就是1

或 任意一个为1 结果就是1

非 0与1互换

异或 两个数不同结果是1

运算符的优先级

  • ()
  • ! ~ ++ --
  • * / %
  • + -
  • << >> >>>
  • &
  • |
  • += -= *= /=

关系运算符的优先级

  • !
  • >>=<<=
  • ==!=
  • &&
  • ||

类型自动提升与强制类型

在运算的过程中如果两个数 的类型不一致,那么计算结果为较大的类型。

强制类型转换时

浮点数运算

  1. 不能做为运算和移位运算

    整数除以0会报错 浮点数除以0不会报错

    强制类型转换 浮点数转换为整数时要想满足四舍五入那么需要+0.5再进行四舍五入

字符串

多行字符串""" “”"

字符串的不可变性

public class Main { public static void main(String[] args) { String s = "hello"; String t = s; s = "world"; System.out.println(t); // t是"hello" } }

数组

特点:

  1. 所有元素初始的值是默认的 整型都是0,浮点型是0.0,布尔型是false
  2. 数组一旦创建,大小不变。

数组遍历

public class Main { public static void main(String[] args) { int[] ns = { 1, 4, 9, 16, 25 }; for (int n : ns) { System.out.println(n); } } }

上面是通过for each

缺点:无法拿到数组的索引 n拿到的是数组的数

Arrays.toString()可以快速打印数组的内容

import java.util.Arrays;

public class Main { public static void main(String[] args) { int[] ns = { 1, 1, 2, 3, 5, 8 }; System.out.println(Arrays.toString(ns)); } }

Arrays.sort() 可以将数组进行快速排序

Arrays.deepToString()可以便利二维数组

面向对象编程

面向对象的基本概念,包括:

  • 实例
  • 方法

面向对象的实现方式,包括:

  • 继承
  • 多态

Java语言本身提供的机制,包括:

  • package
  • classpath
  • jar

以及Java标准库提供的核心类,包括:

  • 字符串
  • 包装类型
  • JavaBean
  • 枚举
  • 常用工具类

class 本身就是一种数据类型 instance是根据class创建的实例,可创建多个instance但各自的属性可能不同

定义方法

修饰符 方法返回类型 方法名(方法参数列表) {
    若干方法语句;
    return 方法返回值;
}

可变参数

可变参数可以用类型...表示

而可变参数可以保证无法传入null,因为传入0个参数时,接收到的实际值是一个空数组而不是null

参数绑定

基本类型参数的传递,是调用方值的复制。双方各自修改后,互不影响。

引用类型参数的传递,调用方的变量和接收方参数变量,指向的是同一个对象。双方任意一方对这个对象的修改,都会影响对方,因为指向同一个对象。

构造方法

  1. 没有返回值

  2. 名称就是类名

  3. 如果认为没有写构造方法那么计算机就产生一个默认的构造方法

  4. 在Java中创建对象实例的时候,初始化值时遵从下面的顺序

    1先初始化字段,例如,int age = 10;表示字段初始化为10double salary;表示字段默认初始化为0String name;表示引用类型字段默认初始化为null

    2执行构造方法的代码进行初始化

  5. 构造方法可以重载,即构造方法可以写多个,构造方法间也可以相互调用。用this()

方法重载

  1. 方法重载的返回值的类型通常是相同的

继承

使用extends关键字来实现继承

子类自动获得父类的字段,严禁定义与父类重名的字段

父类又称为超类(super class),基类(base class)

子类又称为扩展类(extended class)

特点:

  1. 子类无法访问父类的private的字段或者方法
  2. 使用protected的关键字就可以了

java访问权限总结

Java中外部类的修饰符

修饰符
public权限修饰符,该类能被项目中的所有类可见
default(缺省)权限修饰符,同一个包中可见
abstract性质修饰符,抽象类
final最终类

Java****中类的成员修饰符

成员 修饰符成员变量成员方法
private权限修饰符,私有权限修饰符,私有
Default(缺省)权限修饰符,缺省权限修饰符,缺省
protected权限修饰符,保护权限修饰符,保护
public权限修饰符,公有权限修饰符,公有
static性质修饰符,类变量性质修饰符,类方法
final性质修饰符,常成员变量性质修饰符,最终方法
abstract性质修饰符,抽象方法
synchronized性质修饰符,线程同步

Java中成员的访问权限总结

由于类中封装了数据和代码,包中封装了类和其它的包,所以Java提供了在四种范围中访问权限的控制,即:1.同一个类中;2.同一个包中;3.不同包中的子类;4. 不同包中的非子类。访问权限的控制如下表所示:

范围 权限同一个类中 **(**直接使用成员名)同一个包的 (子类中:直接使用成员名) (不同类中:对象名. 成员名)不同包的子类中 (直接使用成员名)不同包的非子类中 (对象名 成员名)
private
default(缺省)
protected
public

说明:

\1. 在同一个类中,所有成员可以直接使用成员名访问或调用(构造方法除外,成员名与局部变量同名除外);

\2. 同一个包的子类中,父类的default、protected、public成员可见,可以直接使用成员名访问或调用;

\3. 同一个包的不同类中,可以用:对象名**.** 成员变量名对象名**.** 成员方法名**(参数)** 的方式访问另一个类中default、protected、public数据成员或调用方法成员;

\4. 不同包的子类中,父类的protected、public成员可见,可以直接使用成员名访问或调用;

\5. 不同包的不同类中,可以用:对象名**.** 成员变量名对象名**.** 成员方法名**(参数)** 的方式访问另一个public数据成员或调用方法成员;

super

超类

  1. 在构造方法中第一行语句必须是父类的构造方法,,如果没有调用父类的构造方法,编译器会自动生成super();在任何一个class中都必须在最前面调super
  2. 子类不会继承父类的构造方法
  3. java15开始允许sealed修饰class,并通过permits写出可以可以从该class继承的父类的名称
  4. 正常情况下只要class没有final修饰符那么任何类都可以由该类继承

向上转型

引用类型变量可以指向其子类的实例对象

不可以向下转型

instanceof

instanceof实际上判断一个变量所指向的实例是否是指定类型,或者这个类型的子类。

多态

覆写:Java中子类如果定义了一个方法签名和父类相同的方法,被称为覆写

Override和Overload不同的是,如果方法签名如果不同,就是Overload,Overload方法是一个新方法;如果方法签名相同,并且返回值也相同,就是Override

Java的实例方法调用是基于运行时的实际类型的动态调用,而非变量的声明类型。

特性

运行期才能动态决定调用的子类方法。

如果父类不想的一个方法不想被子类覆写那么在该方法用final修饰

可以在构造方法中初始化final字段

final修饰符作用:

  • final修饰的方法可以阻止被覆写;
  • final修饰的class可以阻止被继承;
  • final修饰的field必须在创建对象时初始化,随后不可修改。

抽象类

如果父类的方法本身不需要实现任何功能,仅仅是为了定义方法签名,目的是让子类去覆写它,那么,可以把父类的方法声明为抽象方法

abstract

如果一个class定义了方法,无具体执行代码那么这个方法就是抽象方法用 abstract修饰,因为无法执行抽象方法,这个类必须声明为抽象类用 abstract无法实例化一个抽象类。

抽象类只能被继承

接口

  1. interface可以用来声明一个接口
  2. 所谓**interface**,就是比抽象类还要抽象的纯抽象接口,因为它连字段都不能有。因为接口定义的所有方法默认都是public abstract的,所以这两个修饰符不需要写出来(写不写效果都一样)。
  3. 在接口中可以定义default方法
  4. default方法和抽象类的普通方法是有所不同的。因为interface没有字段,default方法无法访问字段,而抽象类的普通方法可以访问实例字段。
  5. 可以多继承

静态字段和静态方法

  1. 每个实例字段都有独立的空间,用static修饰的字段称为静态字段,有一个共享的空间。

  2. 对于静态字段无论修改哪个静态字段效果都一样,

  3. 推荐用类名来访问静态字段,通过类名来调用静态方法

  4. 静态字段和静态方法属于class而不属于实例,因此静态方法内部无法使用this也无法访问实例字段。

  5. main()也是静态方法

  6. interface不能定义实例字段但它可以定义静态字段,public interface Person{

    public static final int s = “ss”}`

package

包没有父子关系

import

import static 可以导入一个类的静态字段和静态方法

如果有两个class的名称相同,只能import其中的一个,另一个必须全部名称引入

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值