Java那些必须知道的事儿_CodingPark编程公园

Java那些必须知道的事儿

文章介绍:

本文讲述了一些Java非常基础但是长时间不用又会模糊拿不定的一些知识点

目录:

  1. java实例化对象的5种方式
  2. String中对象实例化方法补充
  3. 静态变量与动态变量
  4. 为什么一个Java文件中只能包含一个public类
  5. public/private/protected的具体区别
  6. java的8种基础类型
  7. static关键字
  8. 理解final关键字

java实例化对象的5种方式

1、用new语句直接创建对象,这是最常见的创建对象的方法。

2、通过工厂方法返回对象,如:String str = String.valueOf(23);

3、运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法。如:Object obj = Class.forName(“java.lang.Object”).newInstance();

4、调用对象的clone()方法。

5、通过I/O流(包括反序列化),如运用反序列化手段,调用java.io.ObjectInputStream对象的 readObject()方法。

举个例子

package com.demo.object;

...
...

 public static void main(String[] args) {
 /**方法一 : new语句直接创建对象 */
        Fruit fruit = new Fruit(1,"苹果",4.2);
        System.out.println(fruit.toString());
         
         
        /**方法三 :运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法。
         *         如:Object obj = Class.forName("java.lang.Object").newInstance();
         **/
     try {
         Fruit fruit2 = (Fruit) Class.forName("com.demo.object.Fruit").newInstance();
         fruit2.setId(2);
         fruit2.setName("香蕉");
         fruit2.setPrice(2.6);
         System.out.println(fruit2);
      } catch (InstantiationException e) {
            e.printStackTrace();
      } catch (IllegalAccessException e) {
            e.printStackTrace();
      } catch (ClassNotFoundException e) {
            e.printStackTrace();
      }
    
   }

String中对象实例化方法补充

例:

String stra=“TEAMAG”;
String strb=“TEAMAG”;
System.out.println(stra== strb);//true
String str1=new String(“TEAMAG”);
String str2=new String(“TEAMAG”);
System.out.println(str1== str2);//false
String str3=new String(“TEAMAG”).intern();
String str4=new String(“TEAMAG”).intern();
System.out.println(str3== str4);//true

上述代码结果的原因:

直接赋值:只产生一个实例化对象,并且可以自动保存到对象池中,以实现字符串实例的重用;

构造方法:会产生两个实例化对象,不会自动入池,无法实现对象的重用。用intern()方法可以实现自动入池。

静态变量与动态变量

静态存储与动态存储

1)静态存储变量通常是在变量定义时就分定存储单元并一直保持不变,直至整个程序结束。静态变量,全局动态变量都是静态存储

2)静态存储只会初始化一次

3)静态存储变量是一直存在的,而动态存储变量则时而存在时而消失。通常把由于变量存储方式不同而产生的特性称为变量的生存期

4)动态存储变量是在程序执行过程中,使用它时才分配存储单元,使用完毕立即释放


区别

定义或者声明变量时,没有static修饰符的就是动态变量,有static修饰符的就是静态变量


动态变量

全局变量

1)在所有函数的外部定义(包括主函数),定义之后的所有函数都能使用,属于静态存储

2)作用域为整个项目,即最终编译成可执行文件的所有文件中均可以使用动态全局变量。外部文件可以通过extern关键字来声明另一个文件中存在的全局变量

3)生命周期为从程序运行到程序退出,即贯穿整个运行时间

4)无显式初始化时默认初始化值为0


局部变量

1)在函数内部定义,属于动态存储,其他函数不能访问,外部文件也不能访问。

2)作用域为当前函数,从定义位置,到其所在的{}的结束位置

3)生命周期为从函数调用到函数退出

4)无显式初始化时默认初始化值为随机值


静态变量

静态全局变量

1)作用域为当前文件,从定义/声明位置到文件结尾

2)生命周期为从程序运行到程序退出,即贯穿整个运行时间

3)无显式初始化时默认初始化值为0

静态全局变量与动态全局变量的主要不同:
动态全局变量可以通过extern关键字在外部文件中使用,但静态全局变量不可以在外部文件中使用。

⚠️在函数fun中定义了一个动态局部变量a,而a同时又是静态全局变量的情况下,作用域小的掩盖作用域大的,所以局部变量会掩盖全局变量。所以动态局部变量a会掩盖静态全局变量a


静态局部变量

1)作用域为当前函数,从定义位置,到其所在的{}的结束位置

2)生命周期为从程序运行到程序退出,即贯穿整个运行时间,当下次函数调用时,静态局部变量不会被再次初始化,而是沿用上次函数退出时的值

静态局部变量与动态局部变量的主要不同:
两者作用域相同,都在函数内部,但是两者生命周期不一样,静态局部变量的生命周期是到程序的结束,而动态局部变量的生命周期是函数的结束,静态局部变量的生命周期更长,同时静态局部变量只会初始化一次,函数重复调用,但静态局部变量不会被重新初始化


为什么一个Java文件中只能包含一个public类

