【Java】JavaSE基础知识

简介: 【Java】JavaSE基础知识

一、数组

1、动态初始化

int arr = new int[3];
  1. 数组名字是地址
  2. 默认初始值为0
  3. 数组的内存分配

2、数组的内存分配

  1. arr存在栈里,只存地址,是局部变量,相当于指针
  2. new出来的实体/对象存在堆里,存放数据,用完也不会立即消失
  3. 数组索引是通过地址引用堆的数据

3、数组的嵌套

int[] arr1 = new int[3];
int[] arr2 = arr1;

4、静态初始化

int[] arr = {
   1,2,3};

5、数组长度

arr.length();

二、数据接收

import java.util.Scanner;
Scanner sc = new Scanner(System.in);
int i = sc.nextInt();

三、面向对象基础

1、类的定义

public class 类名 {
   
    成员变量;
    成员方法(){
   
        方法;
    }
}

2、创建对象

类似于c++的结构体

类名 对象名 = new 类名();

3、封装

1)private关键字与get/set方法

  1. A/t + Insert能自动填充
  2. 用于保护成员变量
public class Num {
   
    private int num;
    public void setNum(int i){
   
        num = i;
    }
    public int getNum(){
   
        return num;
    }
}

2)this关键字

用于区分局部变量和成员变量

public class 类名 {
   
    private int num;
    public void setNum(int num) {
   
        this.num = num;
    }
    public int getNum() {
   
        return num;
    }
}

4、构造方法

当给出构造方法之后,系统将不再提供默认的无参构造方法

public class 类名 {
   
    private int num;
    private String name;
    public 类名() {
   }
    public 类名(int num) {
   
        this.num = num;
    }
    public 类名(String name) {
   
        this.name = name;
    }
    public show(){
   
        //用于显示对象信息
    }
}
类名 c1 = new 类名(123);
类名 c2 = new 类名(“wmh”);

四、字符串 String

1、构造方法

public String(...);
String str = "wmh";

2、字符串的比较

1)“==” 比较法
  1. 基本数据类型:比较数值
  2. 引用数据类型:比较地址
2)比较字符串:equals
//定义
public boolean quuals(Object anObj);
//使用
boolean b = str1.equals(str2);

3、字符串长度:length

//定义
public int length();
//使用
int strlen = str.length();

4、首字符查询:startsWith

//定义
boolean startsWith(Name n)

5、分离字符串:charAT

//定义
public char charAT(int index);
//使用
char c = str.charAT(2);

五、可变字符串 StringBuilder

1、构造方法

public StringBuilder();
public StirngBuilder(String s);

2、成员方法

1)SB添加数据:append

//定义
public StringBuilder append(任意类型);
//使用
sb.append("wmh");
//链式编程
sb.append("wmh").append("is").append(666);

2)SB序列反转:reverse

//定义
public StirngBuilder reverse();
//使用
sb.reverse();

3、String与StringBuilder的转化

1)String -> SB:toString

//定义
public String toString();
//使用
String str = sb.toString();

2)SB -> String:构造方法

//定义
public StringBuilder(String str);
//使用
StringBuilder sb = new StringBuilder(str);

六、集合ArrayList

  1. util包
  2. 类似于c++的向量vector

1、定义

  1. ArrayList<范型>
  2. 自带中括号

2、构造方法

//定义
public ArrayList();
//使用
ArrayList<String> array = new ArrayList<String>();

3、成员方法

1)元素追加:add

//定义
public boolean add(E e);
//使用
array.add("wmh");

2)元素插入:add

//定义
public void add(int index, E e);
//使用
array.add(0, "wmh");    //注意索引的越界访问

3)元素删除:remove

//定义
public boolean remove(Object obj);
public E remove(int index);
//使用
array.remove("wmh");
array.remove(0);

4)元素修改:set

//定义
public E set(int index, E e);
//使用
array.set(0,"wmh");        //注意索引的越界访问

