Clases principales en Java

Bienvenido a prestar atención a mi cuenta pública [Software Big Bang]
Aprendizaje de
conocimientos básicos de Java que son fáciles de ignorar en
Java Conceptos básicos orientados a objetos
de
Java Clases principales en Java Clases abstractas e interfaces
de
Java Excepciones en Genéricos de Java y colecciones en Java
Java proporciona las clases de encapsulación correspondientes para sus 8 tipos de datos básicos . Lo que corresponde sustancialmente al tipo de adición de la clase contenedora Integery la Characterescritura del bit de excepción, correspondiente al otro tipo básico de clases contenedoras, deben escribirse en mayúscula.

public class Test {
    
    
    public static void main(String[] args) {
    
    
        Integer objInt = new Integer(10);
        Character objChar = new Character('y');
        Float objFloat = new Float(89.87);
        byte num = 100;
        Byte objByte = new Byte(num);
        Long objLong = new Long(1000L);
        short num2 = 100;
        Short objShort = new Short(num2);
        Double objDouble = new Double(122.3d);
        boolean flag = false;
        Boolean objBoolean = new Boolean(flag);
    }
}

También se puede construir pasando una cadena numérica .
Por ejemplo

Integer objInt = new Integer("10");

Equivalente a

Integer objInt = new Integer(10);

Si asigna un objeto a un tipo de datos básico, debe llamar al xxxValue()método de la clase de encapsulación.
Por ejemplo:int num = objInt.intValue();

Desde después del JDK1.5 , proporciona la función de autoempaquetado (Autoboxing) y auto-unboxing (Auto Unboxing) de Java, por lo tanto, se puede asignar directamente entre la clase base y las variables de tipo de paquete.

El boxeo se refiere al proceso de convertir tipos básicos de valores de datos en objetos encapsulados correspondientes, es decir, encapsular los datos en la pila en objetos y almacenarlos en el montón.
Unboxing es el proceso inverso del boxing, es el proceso de convertir el objeto encapsulado en un valor de datos de tipo básico, es decir, almacenar el valor de datos en el montón en la pila.

public class Test {
    
    
    public static void main(String[] args) {
    
    
        Integer objInt = 10;
        int num = objInt;
    }
}

Hay dos formas de convertir un valor de cadena en un valor de tipo básico :

  • Utilice directamente el método de construcción de la clase de paquete, es decir, el método de construcción Xxx (String s);
int num = new Integer("100");
  • Llame al método estático parseXxx (String s) proporcionado por la clase de paquete
int num = Integer.parseInt("100");

Hay tres formas de convertir tipos básicos de valores en cadenas :

  • Simplemente use una cadena vacía para concatenar los valores
String str = ""+12;
  • Llame al método estático tostring () proporcionado por la clase del paquete
String num = Integer.toString(100);
  • Llame al método estático valueof () proporcionado por la clase String
String num = String.valueOf(100);

Acerca del Object.clone()método
Ejemplo de código:

//第一个示例
class Student18 implements Cloneable{
    
    
    int rollno;
    String name;

    Student18(int rollno,String name){
    
    
        this.rollno=rollno;
        this.name=name;
    }

    public Object clone()throws CloneNotSupportedException{
    
    
        return super.clone();
    }

    public static void main(String args[]){
    
    
        try{
    
    
            Student18 s1=new Student18(101,"amit");

            Student18 s2=(Student18)s1.clone();

            System.out.println(s1.rollno+" "+s1.name);
            System.out.println(s2.rollno+" "+s2.name);

        }catch(CloneNotSupportedException c){
    
    }

    }
}
//第二个示例(与第一个没有关系)
Person p = new Person(23, "zhang");  
Person p1 = (Person) p.clone();  

System.out.println(p);  
System.out.println(p1);

El método clone () ahorra la tarea de procesamiento adicional de crear una copia exacta del objeto. Si usa la nueva palabra clave para hacer esto, llevará mucho tiempo de procesamiento, por lo que usamos la clonación de objetos.

