首页 > 编程语言 >【JAVA SE】SE总结

【JAVA SE】SE总结

时间:2024-10-27 14:19:34浏览次数:3  
标签:总结 JAVA String int System Student new 方法 SE

目录

数据类型与变量

Java获取输入

随机数

方法重载 

数组

定义

 获取长度

遍历数组

工具类Arrays  

将数组转成字符串

将数组排序

拷贝数组

类和对象

抽象类

接口

语法规则

Comparable

Comparator比较器

Object类 

对象比较方法

内部类

实例内部类

静态内部类 

String类

比较

查找

 大小写转换

 格式化

数组和字符串转换 

替换

 字符串拆分

字符串截取

异常体系结构

异常的抛出


本篇文章仅记录在学习SE中遇到的问题哈~

数据类型与变量

数据类型关键字内存占用范围
字节型byte1字节-128~127
短整型short2字节-32768~32767
整型int4字节
长整型long8字节
单精度浮点数float4字节
双精度浮点数double8字节
字符型char2字节
布尔型boolean没有明确规定

1、boolean和int类型不能相互转换,不存在1表示true,0表示false

2、可以通过MAX_VALUE、MIN_VALUE来查看数据类型的最大值、最小值,如下:

System.out.println(Integer.MIN_VALUE);
System.out.println(Integer.MAX_VALUE);

3、上述八种数据类型与String的区别:

这八种是基本数据类型,而String是引用数据类型。

数据类型分为基本数据类型和引用数据类型:

  • 基本数据类型:八种
  • 引用数据类型:String、数组、类、接口

4、java局部变量使用的时候必须初始化,否则报错。

5、在运算的过程中,所有小于4字节的会提升为4字节进行运算,如下:

byte a=10;

byte b=20;

byte c=a+b;   //这里会报错,需要进行显示类型转换

因为计算机CPU通常是按照4个字节为单位从内存中读取数据,所以会将小于4字节的会提升为4字节。

6、java中字符串类型,不是以“\0”当作字符串的结尾。底层是一个数组,所以不需要。

7、int转String

int num=10;

//方法1

String str1=num+"";

//方法2

String str2=String.valueOf(num);

8、String转int

String str=“100”;

//方法1

int num=Integer.parseInt(str);

//方法2

int num=Integer.valueOf(str);

Java获取输入

Scanner scanner=new Scanner(System.in);
System.out.println("请输入你的姓名:");
String name=scanner.nextLine();
System.out.println(name);

System.in表示从键盘获取 

有时候,需要循环判断是否还有输入,因此,我们可以通过hasNext()方法进行判断,再读取,如下:

Scanner scanner=new Scanner(System.in);
while(scanner.hasNext())
{
    String t=scanner.nextLine();
    System.out.println("读取到的数据:"+t);
}

当循环输入多个数据的时候,可以使用ctrl+z来结束输入 ,再Linux/Mac使用ctrl+d。

随机数

Random random=new Random(); //这里如果不填入参数,使用当前时间为随机种子
int t=random.nextInt();

方法重载 

  • 方法名必须相同
  • 参数列表必须不同(参数的个数不同、参数的类型不同、类型的次序必须不同)
  • 与返回值类型是否相同无关

同一个作用域中不能定义两个相同名称的标识符,比如:方法中不能定义两个名字一样的变量,那为什么类中可以定义方法名相同的方法呢?

通过方法签名即:经过编译器编译修改过之后方法最终的名字。具体的方式:方法全路径名+参数列表+返回值类型,构成方法完整的名字,例如:

int add(int,int) 真正的名字是:add:(II)

double add (double,double)真正的名字是:add:(dd) 

数组

定义

方法一:

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

方法二:

int [ ] array=new int [ ] {1,2,3};

  • 该方法与方法一一样
  • 如果不进行初始化 int [ ] array=new int [10],默认会初始化为0,10可以换成变量;

 获取长度

int len=array.length;

遍历数组

int[] array=new int[10];
for(int x:array)
{
    System.out.println(x);
}

在Java中,数组有一个工具类Arrays。

工具类Arrays  