5)元素获取:get

//定义
public E get(int index);
//使用
String str = array.get(0);

6)元素个数:size

//定义
public int size();
//使用
int len = array.size();

七、继承

1、继承概述

  1. 定义

    public class 子类名 extend 父类名{
         }
    
  2. 继承的优缺点

    1. 好处:提高了代码复用性和维护性
    2. 弊端:类的耦合性增强了,容易出八嘎

2、super关键字

  1. 用途:区分父类和子类
  2. 使用方法
    1. 成员变量:super.成员变量
    2. 构造方法:super(...)
    3. 成员方法:super.成员方法()

3、继承中的访问顺序

1)子类方法

  1. 子类局部变量i -> 子类成员变量this.i -> 父类成员变量super.i
  2. 不考虑爷爷类

2)构造方法

  1. 子类的所有构造方法均访问父类无参构造方法,默认为super();
  2. 父类没有无参构造方法可以用super方法调用带参构造

3)成员方法

  1. 子类成员方法 -> 父类成员方法
  2. 不考虑爷爷类

4、方法重写

  1. 定义:子类写一个和父类相同的成员方法
  2. 注解:@Override --> 用于检查重写声明的正确性
  3. 注意事项
    1. 私有方法不继承,不能重写
    2. 子类方法访问权限不能比父类低 --> public > 默认 > 私有
    3. 只能单继承

八、包

包的定义格式

package 包名;        //多级包用.分割

九、修饰符

1、权限修饰符

修饰符 同类 同包异类 异包子类 异包异类
Private
默认
Protected
Public

2、final关键字

  1. 使用范围:成员方法、成员变量、类
  2. 含义:表示不能被重写、再赋值和继承
  3. 修饰局部变量的特点
    1. 基本类型:数值不变
    2. 引用类型:地址不变

3、static关键字

  1. 含义:静态
  2. 使用范围:成员方法、成员变量
  3. 特点:
    1. 被类的所有对象共享
    2. 可以通过类名或者对象名直接调用

十、多态

1、多态的前提和体现

  1. 有继承/实现关系
  2. 有方法重写
  3. 有父类指向子类对象

2、访问特点

成员变量:编译看左边,运行看左边

成员方法:编译看左边,运行看右边

原因:成员方法有重写,而成员变量没有

3、多态的好处与弊端

好处:提高了程序的拓展性

弊端:不能使用子类的特有功能

4、多态的转型

向上转型:由子到父,父类引用指向子类对象:Animal a = new Cat();

向下转型:由父到子,父类引用转为子类对象:Cat c = (Cat) a;


十一、抽象类

1、概述

  1. 一个没有方法体的方法定义为抽象方法
  2. 有抽象方法的类定义为抽象类

2、抽象类的特点

  1. 必须用abstract关键字修饰

     public abstract class ClassName {
         }
     public abstract void MethodName();
    
  2. 抽象类多态:抽象类参照多态的方式,通过子类对象实例化

  3. 抽象类的子类

    1. 重写抽象方法

    2. 定义抽象类

3、抽象类的成员特点

  1. 成员变量:变量and常量
  2. 构造方法: 有构造方法但是不能实例化,用于子类访问父类数据的初始化
  3. 方法
    1. 抽象方法:限定子类
    2. 非抽象方法:提高代码复用性

十二、接口

1、接口概述

接口是一个公用的规范标准,更多的体现在对行为的抽象

2、接口的特点

  1. 接口用interface修饰

    public interface 接口名{
         }
    
  2. 类实现接口用implements表示

    public class implements 接口名{
         }
    

3、接口的实例化

  1. 接口多态:接口不能直接实例化,利用多态实现类对象实例化;
  2. 接口的实现类:重写接口的所有抽象方法或者定于抽象类;

4、接口成员的特点

  1. 成员变量:只能是常量,默认修饰符:public static final
  2. 构造方法:接口没有构造方法,继承或Object类
  3. 成员方法:只能是抽象方法,默认修饰符:public abstract

