第二周笔记

1.类和对象

:是一组相关属性和行为的集合。可以看成是一类事物的模板,使用事物的属性特殊和行为特征来描述该类事物。

对象:是一类事物的具体表现。对象是类的一个实例,必然具备该类事物的属性和行为。

  • 类是对一类事物的描述,是抽象的。
  • 对象是一类事务的实例,是具体的。
  • 类是对象的模板,对象是类的实体。

1.1 类

例: 定义一个类,用来模拟学生。

成员变量(属性):
String name;
intage;

成员方法(行为):
public void eat() {}
public void sleep() {}

public class Student {
	//成员变量
	String name;
	int age;
	//成员方法
	public void showName() {
		System.out.println("我叫" + name);
	}
	public void eat(){
		System.out.println("吃饭啦!!!");
	}
	public void sleep(){
		System.out.println("睡觉啦!!!");
	}
}

注意事项:

  1. 成员变量是直接定义在类当中的,在方法外面。
  2. 成员方法不要写static关键字。

通常情况下,一个类并不能直接使用,需要根据类创建一个对象,才能使用

1.2 对象

引用类型的一般使用步骤:

  1. 导包: 也就是指出需要使用的类,在什么位置。
    import 包名称.类名称;
    对于和当前类属于同一个包的情况,可以省略导包语句不写。
    只有java.lang包下的内容不需要导包,其他的包都需要import语句。
  2. 创建 格式:
    类名称 对象名 = new 类名称();
    例:Student stu = new Student();
  3. 使用:
    使用成员变量:对象名.成员变量名
    使用成员方法:对象名.成员方法名(参数)
    注意事项:如果成员变量没有进行赋值,那么将会有一个默认值,规则和数组一样。
//导包
import week2.Student; 
public class DemoStudent {
	public static void main(String[] args) {
		//创建
		Student stu = new Student();
		//使用
		System.out.println(stu.name); //null
		System.out.println(stu.age); //0
		//改变对象当中的成员变量数值内容
		stu.name = "镜";
		stu.age = 18;
		System.out.println(stu.name); //镜
		System.out.println(stu.age); //18
		//使用对象的成员方法
		stu.eat; //吃饭啦!!!
		stu.sleep; //睡觉啦!!!
	}
}

1.3 匿名对象

创建对象的标准格式:类名称 对象名 = new 类名称();

匿名对象就是只有右边的对象,没有左边的名字和赋值运算符。
new 类名称();

public class Anonymous {
	public static void main(String[] args) {
		new Student().name = "猪猪侠";
		new Student().showname();  //我叫null
		//使用匿名对象进行传参
		methodParam(new Scanner(System.in));
		//返回值为参数
		Scanner sc = methodReturn();
		int num = sc.nextInt();
		System.out.println("输入的是:" + num);
	}
	public static void methodParam(Scanner sc) {
		int num = sc.nextInt();
		System.out.println("输入的是:" + num);
	}
	public static Scanner methodReturn() {
		return new Scanner(System.in);
	}
}

匿名对象只能使用唯一的一次,下次再是使用就需要再创建一个新对象。

1.4 局部变量和成员变量

  1. 定义位置不一样
    局部变量:在方法的内部
    成员变量:在方法的外部,直接写在类当中
  2. 作用范围不一样
    局部变量:只有方法当中才能用,出了方法就不能用
    成员变量:整个类都可以使用
  3. 默认值不一样
    局部变量:没有默认值,如要使用,需要赋值
    成员变量:如果没有赋值,会有默认值,规则和数组一样
  4. 内存位置不一样
    局部变量:位于栈内存
    成员变量:位于堆内存
  5. 生命周期不一样
    局部变量:随着方法进栈产生,出栈消失
    成员变量:随着对象创建产生,对象被垃圾回收消失

1.5 面向对象三大特征之封装性

封装就是将一些细节信息隐藏起来,对于外界不可见

封装性在Java当中的体现:

  1. 方法就是一种封装
  2. 关键字private也是一种封装

1.6 private

  • 一旦使用了private进行修饰,那么本类当中仍然可以随意访问,但是超出了本类范围之外就不能再直接访问了。
  • 间接访问private成员变量,就是定义一对Getter/Setter方法。
  • 必须叫setXxx,getXxx命名规则。对于boolean值,Getter方法一定要写成isXxx的形式,而setXxx规则不变。
  • 对于Getter,不能有参数,返回值类型和成员变量对应。
  • 对于Setter,不能有返回值,参数类型和成员变量对应。