将数组转成字符串

int[] array=new int[10];

  • for(int i=1;i<=10;i++)

{
    array[i-1]=i;
}
System.out.println(Arrays.toString(array)); //一维数组

System.out.println(Arrays.deepToString(ret));//二维数组

将数组排序

int[] array=new int[10];

Arrays.sort(array);

sort支持区间排序,比如:

 Arrays.sort(array,0,2);

  • 表示将[0,2)区间元素排序

拷贝数组

 int[] ret=Arrays.copyOf(array,array.length);

  • copyOf方法返回一个数组对象
  • 第一个参数是要拷贝的数组
  • 第二个参数是拷贝的长度

当然我们也可以进行区间拷贝

int[] ret=Arrays.copyOfRange(array,0,3);

  • 拷贝array数组[0,3)范围的元素

在定义二维数组时,行不能省略,列可以省略 

类和对象

类名使用大驼峰定义

每个类会产生一个字节码文件,跟java文件没有关系。

成员变量在没有初始化的时候,都会有一个默认值:

  • 引用类型默认值都是null
  • int 0
  • float 0.0f
  • boolean false
  • char ‘\u0000’

关于生成构造方法、get方法、set方法可以使用generate自动生成

封装

包就是为了更好的组织和管理类,比如Arrays 专门组织管理和操作数组相关的类

包是对类、接口等的封装机制的体现,是一种对类或者接口等很好的组织方式,包还有一个很重要的作用,在同一个工程中允许存在相同名称的类,只要处在不同的包即可

privatedefault(包访问权限)protectedpublic
同一包中的同一类
同一包中的不同类
不同包中的子类
不同包中的非子类

静态方法的特性 

  • 不能在静态方法中访问任何非静态成员变量
  • 静态方法中不能调用任何非静态方法,因为非静态方法有this参数,在静态方法中调用时候无法传递this引用
  • 静态方法无法重写

静态代码块

用来初始化静态变量,类加载的时候就被调用了,只执行一次

static{

        ……

}

构造代码块/实例代码块

{

        ……

}

 类被实例化的时候调用。实例化一个调用一次

super和this的相同点:

只能在类的非静态方法中使用,用来访问非静态成员方法和字段

在构造方法中调用时,必须是构造方法中的第一条语句,并且不能同时存在

多态的条件

  • 继承关系向上转型,父类引用子类
  • 子类和父类有同名的 覆盖/重写方法
  • 通过父类对象的引用,去调用这个重写的方法

完成以上部分

在继承的关系上,满足以下三点:

  • 方法的返回值一样
  • 方法名一样
  • 方法的参数列表一样

那么就说这两个方法之间的关系是重写

重写和重载的区别

区别点重写重载
参数列表一定不能修改必须修改
返回类型一定不能修改(除非可以构成父子类关系)可以修改
访问限定符一定不能做更严格的限制(可以降低限制)可以修改

判断一个引用对象是某个对象的实例可使用instanceof来进行进行判断。

抽象类

特性

  • 抽象类不能直接实例化对象
  • 抽象方法不能是private
  • 抽象方法不能被final和static修饰,因为抽象方法要被子类重写
  • 抽象类必须被继承,并且继承后子类要重写父类中的抽象方法,否则子类也是抽象类,必须要使用abstract修饰

接口

接口是一种引用数据类型

  • 接口是使用interface方法来修饰的
  • 接口当中不能有被实现的方法,意味着只能有抽象方法,但是两个方法除外:一个是static修饰的方法,一个是被default修饰的方法,static意味着不能被重写,deffault方法可以重写,如果不重写就使用默认的
  • 接口当中的抽象方法默认都是public abstract修饰的
  • 接口当中的成员变量默认都是public static final修饰的
  • 接口不能进行实例化
  • 类和接口之间的关系,可以使用implements来进行关联
  • 接口中不能有静态代码块和构造方法

语法规则

定义接口

public interface 接口名称{

        //抽象方法

}

TIPS:

  • 创建接口时,接口的命名一般以大写字母I开头
  • 接口的命名一般使用“形容词”词性的单词

接口的使用

