java基础


以下内容为本人的学习笔记,如需要转载,请声明原文链接  


java常用类:

1.内部类

2.Object类

3.Object类常用方法

4.包装类

5.String类

6.BigDecimal类

1、内部类

  • 分类:

    内部类:成员内部类,静态内部类, 局部内部类,匿名内部类

  • 概念:在一个类的内部再定义一个完整的类(类中类)

  • 特点:

  1. 编译之后可生成独立的字节码文件;

  2. 内部类可直接访问外部类的私有成员,而不破坏封装

  3. 可为外部类提供必要的内部功能组件

public class Body{
private String name;
//内部类
class Header{
public void show(){
//访问外部类私有成员
System.out.println(name)
}
}
}

1.1成员内部类

  • 在类的内部定义,与实例变量、示例方法同级别的类;

  • 外部类的一个实例部分,创建内部类对象时,必须先创建外部类对象:

    Outer out = new Outer();

    out.Inner in = out.new Inner();

  • 当外部类、内部类存在重名属性时,会优先访问内部类属性;

  • 成员内部类不能定义静态成员,但是能定义静态常量。

示例:

public class Outer{
private String name="张三";
private int age = 20; //内部类
class Inner{
private String address = "北京";
private String phone="110";
private String name = "李四"; //方法
public void show(){
//打印外部类的属性,内部类属性和外部类的属性名字相同(重名时):Outer.this
System.out.println(Outer.this.name);
System.out.println(age); //打印内部类中的属性
System.out.println(this.address);
System.out.println(phone);
} }
}

public class TestOuter{
public static void main(String [] agrs){
//1创建外部类对象
// Outer outer = new Outer();
//2创建内部类对象,要加外部类对象前缀
// outer.Inner inner = outer.new Inner() //1,2合并为一句
Inner inner = new Outer().new Inner();
inner.show();
}
}

1.2静态内部类

(静态内部类,在内部类基础上加static,级别相当于外部类,给外部类使用)

  • 不依赖(先创建)外部类对象,可直接创建或通过类名访问,可声明静态成员

  • 只能直接访问外部类的静态成员(实例成员需实例化外部类对象)

    Outer.Inner inner = new Outer.Inner();

    Outer.Inner.show();

示例:

public class Outer {

private String name ="小米";
private int age = 19;

//静态内部类
static class Inner{
private String name = "计缘";
private int age =11;
static private String address = "广东";
public void show(){
//1.调用外部类的属性,先创建外部类对象,因为静态内部类与外部类属于同一级别
Outer outer = new Outer();
//2.调用外部类的属性
System.out.println(outer.name);
//3.调用静态内部类的属性
System.out.println(name);
//4.调用静态内部类的静态属性,类名.属性名
System.out.println(Inner.address);
}


}
}
//测试
public class TestOuter {
public static void main(String[] args) {
//直接创建静态内部类对象
Outer.Inner inner = new Outer.Inner();
inner.show();
}
}

1.3局部内部类

  1. 定义在外部类方法中,作用范围和创建对象仅限于当前方法;

    • 局部内部类前缀不能加任何访问修饰符(如,public,protect...),作用范围在方法里

    • 局部内部类和局部变量属于同一级别

    • 静态方法不能访问非静态的成员,因为静态属性是类的属性,不是单个成员的属性

    • 局部内部类不能定义静态变量,但可以定义静态常量

  2. 局部内部类访问外部类当前方法中的局部变量时,因无法保障变量的生命周期与自身相同,变量必须修饰为final;

  3. 限制类的使用范围。

    局部内部类访问局部变量:

    •   访问局部变量,JDK1.7要求变量是常量final,JDK1.8会自动为局部变量添加final;

    •   因为局部变量在方法完成后会消失,但是局部内部类不会消失,可是局部内部类会使用到一个将要消失的局部变量?所以要让局部变量为常量。