Luego, en el lenguaje Java, hay dos formas de crear objetos:

  • 1. Utilice el nuevo operador para crear un objeto.

Pasos detallados: asignar espacio de memoria, llamar al constructor, inicializar y el constructor regresa

  • 2. Utilice el método de clonación para copiar un objeto.

Pasos detallados: asignar espacio de memoria, llamar a la clone()función, llenar los campos del nuevo objeto con los campos correspondientes en el objeto original y el método de clonación regresa.

Muchos amigos tendrán preguntas sobre estas dos líneas de código.

Person p1 = new Person(1001,"xiaoming");
Person p2 = p1;//复制对象的第一种方式:直接采用地址赋值
Person p3 = (Person) p1.clone();//第二种方式:采用Object的clone()方法

A continuación se muestra la versión completa del código anterior

public class Person implements Cloneable{
    
    
    private int id;
    private String name;

    public Person(int id, String name) {
    
    
        this.id = id;
        this.name = name;
    }

    public static void main(String[] args) throws CloneNotSupportedException {
    
    
        Person p1 = new Person(1001,"xiaoming");
        Person p2 = p1;//复制对象的第一种方式:直接采用地址赋值
        Person p3 = (Person) p1.clone();//第二种方式:采用Object的clone()方法
        System.out.println(p1);
        System.out.println(p2);
        System.out.println(p3);
    }
}

El resultado de salida es el siguiente:

club.BOOKJava8.Person@5fd0d5ae
club.BOOKJava8.Person@5fd0d5ae
club.BOOKJava8.Person@2d98a335

En primer lugar, podemos estar seguros de que p1 y p2 son el mismo objeto y su ID de objeto es el mismo. p2 y p3 no son el mismo objeto y sus ID de objeto son diferentes.
Utilizo un diagrama de memoria para mostrarlo:
Primero, hay Person p2 = p1;//复制对象的第一种方式:直接采用地址赋值
Inserte la descripción de la imagen aquí
otra forma. Person p3 = (Person) p1.clone();//第二种方式:采用Object的clone()方法
Inserte la descripción de la imagen aquí
Otra cosa a tener en cuenta es que el clone()método usa una copia superficial . Si necesita una copia profunda, necesita reescribir el método de clonación.
Puede consultar este artículo: Portal

Sobre el Object.finalize()método

Java tiene un recolector de basura responsable de reciclar los recursos de memoria ocupados por objetos inútiles. Pero hay casos especiales: suponga que su objeto (sin usar new) adquiere un área de memoria "especial", porque el recolector de basura solo sabe liberar la memoria asignada por new, por lo que no sabe cómo liberar esta parte del objeto " Memoria "especial. Para hacer frente a esta situación, Java permite definir en la clase un método llamado finalize (). Su principio de funcionamiento "asume" es el siguiente: una vez que el recolector de basura está listo para liberar el espacio de almacenamiento ocupado por el objeto, primero llamará a su método finalize () y, de hecho, recuperará la memoria ocupada por el objeto cuando ocurra la siguiente acción de recolección de basura. . Entonces, si planea usar finalize (), puede hacer una limpieza importante en el momento de la recolección de basura. ——Extracto de "Pensamientos sobre programación de Java"

public class Person implements Cloneable{
    
    
    private int id;
    private String name;

    public Person(int id, String name) {
    
    
        this.id = id;
        this.name = name;
    }

    public static void main(String[] args) throws Throwable {
    
    
        Person p1 = new Person(1001,"xiaoming");
        p1.finalize();//调用finalize方法
    }
}

Acerca del Object.getClass()método
Acerca del Object.hashCode()método
Acerca del Object.toString()método : Devuelve una cadena que contiene el nombre de la clase y un código hash de la forma:类名@哈希代码值

public class Person implements Cloneable{
    
    
    private int id;
    private String name;