接口不能直接使用,必须有一个“实现类”来实现该接口,实现接口中的所有抽象方法。

public class 类名称 implements 接口名称{

        ……

}

Comparable

让一个类可以进行比较,需要实现 Comparable中compareTo方法

//Comparable<进行比较的类型>

class Student implements Comparable<Student>{
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    String name;
    int age;
    @Override
    public int compareTo(Student o) {
        if(age<o.age)
            return 1;
        else
            return 0;

        //compareTo返回整型而不是布尔类型
    }
}

public class Main {
    public static void main(String[] args) {
        Student s1=new Student("张三",20);
        Student s2=new Student("李四",21);
        System.out.println(s1.compareTo(s2));

    }
}

但是这种方法,后期如果需要对类比较的属性进行变动不太方便,因此还需要使用其他方法。

Comparator比较器

class Student{
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    String name;
    int age;

}
class AgeComparator implements Comparator<Student>{
    @Override
    public int compare(Student o1, Student o2) {
        return o1.age-o2.age;
    }
}

public class Main {
    public static void main(String[] args) {
        Student s1=new Student("张三",20);
        Student s2=new Student("李四",21);
        
        AgeComparator ageComparator=new AgeComparator();
        System.out.println(ageComparator.compare(s1,s2));

    }
}

Object类 

object是Java默认提供的一个类,java里面除了Object类,所有的类都是存在继承关系的,默认会继承Object类,即所有类的对象都可以使用Object的引用进行接收。

对象比较方法

在java中,==进行比较时:

  • 如果==左右两侧都是基本类型变量,比较的是变量中值是否相同
  • 如果==左右两侧都是引用类型变量,比较的是引用变量地址是否相同
  • 如果要比较对象中内容,必须重写Object中的equals方法,因为equals默认也是按照地址来比较的

内部类

将一个类定义在另一个类或者一个方法的内部,前者称为内部类,后者称为外部类,内部类也是封装的一种体现。

内部类不能创建静态成员,如果一定需要使用static修饰,需要再添加const修饰。

实例内部类

创建一个内部类对象的方法如下:

class Student{
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    String name;
    int age;
    class InnerClass{
        public int id;

    }
}

public class Main {
    public static void main(String[] args) {
        Student student=new Student("张三",10);
        Student.InnerClass innerClass=student.new InnerClass();
    }
}

在内部类中包含两个this

如果内部类和外部类有对象冲突的话,可以通过如下方法访问自己和外部类对象:

  • 父类类型.this 访问父类对象
  • this 访问内部类对象 

 小结

  • 外部类中的任何成员都可以在实例内部类方法中直接访问
  • 实例内部类所处的位置与外部类成员位置相同,因此也受public、private等访问限定符的约束
  • 在实例内部类方法中访问同名的成员时,优先访问自己的,如果要访问外部类同名的成员,必须:外部类名.this.同名成员 来访问
  • 实例内部类对象必须在先有外部类对象前提下才能创建
  • 实例内部类的非静态方法中包含了一个指向外部类对象的引用
  • 外部类中,不能直接访问实例内部类中的成员,如果要访问必须先要创建内部类对象

静态内部类 

静态内部类创建时,不需要先创建外部类

在静态内部类中,只能访问外部类中的静态成员

String类

比较

判断两个String是否相等,不能直接使用等号,因为使用等号会直接比较地址,需要使用equals方法:

String s1=new String("hello");
String s2=new String("hello");
System.out.println(s1.equals(s2));

 如果需要对两个字符串按字典序比较的话使用compareTo方法

String s1=new String("abc");
String s2=new String("abd");
System.out.println(s1.compareTo(s2));  //-1:s1比s2小 , 0: s1和s2相等....

 如果需要在比较的时候忽略大小写,则使用compareToIgnoreCase方法

String s1=new String("abc");
String s2=new String("Abc");
System.out.println(s1.compareToIgnoreCase(s2));

查找

获取String字符串的某个字符 charAt(下标)

String s1=new String("abc");
System.out.println(s1.charAt(1));

方法功能

char charAt(int index)

