做题中遇到的知识点

我是小康小白,一个平平无奇的Java小白。热爱有趣的文字,生活和远方。
个人博客:https://blog.csdn.net/weixin_45791445

在这里插入图片描述

  1. Java语言常用的布局管理器包括_BorderLayout_、FlowLayout__、GridLayout_____和CardLayout布局管理器,其中JFrame的默认布局管理器是____BorderLayout___。
    对于JFrame和JWindow这样的顶层框架来说,默认的布局管理器是边界布局(BorderLayout);JPanel默认的布局管理器为FlowLayout。

  2. Java是一门解释性语言

  3. this、super关键字有何用途?

答:子类在继承父类时,可能会出现变量隐藏、方法覆盖(overriding)等现象。变量隐藏指子类的成员变量与父类成员同名,此时,父类的成员变量被隐藏。方法覆盖指子类的方法与父类的方法名相同,方法的返回值类型、入口参数的数目、类型、顺序均相同,只是方法实现的功能不同,此时父类的方法被覆盖。如果子类需要调用或访问父类被隐藏的变量或被覆盖的方法,可以使用super关键字实现。Java提供关键字super来实现对父类的成员和方法的访问。Super有三种情况可以使用:

⑴用来访问父类中被覆盖的方法;

⑵用来访问父类中被隐藏的成员变量;

⑶用来调用父类中的构造方法。

关键字this可以出现在类的构造方法和非static修饰的成员方法(即实例方法)中,代表实例对象自身,有以下几种使用情况:

(1)在类的成员方法中,可以通过this来访问实例对象的成员变量或调用成员方法。

(2)在类的成员方法中,区分成员变量和局部变量;

(3)在类的成员方法中,使用this返回实例对象本身的引用;

(4)在类的构造方法中,使用this调用该类的其他构造方法。

  1. Java静态多态和动态多态的实现机制
    多态性包含编译时的多态性、运行时的多态性两大类,即:多态性也分静态多态性和动态多态性两种。静态多态性是指定义在一个类或一个函数中的同名函数,它们根据参数表(类型以及个数)区别语义,。动态多态性是指定义在一个类层次的不同类中的重写函数,它们一般具有相同的函数,因此要根据指针指向的对象所在类来区别语义,它通过动态联编实现。Java从多个方面支持多态性,一方面可以通过方法重载实现多态,另一方面也可以通过继承过程中出现的方法覆盖以及对象类型转换(父类引用指向子类对象)实现。方法重载(overloading)与方法覆盖(overriding)是实现多态性的基本手段。

  2. 抽象类没有返回值所以修饰关键字没有void

  3. 当Frame的大小被改变时,Frame中的按钮的位置可能被改变,则使用 FlowLayout布局管理器
    BorderLayout该布局管理器将容器划分为五个部分,容器大小的改变不 会影响其中的组件的位置,而是影响它们的大小。
    FlowLayout该布局管理器的容器大小发生变化时,构件的大小不变,但是相对位置会发生变化。
    CardLayout该布局管理器显示放入该容器的当前页中的组件,一次显示一个,容器大小的改变不能影响其中组件的位置。
    GridLayout该布局管理器将容器划分为固定的网格,组件加入后占据一个单元,各组件的相 对位置不会因为容器的大小变化而变化,改变的只是组件的大小。

  4. 下面的程序用如下的命令行java Test good morning执行,结果是:morning。

public class Test{

public static void main(String []args){

     System.out.println(args[1]);
	}
}

java在命令行运行的时候要用到java命令:

java Test value1 value2

后面就是两个参数,在main里面args[]就是两个长度的数组value1存在args[0]中,value2存在args[1]中。