在这里插入图片描述
一个编译单元(java文件)可以存在多个类,在编译时产生多个不同的.class文件,.class文件便是程序运行的数据来源。java将public类作为每个编译单元的数据接口,只能有一个,不然不能处理存在多个类的java文件。当一个编译单元(java文件)有多个非public类时,运行时需要对数据来源进行选择。


public/private/protected的具体区别

在这里插入图片描述


java的8种基础类型

在这里插入图片描述
⚠️ JAVA 基本类型不可以new的,在数组里面添加元素可以通过new基本类型!
⚠️ 看好 String 不是基础类型!


static关键字

static关键字基本概念

一句话来概括:方便在没有创建对象的情况下来进行调用
被static关键字修饰的不需要创建对象去调用,直接根据类名就可以去访问。对于这个概念,下面根据static关键字的四个基本使用来描述。

⚠️ 静态方法是属于类的,即静态方法是随着类的加载而加载的,在加载类时,程序就会为静态方法分配内存。
⚠️ 非静态方法是属于对象的,对象是在类加载之后创建的。

静态方法先于对象存在,当你创建一个对象时,程序为其在堆中分配内存,一般是通过this指针来指向该对象。静态方法不依赖于对象的调用,它是通过‘类名.静态方法名’这样的方式来调用的。而对于非静态方法,在对象创建的时候程序才会为其分配内存,然后通过类的对象去访问非静态方法。因此在对象未存在时非静态方法也不存在,而静态方法自然不能调用一个不存在的方法。

☑️ 访问:不需要创建对象
☑️ 调用:需要创建对象
main函数是静态的,所以只能访问静态-----这里也是访问,不是调用
1:静态方法只能访问静态-------------这里是访问
2:非静态方法可以访问静态,也可以访问非静态-------------这里也是访问
3:静态方法可以通过类名.直接被调用,也可以通过对象来被调用-----这里是调用
4:而非静态方法只能通过对象来调用-----这里也是调用

static关键字修饰类

java里面static一般用来修饰成员变量函数。但有一种特殊用法是用static修饰内部类,普通类是不允许声明为静态的,只有内部类才可以。下面看看如何使用。
在这里插入图片描述
如果没有用static修饰InterClass,则只能new 一个外部类实例。再通过外部实例创建内部类。


static关键字修饰方法

修饰方法的时候,其实跟类一样,可以直接通过类名来进行调用:
在这里插入图片描述


static关键字修饰变量

被static修饰的成员变量叫做静态变量,也叫做类变量,说明这个变量是属于这个类的,而不是属于是对象,没有被static修饰的成员变量叫做实例变量,说明这个变量是属于某个具体的对象的。
我们同样可以使用上面的方式进行调用变量:
在这里插入图片描述

⚠️ public static StringBuffer Bufcontent = new StringBuffer("");
这种static变量 需要 new 是因为 -> 它不是基础类型,它是一个类!


理解final关键字

final在Java中是一个保留的关键字,可以声明成员变量、方法、类以及本地变量。一旦你将引用声明作final,你将不能改变这个引用了,编译器会检查代码,如果你试图将变量再次初始化的话,编译器会报编译错误。

修饰变量

凡是对成员变量或者局部变量(在方法中的或者代码块中的变量称为本地变量)声明为final的都叫作final变量。final变量经常和static关键字一起使用,作为常量。
final修饰基本数据类型的变量时必须赋予初始值且不能被改变,final修饰引用变量时该引用变量不能再指向其他对象

修饰方法

final也可以声明方法。方法前面加上final关键字,代表这个方法不可以被子类的方法重写。如果你认为一个方法的功能已经足够完整了,子类中不需要改变的话,你可以声明此方法为final。final方法比非final方法要快,因为在编译的时候已经静态绑定了,不需要在运行时再动态绑定。

修饰类

使用final来修饰的类叫作final类。final类通常功能是完整的,它们不能被继承。Java中有许多类是final的,譬如String, Interger以及其他包装类。

匿名内部类

匿名内部类需要声明时用final
在这里插入图片描述


特别鸣谢:

ZhangWen
ZhaoXu
HuChuan
FuYao
ZhangYuMeng
CuiZhengDa

https://www.cnblogs.com/yxj808/p/12679308.html
https://zhidao.baidu.com/question/89449594.html
https://zhidao.baidu.com/question/559963397.html
https://zhidao.baidu.com/question/1052339932111842019.html
https://www.cnblogs.com/xuelin1221/p/10335990.html
https://zhidao.baidu.com/question/1435968651956992699.html
https://blog.csdn.net/MaZhongkai1994/article/details/53047949?utm_source=blogxgwz7
https://blog.csdn.net/luojianjane/article/details/100115670
https://blog.csdn.net/qq_34375473/article/details/81487803
https://baijiahao.baidu.com/s?id=1636927461989417537&wfr=spider&for=pc

在这里插入图片描述

原创文章 35 获赞 22 访问量 3002

猜你喜欢

转载自blog.csdn.net/weixin_38411989/article/details/105653144
今日推荐