5、类与接口的关系

  1. 类与类的关系 --> 继承:只能单继承但是可以多层继承
  2. 类与接口的关系 --> 实现:可以继承一个类的时候实现多个端口
  3. 接口与接口的关系 --> 继承:单继承与多继承

6、抽象类与接口的区别

1)成员区别

  1. 抽象类:变量常量、构造方法、抽象方法、非抽象方法
  2. 接口:常量、抽象方法

2)关系区别

  1. 类与类:继承:单继承
  2. 类与接口:实现:单实现、多实现
  3. 接口与接口:继承:单继承、多继承

3)设计理念区别

  1. 抽象类:对类抽象,包括属性、行为
  2. 接口:对行为抽象,主要是行为

十三、形参和返回值

1、类名作为形参和返回值

类名-->对象(就像:数据类型-->变量)

2、抽象类名作为形参和返回值

抽象类-->子类对象


十四、内部类

1、内部类

  1. 概述:类里面定义一个类

  2. 格式

     public class 类名{
         
         修饰符 class 类名{
         
         }
     }
    
  3. 访问特点

    1. 内部类可以直接访问外部类成员,包括私有
    2. 外部类访问内部类需要创建对象
  4. 内部类的位置

    1. 成员位置:成员内部类
    2. 局部位置:局部内部类

2、成员内部类

成员内部类创建对象方法

外部类.内部类 对象名 = 外部类对象.内部类对象;
Outer.Inner Oi = new Outer().new Inner();

3、局部内部类

1)格式

public void method() {
   
    class Inner(){
   
    }
}

2)访问特点

  1. 方法中定义类,外界无法直接调用,需要在方法内部创建对象调用
  2. 可以访问外部类成员及变量

4、匿名内部类

  1. 前提:存在一个类或者接口
  2. 本质:继承了该类或者实现了该接口的子类匿名对象
