java细节

1. super() 与 this() 的区别?

This():当前类的对象,super 父类对象。

Super():在子类访问父类的成员和行为,必须受类继承规则的约束

而 this 他代表当前对象,当然所有的资源都可以访问. 在构造函数中,如果第一行没有写super(),编译器会自动插入.

但是如果父类没有不带参数 的构造函数,或这个函数被私有化了(用 private 修饰).此时你必须加入对父类的实例化构 造.

而 this 就没有这个要求,因为它本身就进行实例化的构造. 而在方法中 super 和 this 使用的方法就差不多了.只不过 super 要考虑是否能访问其父类 的资源.

2,什么是面向对象?

面向对象是一种思想,是基于面向过程而言的,就是说面向对象是将功能等通过对象来实现,将功能封装进对象之中,让对象去实现具体的细节;

这种思想是将数据作为第一位,而方法或者说是算法作为其次,这是对数据一种优化,操作起来更加的方便,简化了过程。

面向对象有三大特征:封装性、继承性、多态性,

其中封装性指的是隐藏了对象的属性和实现细节,仅对外提供公共的访问方式,这样就隔离了具体的变化,便于使用,提高了复用性和安全性。

对于继承性,就是两种事物间存在着一定的所属关系,那么继承的类就可以从被继承的类中获得一些属性和方法;这就提高了代码的复用性。继承是作为多态的前提的。

多态是说父类或接口的引用指向了子类对象,这就提高了程序的扩展性,也就是说只要实现或继承了同一个接口或类,那么就可以使用父类中相应的方法,提高程序扩展性,但是多态有一点不好之处在于:父类引用不能访问子类中的成员

其特点是:

1:将复杂的事情简单化。

2:面向对象将以前的过程中的执行者,变成了指挥者。

3:面向对象这种思想是符合现在人们思考习惯的一种思想。

3. 作用域 public,protected,private, public写以及不写时的区别?

Public:不同包、同一包、类内都可用

Private:类内

Protected: 不同包的子类、同一包、类内都可用

不写时:同一包内、类内

 4,Java中instanceof关键字的理解

java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。

用法:
result = object instanceof class
参数:
Result:布尔类型。
Object:必选项。任意对象表达式。
Class:必选项。任意已定义的对象类。
说明:
如果 object 是 class 的一个实例,则 instanceof 运算符返回 true。如果 object 不是指定类的一个实例,或者 object 是 null,则返回 false。

但是instanceof在Java的编译状态和运行状态是有区别的:

在编译状态中,class可以是object对象的父类,自身类,子类。在这三种情况下Java编译时不会报错。

在运行转态中,class可以是object对象的父类,自身类,不能是子类。在前两种情况下result的结果为true,最后一种为false。但是class为子类时编译不会报错。运行结果为false。

例子:
接口Person
public interface Person {
public void eat();
}
实现类People
public class People implements Person {
private int a=0;
 @Override
 public void eat() {
  System.out.println("======"+a);

 }
}
子类xiaoming:
public class xiaoming extends People {
private String name;
@Override
public void eat() {
 System.out.println("+++++++++");
}
}
主函数
public static void main(String[] args) {
  People p=new People();
  xiaoming x=new xiaoming();
  System.out.println(p instanceof Person);
  System.out.println(p instanceof xiaoming); -----2
  System.out.println(x instanceof Person);
  System.out.println(x instanceof People);
 }
注意:上面2处的代码在编译时不会报错。
运行结果:
true
false
true
true

以后会不定时更新哦!

原文地址:https://www.cnblogs.com/QianYue111/p/9943776.html

时间: 2024-11-09 09:34:28

java细节的相关文章

java细节,你注意到了多少?

Java作为一门优秀的面向对象的程序设计语言,正在被越来越多的人使用.在实际开发中碰到的一些Java语言的容易被人忽视的细节,下面分享一下希望能给正在学习Java语言的人有所帮助. 1,位移运算越界怎么处理 考察下面的代码输出结果是多少? int a=5; System.out.println(a<<33); 按照常理推测,把a左移33位应该将a的所有有效位都移出去了,那剩下的都是零啊,所以输出结果应该是0才对啊,可是执行后发现输出结果是10,为什么呢?因为Java语言对位移运算作了优化处理,