返回index位置上字符,如果index为负数或者越界,抛出异常
int indexOf(int ch)返回ch第一次出现的位置,没有返回-1
int indexOf(int ch,int fromindex)从fromindex位置开始找ch第一次出现的位置,没有返回-1
int indexOf(String str)返回str第一次出现的位置,没有返回-1
int indexOf(String str,int fromindex)从fromindex位置开始找str第一次出现的位置,没有返回-1
int lastIndexOf(int ch)从后往前找,返回ch第一次出现的位置,没有返回-1
int lastIndexOf(int ch,int fromindex)从fromindex位置开始找,从后往前找ch第一次出现的位置,没有返回-1
int lastIndexOf(String str)从后往前找,返回str第一次出现的位置,没有返回-1
int lastIndexOf(String str,int fromindex)从fromindex位置开始找,从后往前找str第一次出现的位置,没有返回-1

 大小写转换

String s1=new String("abc");
String s2=s1.toUpperCase();
System.out.println(s1);
System.out.println(s2);

需要注意的是,转变大小写,不是在原来的基础上转变,而是产生一个新的对象 

 格式化

String s=String.format("%d-%d-%d",1,2,3);
System.out.println(s);

数组和字符串转换 

字符串转数组

String s1=new String("abc");
char[] ch=s1.toCharArray();

数组转字符串

String s2=new String(ch);

替换

方法功能
String replaceAll(String regex,String replacement)替换所有的指定内容
String replaceFirst(String regex,String replacememt)替换首个匹配内容

 字符串拆分

方法功能
String[] split(String regex)将字符串全部拆分
String[] split(String regex,int limit)将字符串部分拆分,该数组长度就是limit极限

注意事项:

  1. 字符“|”,“*”,“+”都得加上转义字符,前面加上“\\”
  2. 而如果是“\”,那么就得写成“\\\\”
  3. 如果一个字符串中有多个分隔符,可以用“|”作为连字符

字符串截取

方法功能
String substring(int beginIndex)从指定索引截取到结尾
String substring(int beginIndex,int endIndex)截取部分内容

String、StringBuffer、StringBuilder的区别

String的内容不可修改,StringBuffer与StringBuilder的内容可以修改

StringBuffer与StringBuilder大部分功能是相似的

StringBuffer采用同步处理,属于线程安全操作,而StringBuilder未采用同步处理,属于线程不安全操作

异常体系结构

Throwable:是异常体系的顶层类,其派生出两个重要的子类:Error和Excepion

Error:指的是Java虚拟机无法解决的严重问题,比如:JVM的内部错误,资源耗尽等

Exception:异常产生后程序员可以通过代码进行处理,使程序继续执行。

异常分为:

  • 运行时异常(非受查异常)
  • 编译时异常(受查异常)

异常的处理

防御型编程

EAFP,事后认错型(try-catch)--异常处理的核心思想。

异常的抛出

抛出异常的方式有很多种:

  1. 某段程序触发
  2. 通过关键字throw抛出异常

TIPS:

  • throws一般使用现在方法的声明之后,告诉调用这个方法的人:这个方法可能会抛出异常
  • try块内抛出异常位置之后的代码将不会被执行
  • 虽然可以捕获多种异常,同一时刻只会抛出一个异常
  • finally里面的代码一定会被执行,即使前面有return,常用来释放资源
  • 如果finally有return,那么就不会执行try里面的return,会执行finally里面的return

throw和throws的区别?

throw是扔出一个异常,而throws是在方法声明一个异常 

自定义异常 

如果需要自定义异常,一定要继承一个异常

  • extends Exception 编译时异常
  • extends RuntimeException 运行时异常

标签:总结,JAVA,String,int,System,Student,new,方法,SE
From: https://blog.csdn.net/lzb_kkk/article/details/142864527