public class Outer {

private String name = "计缘";
private int age = 42;

public void show(){
String address = "广东";
class Inner{
private String name = "尹兆先";
private int age = 43;

public void show2(){
//访问外部类的属性,Outer.this可省略
System.out.println(Outer.this.name);
System.out.println(age);

//访问内部类的属性
System.out.println(name);
//访问局部变量,JDK1.7要求变量是常量final,JDK1.8会自动为局部变量添加final
System.out.println(address);
}
}
//不能在main方法里创建局部内部类对象,
// 在main方法里调用外部类的show方法是不能调用局部内部类的,因为
// 上面只做了声明,没有调用。
// 要调用局部内部类的方法要在上一级方法(跟局部内部类同一级上)创建局部内部类对象并调用方法
Inner inner = new Inner();
inner.show2();
}
}


//测试
public class TestOuter {
public static void main(String[] args) {
Outer outer = new Outer();
outer.show();
}
}

1.4匿名内部类

  1. 没有类名的局部内部类(一切特征都与局部内部类相同);

  2. 必须继承一个父类或者实现一个接口;

  3. 定义类、实现类、创建对象的语法合并,只能创建一个该类的对象;

  • 优点:减少代码量;

  • 缺点:可读性较差。

示例:

public interface Usb {
public void service();
}


public class Mouse implements Usb{

public void service(){
System.out.println("鼠标正在工作中...");
}
}


public class TestUsb {
public static void main(String[] args) {
//创建接口类型的变量,多态
// Usb usb = new Mouse();
// usb.service();

//局部内部类,main方法也是方法里
// class Fan implements Usb{
//
// @Override
// public void service() {
// System.out.println("连接电脑成功,风扇开始工作...");
// }
// }
//
// //使用局部内部类创建对象
// Usb usb = new Fan();
// usb.service();
//

//使用匿名内部类优化(相当于创建了一个局部内部类)
Usb usb = new Usb(){//第二个Usb位置可以是接口,抽象类,父类,在方法体里可以重写方法
public void service() {
System.out.println("连接电脑成功,风扇开始工作...");
}
};
usb.service();
}
}

2、Object类

  1. 超类、基类,所有类的直接或间接父类,位于继承树的最顶层;

  2. 任何类,如没有书写extends显示继承某个类,都默认直接继承Object类,否则为间接继承;

  3. Object类中所调用的方法,是所有对象都基本的方法;

  4. Object类型可以存储任何对

  • 作为参数,可接受任何对象。

  • 作为返回值,可返回任何对象。

3、Object类常用方法

3.1getClass()方法
  •   public final Class<?> getClass(){}
  •   返回引用中存储的实际对象类型;
  •   应用:通常用于判断两个引用中实际存储对象类型是否一致。

示例:

public class Student {
private String name;
private int age;

public Student() {
}

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

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}
}



public class TestStudent {
public static void main(String[] args) {
Student s1 = new Student("居元子",999);
Student s2 = new Student("魏元生",6);

//判断s1和s2是不是同一个类型
Class class1 = s1.getClass();
Class class2 = s2.getClass();
if (class1==class2){
System.out.println("s1和s2属于同一个类型");
}else{
System.out.println("s1和s2不属于同一个类型");
}

}
}
3.2hashCode()方法
  •  public int hashCode(){}
  •  返回该对象的哈希码值;
  •  哈希值根据对象的地址字符串数字使用hash算法(系统底层提供)计算出来的int类型的数值;
  •  一般情况下相同对象返回相同哈希码。

示例:

   Student s1 = new Student("居元子",999);
Student s2 = new Student("魏元生",6);
//hashCode方法
System.out.println(s1.hashCode());
System.out.println(s2.hashCode()); //s1.hashCode()!=s2.hashCode()
Student s3 = s1;
System.out.println(s3.hashCode()); //s1.hashCode()=s3.hashCode()
3.3 toString()方法
  • public String toStrin(){};
  • 返回该对象的字符串表示;
  • 可以根据程序需求覆盖该方法,如:展示对象各个属性的值。

 System.out.println(s1.toString());
