java学习笔记2

面向对象基本概念

常见类的引用

Arrays类的使用

import java.util.Arrays;

public class Main {
	public static void main(String[] args) {
		int[] arr = { 5, 3, 2 };
		Arrays.sort(arr);
		System.out.println(Arrays.toString(arr));

	}
}

输出为:[2, 3, 5]

Random类

import java.util.Random;

public class Main {
	public static void main(String[] args) {
		Random random = new Random();
		for (int i = 0; i < 10; i++) {
			System.out.println(random.nextInt(30));
		}

	}
}

随机输出小于30的十个整数

报错 The method nextDouble() in the type Random is not applicable for the arguments (double) ,因为在旧版本 Java(比如 Java 8 及之前 )中,Random 类的 nextDouble 方法没有接收 double 类型参数的重载。它默认是生成 [0.0, 1.0) 范围的随机数,若要生成 [0, max) 范围的随机 double 值,需要用公式:random.nextDouble() * max (比如想生成 [0, 30.9) 的数,写成 random.nextDouble() * 30.9 )。从代码历史记录看,你可能写了 random.nextDouble(30.9) ,这在低版本 Java 里不被支持,就会报参数不匹配的错。

image

三者差异
1.

  • String 是引用类型,表示字符串对象
  • 通过new String(...) 创建字符串对象,JVM会在堆内存开辟新空间储存“123”,即使字符串常量池中已有“123”,仍然会额外创建堆对象。
  • 字符串内容是不可变的,String 内部用final char[]存储字符,修改字符串实际是创建新对象。
  • 实际开发中更常用简写 String str = "123";(直接复用常量池,更高效)
  • Integer 是int的包装类(属于引用类型),用于把基本类型int封装成对象,支持泛型,集合等场景。
  • 通过 new Integer(...) 在堆内存创建 Integer 对象,将字符串 "12" 解析为 int 值后封装
  • Java 5+ 后可通过自动装箱简化(如 Integer x = 12; ),无需手动 new
  • 推荐 Integer.valueOf("12"),更高效

int y=12 int 是基本数据类型,直接存储数据,不属于对象。
最佳实践

  • 字符串优先用 String str = "123";(复用常量池,避免不必要的 new );
  • 包装类优先用 Integer x = Integer.valueOf("12");(复用缓存池,比 new 高效 );
  • 基本类型 int 用于纯数值场景,简单直接,性能最优。

ArrayList

ArrayList<String>arraylist=new ArrayList<>();
arraylist.add("1");
arraylist.add("3");
System.out.println(arraylist.get(1));
for (String e : arraylist) {
			System.out.println(e);
		}

引用类型变量

  1. 引用类型变量存放的是对象的引用,而不是对象本身。
  2. 通过引用,可以找到某个对象
String s = new String("123");
String a = new String("123");
System.out.println(s == a);
System.out.println(s.equals(a));

返回的分别为false,true。
因为第三行比较的并不是数值,而是是否指向了同一个对象,要想比较数值,则需要通过s.equals(a)来进行。

方法的参数

image

封装与模块化

封装

  • 访问修饰符
    private
    1.仅限于对象本身内部访问
    2.常用于修饰对象属性
    public
    1.可以任意访问
    2.常用于修饰方法

由于private仅限于对象本身内部访问,为了解决这个限制,则需要通过设置器setter访问器getter来处理。

public class Person{
  private String name;
  private int age;
  public void SetName(String name){
  this.name=name;
}
public String getName(){
  return name;
}
}

this 是指向对象本身的引用

public class Main{
  public static void main(String[]args){
    Person p=new Person;
    p.SetName("123")
    System.out.println(p.getName());
}
}

模块化

每个对象代码的编写、维护独立于其他对象

对象的初始化

新建对象时的自动初始化

类型 初始值
byte、short、int、long 0
char 空字符
float、double 0.0
Boolean false
引用类型 null

构造函数

  • 创建对象,并且对属性进行初始化
  • 构造函数名称和类名相同,且无返回类型

构造函数的重载

  • 重名但是参数不同
  • new的时候根据传入参数选择对应的构造函数。

构造函数之this

一个构造函数调用另一个构造函数
需要使用this,且放在第一行。
如果类中没有构造函数,则它会自动创建一个无参构造函数

private构造函数

只能在类内部使用

import java.util.Scanner;
public class Person{
	private String name;
	private int age;

	public Person(String name,int age){
	this.name=name;
	this.age=age;	
	}
	
	public String getName(){
		return name;
}
	public int getAge(){
		return age;
}
	

	public static void main(String[]args){
		Scanner sc=new Scanner(System.in);
		System.out.println("Please enter your name:");
		String name=sc.nextLine();
		System.out.println("Please enter your age:");
		int age=sc.nextInt();
        	Person person=new Person(name,age);
		System.out.println("Name:"+person.getName()+"Age:"+person.getAge());
		sc.close();

        
	
}

}

(这段代码OK,不过前两段,,还没试过)。

初始化块

image

关于cmd新学的一条 假如有一个文件为Person.txt,你要把它改成Person.java
可以在cmd中 ren Person.txt Person.java
这样子就改好了

posted @ 2025-08-27 15:13  才知风自由  阅读(25)  评论(1)    收藏  举报