//要求:age的值不能小于零
public class Person {
	String name;
	private int age;

	public void show() {
		System.out.println("你是" + name + ",年龄:" + age);
	}
	//用于向age传递数据
	public void setAge(int num) {
		if(num >= 0)
			age = num;
		else
			System.out.println("数据不合理");
	}
	//用于获取age的数据
	public int getAge() {
		return age;
	}
}
public class DemoPerson {
	public static void main(String[] args) {
		Person person = new Person();
		person.name = "pig";
		//person.age = 5;       //直接访问private内容,错误写法
		person.setAge(5); 		//间接访问,正确写法
		person.show();
	}
}

1.7 this

  • 当方法的局部变量和类的成员变量重名的时候,根据“就近原则”,优先使用局部变量。
  • 如果需要访问本类当中的成员变量,需要使用格式:this.成员变量名
  • 即通过谁调用的方法,谁就是this
public class Person {
	String name;
	//参数name是对方的名字,成员变量name是自己的名字
	public void sayHello(String name) {
		System.out.println(name + ",你好,我是" + this.name);
	}
}
public class DemoPerson {
	public static void main(String[] args) {
		Person person = new Person();
		person.name = "猪猪侠";
		person.sayHello("小菲菲");
	}
}

1.8 构造方法

构造方法是专门用来创建对象的方法,当我们通过关键字new来创建对象时,其实就是在调用构造方法。

注意事项:

  1. 构造方法的名称必须和所在类名称完全一样。
  2. 构造方法不要写返回值类型,void也不要写。
  3. 构造方法不能return一个具体的返回值
  4. 如果没有编写任何构造方法,那么编译器将会默认赠送一个构造方法,没有参数,方法体,什么事情都不做。
  5. 一旦编写了构造方法,那么编译器将不会再赠送。
  6. 构造方法也是可以重载的。
public class Student {
	private String name;
	private int age;
	
	public Student() {
		System.out.println("无参构造方法执行啦!");
	}
	public Student(String name, int age) {
		System.out.println("全参构造方法执行啦!");
		this.name = name;
		this.age = age;
	}
	public void setName(String name){
		this.name = name;
	}
	public String getName() {
		return name;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public int setAge() {
		return age;
	}
}
public class DemoStudent {
	public static void main(String[] args) {
		Student stu1 = new Student();
		Student stu2 = new Student("猪猪侠"8);
		System.out.println("姓名:" + stu2.getName() + ",年龄:" + stu2.getAge());
	}
}

1.9 定义一个标准的类

一个标准的类通常拥有下面四个部分:

  1. 所有的变量名称都要使用 private 关键字修饰。
  2. 为每一个变量编写一对Getter / Setter方法。
  3. 编写一个无参数的构造方法。
  4. 编写一个全参数的构造方法。

这样标准的类也叫Java Bean

其中2 3 4 Alt + Insert可自动生成

public class Student {
	private String name;
	private int age;
	
	//Alt+Insert 自动生成下面
	public student() {
    }
    public student(String name, int age) {
        this.name = name;
        this.age = age;
    }
	public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

2. API

API(Application Programming Interface,应用程序接口)。Java API是一本程序员的字典,是JDK中提供给我们使用的类的说明文档。这些类将底层的代码封装了起来,我们需要学习如何使用。

2.1 Scanner

功能: 可以实现键盘输入数据,到程序当中

public class DemoScanner {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int a = sc.nextInt();
		printf(a);
	}
}

2.2 Random

Random类用来生成随机数字。使用起来也是三个步骤:

  1. 导包
    import java.util.Random;
  2. 创建
    Random r = new Random();
  3. 使用
    获得一个随机的int数字, int num = r.nextInt();
    获取一个随机的有范围的数:int num = r.nextInt(3); 范围0~2
import java.util.Random;
public class Random {
	public static void main(String[] args) {
		Random r = new Random();
		int num = r.nextInt();
		System.out.println("随机数是" + num);
	}
}

3. ArrayList集合

3.1 ArrayList集合概述和基本使用

数组的长度不可以发生改变,但是ArrayList来说,有一个尖括号 < E > 代表泛型。

泛型: 也就是装在集合当中的所有元素,全部是统一的类型。

注意:

  1. 泛型只能是引用类型,不能是基本类型。
  2. 对于ArrayList集合来说,直接打印得到的不是地址值,而是内容。
  3. 如果内容是空,得到的是空的中括号。
public class ArrayList {
	public static void main(String[] args){
		ArrayList<String> list = new ArrayList<>();
		System.out.println(list);  //[]
		//相机和当中添加数据需要用到add方法
		list.add("猪猪侠");
		System.out.println("list");  //猪猪侠
		list.add("小菲菲");
		System.out.println("list");  //猪猪侠,小菲菲
	}
}

3.2 ArrayList集合的常用方法和遍历

public boolean add(E e); 向集合当中添加元素,参数的类型和泛型一样,返回值代表是否成功。

public E get(int index); 向集合当中获取元素,参数是索引编号,返回值就是对应位置的元素。

public E remove(int index); 从集合当中删除元素,参数是索引编号,返回值就是被删除的元素。

public int size(); 获取集合的尺寸长度,返回值是集合中包含的元素个数。

import java.util.ArrayList;
public class ArrayListMethod {
	public static voiid main(String[] args){
		ArrayList<String> list = new ArrayList<>();
		//向集合中添加元素
		boolean miao = list.add("猪猪侠");
		System.out.println(list); //猪猪侠
		System.out.println(miao);  //true
		//从集合中获取元素
		String name = list.get(0);
		System.out.println(name); //猪猪侠
		//从集合中删除元素
		String whoRemoved = list.remove(0);
		System.out.println(whoRemoved); //猪猪侠
		System.out.println(list); //[]
		//获取集合的尺寸长度
		int size = list.size();
		System.out.println(list);
	}
}
import java.util.ArrayList;
public class ArrayListEach {
	public static voiid main(String[] args){
		ArrayList<String> list = new ArrayList<>();
		list.add("猪猪侠");
		list.add("小菲菲");
		for(int i = 0; i < list.size(); i ++)
			System.out.println(list.get(i));
	}
}

3.3 ArrayList集合储存基本数据类型

泛型只能是引用类型,不能是基本类型。如果希望集合ArrayList当中存储基本类型数据,必须使用基本类型数据对应的“包装类”。

基本类型包装类(都位于java.lang包下)
byteByte
shortShort
intInteger(特殊)
longLong
floatFloat
doubleDouble
charCharacter(特殊)
booleanBoolean
import java.util.ArrayList;
public class ArrayListBastic {
	public static voiid main(String[] args){
		//ArrayList<int> list = new ArrayList<>(); //错误写法
		ArrayList<Integer> list = new ArrayList<>();
		list.add(100);
		list.add(200);
		System.out.println(list.get(1)); //200
	}
}

4. 字符串

Java程序中的所有字符串字面值都作为此类的实例实现。也就是说,程序当中所有的双引号字符串,都是String类的对象,就算没有new。

特点:

  1. 字符串的内容永不可变。
  2. 正是因为字符串的内容永不可变,所以字符串是可以共享使用的。
  3. 字符串效果上相当于char[ ]字符数组,但是底层原理是byte[ ]字节数组。

4.1 字符串的构造方法和直接创建

创建的3 + 1种方法

三种构造方法:

  1. public String(); 创建一个空白字符串,不含有任何内容
  2. public String(char[] array); 根据字符数组的内容,来创建对应的字符串
  3. public String(byte[] array); 根据字符数组的内容,来创建对应的字符串

一种直接创建:

String str = “Hello”;

public class String {
	public static void main(String[] args) {
		//使用空参创建
		String str1 = new String();
		System.out.println(str1);   // 
		//根据字符数组创建
		char[] charArray = {'a', 'b', 'c'};
		String str2 = new String(charArray);
		System.out.println(str2);  //abc
		//根据字节数组创建
		byte[] byteArray = {97, 98, 99};
		String str3 = new String(charArray);
		System.out.println(str3);   //abc
		//直接创建
		String str = "Hello";
		System.out.println(str);    //Hello
	}
}

4.2 字符串的常量池