System.out.println(s2.toString());//默认名字+返回哈希值的十六进制

重写toString:

 @Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
3.4equals()方法
  • public boolean equals (Object obj){}
  • 默认(源码)实现为(this == obj)[比较两个对象是否相同],比较两个对象地址是否相同;
  • 可进行覆盖(重写后),比较两个对象的内容是否相同
  • equals是Object类的方法,默认为比较地址,跟'=='一样,String类中重写equals方法,比较的是值。
  //判断两个对象是否相等
System.out.println(s1.equals(s2));//false
Student s6 = new Student("小米", 12);
Student s7 = new Student("小米", 12);
System.out.println(s6.equals(s7));//false

equals()方法覆盖(重写)步骤

  1. 比较两个引用是否指向同一个对象;

  2. 判断obj是否为null;

  3. 判断两个引用指向的实际对象类型是否一致;

  4. 强制类型转换;

  5. 依次比较各个属性值是否相同。

//Student类里
public boolean equals(Object obj) {
//1.判断两个对象是否是同一个引用
if (this == obj) {
return true;
}
//2.判断obj是否null
if (obj == null) {
return false;
}
//3.判断是否是同一个类型
// if (this.getClass() == obj.getClass()) {
//
// }
//instanceof 判断对象是否是某种类型
if (obj instanceof Student) {
//4.强制类型转换
Student s = (Student) obj;
//5.比较熟悉
if (this.name.equals(s.getName()) && this.age == s.getAge()) {
return true;
}
}
return false;
}

tips: instanceof比较的是前面的实际类型是不是后面对象实际类型的子类或同类,是的话返回true,否则返回false,所以true的情况下要强制转换为同类

3.5finalize()方法

   finalize:译:最终确定,把(计划、旅行、项目等)最后定下来;定案

  1. 当对象被判定为垃圾对象时,有JVM自动调用此方法,用以标记垃圾对象,进入回收队列;

  2. 垃圾对象:没有 有效引用(没有被赋予变量等) 指向此对象时,为垃圾对象;

  3. 垃圾回收:由GC销毁垃圾对象,释放数据存储空间;

  4. 自动回收机制:JVM的内存耗尽,一次性回收所有垃圾对象;

  5. 手动回收机制:使用System.gc();通知JVM执行垃圾回收。(说是手动,其实还是JVM自动回收,只不过是被人为的告诉JVM一声)。

//Student类里
protected void finalize() throws Throwable{
System.out.println(this.name+"对象被回收了...");
} //TestStudent类里
new Student("aaa",32);
new Student("bbb",32);
new Student("ccc",32);
new Student("ddd",32);
new Student("eee",32);
System.gc();
System.out.println("回收垃圾");

2022-09-26  20:06:06

java基础之常用类1的更多相关文章

  1. 【Java基础】常用类

    常用类 字符串相关的类 String类:代表字符串,使用一对 "" 引起来表示. public final class String implements java.io.Seri ...

  2. Java基础总结--常用类以及包的访问权限

    -----Object---所有类的根类1.怎么得到的:通过对所有对象不断的向上抽取共性,具备所有对象的共性的东西2.常用的方法* equals(Object obj):比较两个对象的引用是否指向同一 ...

  3. Java基础之常用类

    1.Collections类: (1)此类完全由在 collection 上进行操作或返回 collection 的静态方法组成. (2)静态方法摘要: static <T> boolea ...

  4. java中的常用类(二)

    java中的常用类(二) Math类 Math类的声明:public final class Math extends Object Math类是与数学计算有关的类,里面的方法都是静态方法,直接使用类 ...

  5. Java基础-DButils工具类(QueryRunner)详解

    Java基础-DButils工具类(QueryRunner)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如果只使用JDBC进行开发,我们会发现冗余代码过多,为了简化JDBC ...

  6. Java基础之File类的使用

    Java基础之File类的使用 1.File类的构造方法和常用方法 2.对File中listFile(FileNameFilter name)学习 3.与File文件类相关的实现 File类的构造方法 ...

  7. Java基础:Object类中的equals与hashCode方法

    前言 这个系列的文章主要用来记录我在学习和复习Java基础知识的过程中遇到的一些有趣好玩的知识点,希望大家也喜欢. 一切皆对象   对于软件工程来说面向对象编程有一套完整的解决方案:OOA.OOD.O ...

  8. Java基础和常用框架的面试题

    前言 最近学校也催着找工作了,于是刷了一些面试题,学习了几篇大佬优秀的博客,总结了一些自认为重要的知识点:听不少职场前辈说,对于应届毕业生,面试时只要能说到核心重要的点,围绕这个点说一些自己的看法,面 ...

  9. JAVA异常处理、常用类、反射、集合

    异常 异常:在Java中是指被一个方法抛出的对象. 分类:检查异常.运行时异常.错误 运行时异常(uncheckd):RuntimeException和其子类 检查异常(checkd/搜检异常):指E ...