每日一记--java细节之问01

现在越来越觉得java基础细节的重要性了,这样才有交流的价值. 1.静态变量与非静态变量的区别? ①分配的空间: 静态变量存在于虚拟机的方法区中,并且只有一份这样的内存空间. 非静态变量需要通过new出类实例才能够存在,且分配于堆内存空间中,每new出一份类实例便存在一份变量. ②使用的方法上: 静态变量的使用可以通过类名.变量进行调用. 非静态变量需要先创建类实例,然后通过类实例.变量进行调用. ③生命周期 静态变量的生命周期伴随程序的整个阶段. 非静态变量的生命周期伴随着类实例存在的生命周期

Java细节1

1 import java.util.Scanner; 2 3 public class Demo01 { 4 public static void main(String[] args) { 5 Scanner sc=new Scanner(System.in);//创建一个扫描器对象,用于接收键盘数据 6 System.out.println("使用next方式接收:"); 7 if(scanner.hasNext()){//判断用户有没有输入字符串,hasNextLine输入字符

java细节笔记(9月16)

1.泛型仅仅是java的语法糖,它不会影响java虚拟机生成的汇编代码,在编译阶段,虚拟机就会把泛型的类型擦除,还原成没有泛型的代码,顶多编译速度稍微慢一些,执行速度是完全没有什么区别的. 2.实现GBK编码字节流到UTF-8编码字节流的转换: 操作步骤就是先解码再编码 用new String(src,"GBK")解码得到字符串 用getBytes("UTF-8")得到UTF8编码字节数组 3.正确计算42度(角度)的余弦值 double d=Math.cos(Ma

java细节问题

保留两位小数:1.234, 1.23, 1.2, 1.0, 1. package test; import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.NumberFormat; public class test { public static float test(float f){ String str=String.valueOf(f); float result = 0f; if(str.

Java细节问题总结

这篇博客是用来记录自己在写代码的过程中遇到的一些问题,以及解决方法,做一个总结,并且会一直更新,算是笔记吧. 1.问题描述: 在byte类型中,为什么0x4a不需要强转类型,而0xc2而必须进行强转,写成(byte) 0xc2 分析解答: 其实在byte类型的强转中远不是一个0xc2.我们要知道byte的最小值是-128,最大值是127.也就是说byte的数值大于0x7f就会溢出,这时就需要对其进行强转. 另一篇总结性博客:Android细节问题总结

Java细节整理——数组与内存控制

重点:使用Java数组之前,必须对数组对象进行初始化. 当数组的所有元素都被分配了合适的内存空间,并指定了初始值时,数组的初始化完成.程序以后将不能重新改变数组对象在内存中的位置和大小. 知识点整理: 1.数组的初始化有以下两种方式: 1)静态初始化:初始化时由程序员显示指定每个数组元素的初始值,由系统决定数组的长度. 2)动态初始化:初始化时程序员只指定数组的长度,由系统为数组元素分配初始值. 不管使用哪种方式初始化Java数组,一旦初始化完成,该数组的长度就不可改变. 代码示例: publi

java细节篇(==和equals的区别)

1)当==两边是对象时(String,Integer...),两边比的都是地址2)当==两边是基本类型时(int,float),两边比的都是值3)默认equals比的是对象的地址,但是重写的话可以改变成比较值,String和Integer的equals就是重写过的 废话少说,Run!!! package test; public class Test { public static void main(String[] args) { System.out.println("##########

Java提高篇(三六)-----java集合细节(二):asList的缺陷

在实际开发过程中我们经常使用asList讲数组转换为List,这个方法使用起来非常方便,但是asList方法存在几个缺陷: 一.避免使用基本数据类型数组转换为列表 使用8个基本类型数组转换为列表时会存在一个比较有味的缺陷.先看如下程序: public static void main(String[] args) { int[] ints = {1,2,3,4,5}; List list = Arrays.asList(ints); System.out.println("list'size:&