  1. 对于引用类型, == 进行的是地址值的比较。
  2. 程序当中直接写上的双引号字符串,都在字符串常量池(包含在堆中),new的不在池中。
public class String {
	public static void main(String[] args) {
		String str1 = "abc";
		String str2 = "abc";
		char[] charArray = {'a', 'b', 'c'};
		String str3 = new String(charArray);

		System.out.println(str1 == str2);  //true,故str1,str2同地址
		System.out.println(str1 == str3);  //flase
		System.out.println(str2 == str3);  //flase
}	

4.3 字符串的比较相关方法

public boolean equals(Object obj); 参数可以是任何对象,只有参数是一个字符串并且内容相同(严格区分大小写)才会给true,否则都会返回flase。

public boolean equalsIgnoreCase(String str); 忽略大小写进行内容比较

注意事项:

  1. 任何对象都能用Object进行接收。
  2. equals方法具有对称性,也就是a.equals(b)和b.equals(a)效果一样。
  3. 如果比较双方一个常量一个变量,推荐把常量字符串写在前面。
public class StringEquals {
	public static void main(String[] args) {
		String str1 = "abc";
		String str2 = "abc";
		char[] charArray = {'a', 'b', 'c'};
		String str3 = new String(charArray);

		System.out.println(str1.equals(str2));  //true
		System.out.println(str2.equals(str3));  //true
		System.out.println(str3.equals("abc"));  //true
		System.out.println(abc.equals("str1"));  //true
		System.out.println(abc.equalsIgnoreCase("ABC")); //true
}	

4.4 字符串的获取相关方法

String当中与获取相关的常用方法有:

  • public int length(); 获取字符串当中含有的字符个数,拿到字符串长度。
  • public String concat(String str); 将当前字符串和参数字符串拼接成为返回值新的字符串。
  • public char charAt(int index); 获取指定索引位置的单个字符。
  • public int indexOf(String str); 查询参数字符串在本字符串当中首次出现的索引位置,如果没有则返回-1。
public class StringGain {
	public static void main(String[] args) {
		//获取长度
		int length = "abcdefg".length();
		System.out.println(length); //7
		//拼接
		String str1 = "Hello";
		String str2 = "World";
		String str3 = str1.concat(str2);
		System.out.println(str3); //HelloWorld
		//获取指定索引位置的单个字符
		char ch = "Hello".charAt(1);
		System.out.println(ch); // e
		//查询首次出现的索引位置
		String str4 = "HelloHello";
		int index = str4.indexOf("llo");
		System.out.println(index); // 2
    }
}	

4.5 字符串的截取方法

  • public String substring(int index); 截取从参数位置一直到字符串末尾,返回新字符串。
  • public String substring(int begin, int end); 截取从begin开始一直到end结束中间的字符串。(包含begin,不包含end)
public class StringCut {
	public static void main(String[] args) {
		String str1 = "HelloWorld";
		String str2 = str1.substring(5);
		System.out.println(str1); //HelloWorld
		System.out.println(str2); //World
		String str3 = str1.substring(4, 7);
		System.out.println(str3); //oWo
}	

4.6 字符串的转换相关方法

  • public char[] toCharArray(); 将当前字符串拆分成为字符数组作为返回值
  • public byte[] getBytes(); 获得当前字符串底层的字节数组
  • public String replace(CharSequence oldString, CharSequence newString); 将所有出现的老字符串替换成为新的字符串,返回替换之后的结果新字符串
public class StringConvert {
	public static void main(String[] args) {
		//转换成为字符数组
		char[] ch = "Hello".toCharArray();
		System.out.println(ch[0]); // H 
		//转换成为字节数组
		byte[] by = "abc".getBytes();
		for(int i = 0; i < by.length; i ++)
			System.out.print(str1 + " "); //97 98 99
		//内容转换
		String str1 = "abca";
		String str2 = str1.replace("a", "*");
		System.out.println(str1); // abca
		System.out.println(str2); // *bc*
}	

4.7 字符串的分割

public String[] split(String regex); 按照参数的规则,将字符串切成若干部分。

注意事项: split方法的参数是一个“正则表达式”,如果按照 “.” 进行切分,必须写成 “\\.”

public class StringSplit {
	public static void main(String[] args){
		String str1 = "aaa,bbb,ccc";
		String[] array1 = str1.split(",");
		for(int i = 0; i < array1.length; i ++){
			System.out.println(array1[i]);
			//aaa
			//bbb
			//ccc
		}
		String str2 = "aaa.bbb.ccc";
		//String[] array2 = str2.split("."); //错误
		String[] array2 = str2.split("\\.");
		for(int i = 0; i < array2.length; i ++){
			System.out.println(array2[i]);
			//aaa
			//bbb
			//ccc
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值