    public Person(int id, String name) {
    
    
        this.id = id;
        this.name = name;
    }

    public static void main(String[] args) throws Throwable {
    
    
        Person p1 = new Person(1001,"xiaoming");
        System.out.println(p1.getClass());
        System.out.println(p1.hashCode());
        System.out.println(p1.toString());
    }
}
class club.BOOKJava8.Person
1607521710
club.BOOKJava8.Person@5fd0d5ae

Se puede Object.toString()reescribir

@Override
    public String toString() {
    
    
        return "Person{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }

Entonces el resultado de salida en este momento es:

Person{
    
    id=1001, name='xiaoming'}

A continuación se presentan las clases de cadenas en Java :
hay tres tipos, de los cuales el inmutable Stringes la StringBulidersuma StringBuffer.
En primer lugar,String
existe ahora. String str1 = "abc";
Inserte la descripción de la imagen aquí
Si continúa escribiendo :, String str1 = "def";recuerde que la cadena creada por String es inmutable. El solo hecho de escribirla es crear una nueva cadena en la memoria, y la variable de cadena se referirá a la cadena recién creada. Dirección de cadena, y la cadena original todavía existe en la memoria y su contenido permanece sin cambios hasta que es destruida por el sistema de recolección de basura de Java.
Inserte la descripción de la imagen aquí
También tenga en cuenta: las String str2 = new String("lmn")variables de carácter creadas están en el montón en lugar del grupo constante, y los nuevos objetos están todos en el montón.
Inserte la descripción de la imagen aquí

Pregunta de la entrevista: ¿Cuántos objetos crea String str4 = new String (abc ")?

  1. Busque "objetos abc" en el grupo constante
  • Si es así, devuelva la instancia de referencia correspondiente
  • Si no es así, cree el objeto de instancia correspondiente
  1. Nuevo en el montón: un objeto String ("abc")
  2. Asigne la dirección del objeto a str4 para crear una referencia. Por lo tanto, si no hay un literal "abc" en el grupo constante, cree dos objetos; de lo contrario, cree un objeto y cree una referencia

Variante : String str3= new String("A"+"B");¿Cuántos objetos se crearán?

  • En el grupo constante: "A" "B", "AB": 3
  • En el montón: new String ("AB"): 1
  • Referencia: str1: 1
  • Total: 5

A continuación, laStringBuffer
String Buffer cadena creada es variable. Puede ser operado por append(), insert()y setCharAt()otros métodos. La dirección citada por el pase de carácter no ha cambiado. Para obtener StringBufferel contenido final, puede llamar al toString()método para convertirlo en un Stringobjeto.

public class Test{
    
    
    public static void main(String args[]){
    
    
        StringBuffer sBuffer = new StringBuffer("abc");
        System.out.println(sBuffer);
        sBuffer.append("def");
        System.out.println(sBuffer);
        sBuffer.insert(1, 'i');
        System.out.println(sBuffer);
        sBuffer.setCharAt(1,'o');
        System.out.println(sBuffer);

    }
}
abc
abcdef
aibcdef
aobcdef

NoStringBuilder
StringBuffer es seguro para subprocesos, pero StringBuilderno logró un rendimiento seguro para subprocesos, por lo que es bueno. Si solo necesita crear un objeto de cadena de contenido variable, no involucra hilos de seguridad, los aspectos de sincronización del problema, deben dar prioridad al uso de Stringbuilderla clase.

public class Test{
    
    
    public static void main(String args[]){
    
    
        StringBuilder sBulider = new StringBuilder("abc");
        System.out.println(sBulider);
        sBulider.append("def");
        System.out.println(sBulider);
        sBulider.insert(1, 'i');
        System.out.println(sBulider);
        sBulider.setCharAt(1,'o');
        System.out.println(sBulider);
    }
}
abc
abcdef
aibcdef
aobcdef

Supongo que te gusta

Origin blog.csdn.net/weixin_44895666/article/details/107214176
Recomendado
Clasificación