相关文章

  • 最新Java后端面试八股文汇总!
    1.为什么Java语言不支持多重继承?为了程序的结构能够更加清晰从而便于维护。假设Java语言支持多重继承,类C继承自类A和类B,如果类A和B都有自定义的成员方法f(),那么当代码中调用类C的f()会产生二义性。Java语言通过实现多个接口间接支持多重继承,接口由于只包含方法定义,不能有方法......
  • Java面试题及答案整理( 2024年 10 月最新版,持续更新)
    1.抽象类必须要有抽象方法吗?不需要,抽象类不一定非要有抽象方法。 普通类不能包含抽象方法,抽象类可以包含抽象方法。抽象类不能直接实例化,普通类可以直接实例化。2.抽象类能使用final修饰吗?不能,定义抽象类就是让其他类继承的,如果定义为final该类就不能被继承,这样彼......
  • 2024-2025-1 20241316 《计算机基础与程序设计》第五周学习总结
    2024-2025-120241316《计算机基础与程序设计》第五周学习总结作业信息这个作业属于哪个课程2024-2025-1-计算机基础与程序设计这个作业要求在哪里2024-2025-1计算机基础与程序设计第五周作业这个作业的目标Pep/9虚拟机,机器语言与汇编语言,算法与伪代码,测试:黑盒,白......
  • 深入理解 Java 中的抽象类
    深入理解Java中的抽象类在面向对象编程中,抽象类是一个重要的概念,它为开发者提供了一种实现代码重用和规范设计的有效手段。本文将深入探讨抽象类的定义、特性、使用场景及其在Java编程中的实际应用。1.抽象类的概述1.1什么是抽象类?在Java中,抽象类是包含一个或......
  • Java 权限修饰符详解
    Java权限修饰符详解在Java中,**权限修饰符(AccessModifiers)**用于控制类、方法、变量和构造函数的可见性。理解和使用这些修饰符可以帮助我们更好地封装和组织代码,提高程序的安全性和可维护性。1.权限修饰符的类型Java中主要有四种权限修饰符,分别是:public、protecte......
  • 2024年最新互联网大厂精选 Java 面试真题集锦(JVM、多线程、MQ、MyBatis、MySQL、Redis
    前言春招,秋招,社招,我们Java程序员的面试之路,是挺难的,过了HR,还得被技术面,在去各个厂面试的时候,经常是通宵睡不着觉,头发都脱了一大把,还好最终侥幸能够入职一个独角兽公司,安稳从事喜欢的工作至今...近期也算是抽取出大部分休息的时间,为大家准备了一份通往大厂面试的小捷径,准备......
  • 最新Java零基础知识(持续更新中......)
    1.学习前的准备一个好的学习方法(如何更高效学习):成为一名合格的程序员,需要具备两个关键能力:指法速度:高效的代码输入速度。编程思想:能够用编程的方式解决现实问题的能力。指法速度:正确的手势:左手放在asdf,右手放在jkl;,确保每根手指的位置正确。如果你目前使用错误的指法,从......
  • 基于Java+SpringBoot+Mysql实现的古诗词平台功能设计与实现四
    一、前言介绍:1.1项目摘要随着信息技术的迅猛发展和数字化时代的到来,传统文化与现代科技的融合已成为一种趋势。古诗词作为中华民族的文化瑰宝,具有深厚的历史底蕴和独特的艺术魅力。然而,在现代社会中,由于生活节奏的加快和信息获取方式的多样化,古诗词的传播和阅读面临着一定的挑......
  • sentry 的作用和使用场景是什么
    Sentry的作用:1.实时监控应用程序错误;2.收集并记录错误信息;3.提供错误信息的可视化和分析工具;4.实现错误追踪和溯源等。Sentry的使用场景:1.实时监控生产环境错误;2.追踪和调试异常情况;3.优化应用程序性能;4.提高团队协作效率等。Sentry主要用于实时监控生产环境中发生的错误......
  • 2024最新互联网一线大厂最新高质量 Java 面试八股文汇总(附答案)
    最近很多粉丝朋友私信我说:熬过了去年的寒冬却没熬过现在的内卷;打开Boss直拒一排已读不回,回的基本都是外包,薪资还给的不高,对技术水平要求也远超从前;感觉Java一个初中级岗位有上千人同时竞争,内卷程度简直怀疑人生。事实也确实是这样:我国大概有400-700万程序员,其中光Java......