随机推荐

  1. 啥也不是 -「OI 易犯错误整理」

    原帖出自 Nefelibata,不过他不想维护,所以就交给 STrAduts 了 awa.因为一些不可抗力,帖主转移至 XSC062.申请置顶! 前言 Nefelibata:因为笔者弱到无法形容,因此 ...

  2. 二叉排序树的合并(严3.98)--------西工大noj

    二叉排序树的合并有三种方法 先存入数组,然后..... 直接在第二个树上添加第一个数的元素,时间复杂度为O(NlogN) 就像是合并数组一样合并二叉排序树,分别扫描,时间复杂度极低. 第三种我写了一下 ...

  3. .Net CLR GC 动态加载短暂堆阈值的计算及阈值超量的计算

    前言: 很多书籍或者很多文章,对于CLR或者GC这块只限于长篇大论的理论性概念,对于里面的如何运作模式,却几乎一无所知.高达近百万行的CPP文件,毕竟读懂的没有几个.以下取自CLR.Net 6 Pre ...

  4. 【定时功能】消息的定时发送-基于RocketMQ

    一.功能介绍 要实现一个消息的定时发送功能,也就是让消息可以在某一天某一个时间具体节点进行发送.而我们公司的业务场景是类似短信的业务,而且数量不小,用户会进行号码.消息内容.定时发送时间等信息的提交. ...

  5. JS基础小练习

    入职薪水10K,每年涨幅入职薪水的5%,50年后工资多少? var sum = 10000; console.log(sum * (1 + 0.05 * 50)); 为抵抗洪水,战士连续作战89小时, ...

  6. linux 编译式安装nginx

    ./configure --prefix=/usr/local/nginx --sbin-path=/usr/local/nginx/sbin/nginx --conf-path=/usr/local ...

  7. 技术分享 | 自制GreatSQL Docker镜像

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 近期打算制作一个GreatSQL的docker镜像,方便社区用户使用GreatSQL. 制作docker镜像的环境基于Ce ...

  8. [原创] RestartPC64-中文版v1.0.0.9

    原来发布的RestartPC-中文版和英文版v1.0.0.5,在PE64下无效.所以重新编译了64位版的RestartPC64-中文版v1.0.0.9,可以在PE64下面.正常Win64系统下面重启关 ...

  9. MySQL 连接超时:报错SQLSTATE[HY000] [2002] Connection timed out

    在网上找了一堆,结果全部是错的 后来,我明白了其实是设置问题. 当你的代码部署到服务器里的时候,你的mysql 的host 值 应该为 127.0.0.1 而不是 你的服务器ip 不然就会报错. 其实 ...

  10. 微信小程序/校园社区论坛/微信云开发/云函数

    一.框架来源 1.非常非常感谢B站up主"梦千的曾哥哥"的开源框架. 没有他就没有这个小程序.如果有想做的同学,可以直接移步他的视频那里开始学习.我水平不够,就不教具体怎么配置环境 ...