而这道题中的args[1]代表的是Java命令行运行时输入的第二个参数,即morning;

  1. 在Java中,要处理Button类对象的事件,以下各项中,ActionListener是可以处理这个事件的接口。
  2. 在一个Java源文件中使用class关键字定义了多少个类,编译时就会产生多少个字节码文件。
  3. 超类就是父类,小白在Java中容易遗漏的小知识点( 一 )(为了和小白一样马上要考试的兄弟准备的,希望小白和大家高过不挂) 中提到过。
  4. String 是final类,不可继承
    == 只有在两个比较对象指向同一对象时,其值才为true。
    在JAVA中,String 是字符串常量。由相同序列的字符组成的两个字符串属于同一对象,位于内存中的同一个位置。每个字符串常量只有一个 String 对象来表示。即使这个字符串常量出现在一个程序的不同位置甚至一个程序的不同程序包中。也就是说,“Hello”与 “Hello” 由于都是同一字符序列,因此 指向的肯定是同一对象。
    “hell”+“o”,两个常量字符串相加后,创建了一个新的字符串常量(这个工作是编译期间完成的),它与 "Hello"有相同的字符序列,因此指向同一对象 。

虽然一个常量表达式将两个字符串常量链接在一起的结果在编译器已完成,但是
String s1=“hel”;
String s2=“lo”;
String s3=“Hello”;
String s4=s1+s2;
这段代码中,s4只能在运行期间创建。这三条语句所创建的"hello"字符串作为String对象存储在内存中的一个独立位置,也就是说创建了一个新的对象,就与s3指向的不是用一个实例对象了。

Java提供一个机制,通过String类定义的intern()方法把一个运行时创建的字符串加到字符串常量池(如果它还没有入池)。如果上面的三条代码改为:
String s1=“hel”;
String s2=“lo”;
String s3=“Hello”;
String s4=(s1+s2).intern();
java将把 s1+s2 所返回的字符串对象中的字符序列与已经存储在字符串常量池中的字符串进行比较。如果找到一个匹配,intern()就返回这个字符串的引用。如果没有找到匹配,s1+s2 所返回的字符串将被加入到字符串常量池中,并返回这个字符串常量的引用。
这就解释了为什么 s4 == s1+s2返回false,而**s4 == (s1+s2).intern()**返回true。(s1+s2).intern()指向s1和s3指向的字符串常量"hello"。

String s1=“hello”;
String s3 = s1.toString();

s1和s3的地址和内容都相同。

  1. 任意一个Java程序默认导入一个包:java.lang。

  2. Class类是由Java编译器自动生成的,它伴随每一个类

  3. Applet是能够嵌入到HTML格式中的文件,并能够在浏览器中运行的Java类。

  4. 一个组件可以多个事件监听器,一个事件监听器也可以注册到多个组件上。

  5. 如果某一个对象出现在字符串表达式中(涉及“+”字符串对象的表达式),toString()方法就会被自动调动。
    也就是说当你使用new自动创建一个对象假设叫projectA,然后使用System.out.println(projectA);将这个对象输出时会自动调用这个对象所属于的类的toString方法。如果子类没有定义toString()方法则会调bai用父类的,如果父类没有定义则最终会调用超级父类Object类的toString()方法。

  6. 解释:
    (1)参数是对象,传递过去的是引用(即地址),当这个对象里面的字符串改变后,不影响这个对象的地址,即对象地址没有变,始终可以找到里面改后的字符串
    (2)参数是字符串或基本数据类型,传递的依然是引用,当在test函数中改变字符串时,因为字符串时不可变的,那么会改变这个str的地址值,使其指向新开辟的区域“world”,原来主函数的str没有变,而test中的str指向了另个字符串【请牢记,虽然是址传递,看似都会变,这里由于两个原因,一是主函数和test中的str一开始指向的是同一空间,但是,它们各自是存储在不同空间的;二是字符串是不变的,它们指向的字符串不会改变,test中的str会指向其他新开辟的地方】!!也就是说这样的话你的原本的主函数中的str值并未发生改变。
    说明一点:如果对象作为方法参数,并不应一定是能改变对象的属性值的:

佛系更新

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45791445/article/details/106720936