// 第一种
new 类名或者接口名(){
   
    重写方法;
}.方法();
// 第二种
类名或者接口名 对象 = new 类名或者接口名(){
   
    重写方法;
};
目录
相关文章
|
3月前
|
安全 Java 调度
【Java】JavaSE实现多线程
【Java】JavaSE实现多线程
60 1
|
16天前
|
Java 程序员 调度
Java中的多线程编程:基础知识与实践
【4月更文挑战第5天】 在现代软件开发中,多线程编程是一个不可或缺的技术要素。它允许程序员编写能够并行处理多个任务的程序,从而充分利用多核处理器的计算能力,提高应用程序的性能。Java作为一种广泛使用的编程语言,提供了丰富的多线程编程支持。本文将介绍Java多线程编程的基础知识,并通过实例演示如何创建和管理线程,以及如何解决多线程环境中的常见问题。
|
21天前
|
关系型数据库 Java 开发工具
Java入门高频考查基础知识9(15问万字参考答案)
本文探讨了Spring Cloud的工作原理,包括注册中心的心跳机制、服务发现机制,以及Eureka默认的负载均衡策略。同时,概述了Spring Boot中常用的注解及其实现方式,并深入讨论了Spring事务的注解、回滚条件、传播性和隔离级别。文章还介绍了MySQL的存储引擎及其区别,特别关注了InnoDB如何实现MySQL的事务处理。此外,本文还详细探讨了MySQL索引,包括B+树的原理和设计索引的方法。最后,比较了Git和SVN的区别,并介绍了Git命令的底层原理及流程。
30 0
Java入门高频考查基础知识9(15问万字参考答案)
|
21天前
|
存储 缓存 算法
Java入门高频考查基础知识4(字节跳动面试题18题2.5万字参考答案)
最重要的是保持自信和冷静。提前准备,并对自己的知识和经验有自信,这样您就能在面试中展现出最佳的表现。祝您面试顺利!Java 是一种广泛使用的面向对象编程语言,在软件开发领域有着重要的地位。Java 提供了丰富的库和强大的特性,适用于多种应用场景,包括企业应用、移动应用、嵌入式系统等。下是几个面试技巧:复习核心概念、熟悉常见问题、编码实践、项目经验准备、注意优缺点、积极参与互动、准备好问题问对方和知其所以然等,多准备最好轻松能举一反三。
46 0
Java入门高频考查基础知识4(字节跳动面试题18题2.5万字参考答案)
|
21天前
|
存储 算法 JavaScript
Java入门高频考查算法逻辑基础知识3-编程篇(超详细18题1.8万字参考编程实现)
解决这类问题时,建议采取下面的步骤: 理解数学原理:确保你懂得基本的数学公式和法则,这对于制定解决方案至关重要。 优化算法:了解时间复杂度和空间复杂度,并寻找优化的机会。特别注意避免不必要的重复计算。 代码实践:多编写实践代码,并确保你的代码是高效、清晰且稳健的。 错误检查和测试:要为你的代码编写测试案例,测试标准的、边缘情况以及异常输入。 进行复杂问题简化:面对复杂的问题时,先尝试简化问题,然后逐步分析和解决。 沟通和解释:在编写代码的时候清晰地沟通你的思路,不仅要写出正确的代码,还要能向面试官解释你的
32 0
|
21天前
|
存储 Java 编译器
Java入门高频考查基础知识2(超详细28题2.5万字答案)
多态是面向对象编程中的一个重要概念,它允许不同类的对象对同一消息作出不同的响应。在具体实现上,多态允许一个父类的引用指向其子类的对象,并根据实际指向的对象的类型来调用相应的方法。在 Java 中,多态可以通过以下几种方式实现:在同一个类中,方法名相同,但形参列表不同,实现了多态。子类可以重写(覆盖)其父类的方法,实现多态。在父类引用中调用该方法时,根据实际指向的子类对象的类型来调用相应的方法实现。
38 0
|
27天前
|
Java 数据库连接 API
Java 学习路线:基础知识、数据类型、条件语句、函数、循环、异常处理、数据结构、面向对象编程、包、文件和 API
Java 是一种广泛使用的、面向对象的编程语言,始于1995年,以其跨平台性、安全性和可靠性著称,应用于从移动设备到数据中心的各种场景。基础概念包括变量(如局部、实例和静态变量)、数据类型(原始和非原始)、条件语句(if、else、switch等)、函数、循环、异常处理、数据结构(如数组、链表)和面向对象编程(类、接口、继承等)。深入学习还包括包、内存管理、集合框架、序列化、网络套接字、泛型、流、JVM、垃圾回收和线程。构建工具如Gradle、Maven和Ant简化了开发流程,Web框架如Spring和Spring Boot支持Web应用开发。ORM工具如JPA、Hibernate处理对象与数
90 3
|
1月前
|
SQL Java 数据库连接
JAVA数据库的基础知识
JAVA数据库的基础知识
15 1
|
1月前
|
Java 调度
Java中的多线程编程:基础知识与实践
【2月更文挑战第26天】在现代软件开发中,多线程编程是一个重要的概念。Java作为一种广泛使用的编程语言,提供了丰富的多线程编程支持。本文将介绍Java中多线程编程的基础知识,包括线程的概念、创建和控制,以及线程同步和通信的方法。同时,通过实例分析,帮助读者更好地理解和掌握Java多线程编程的技巧。
|
1月前
|
Java
Java中的多线程编程:基础知识与实践
【2月更文挑战第25天】本文将深入探讨Java中的多线程编程,包括其基础知识和实践应用。我们将从多线程的基本概念开始,然后逐步深入到Java中实现多线程的方法,包括继承Thread类和实现Runnable接口。接着,我们将讨论多线程的同步和通信问题,以及如何使用wait()、notify()和notifyAll()方法进行线程间的通信。最后,我们将通过一个实例来演示如何在Java中创建和管理多线程。