什么是类?什么是对象?
一切客观存在都是对象。有价值:用对象完成使命。
不要发明轮子---
根据大量对象的特征,抽象出他们的共同点。得到类。
1.类由属性和方法组成
类是所有创建对象的模版。
设计一个学生类
两部分:属性+方法
public class Student {
//属性
String name=“xiaoming”;
int age;
char sex;
//方法
public void study(){
System.out.println("i can study!");
}
public void sleep(){
System.out.println("i can sleep!");
}
}
如何用类创建对象?
Student s=new Student();定义一个student类型的变量指向内存某块存储学生对象的空间。
访问对象的某个属性用s.属性名方式。
2.实例变量
实例变量有默认值
默认值是各种各样的零。
实例变量至少在本类范围中有效
实例变量可以和局部变量发生命名冲突,局部优先
public class Student {
//属性
String name;
int age;
char sex;
//方法
public void study(){
String name="xiaoming";
System.out.println(name+" can study!");
}
3.类中方法定义类似函数定义
修饰符 返回值类型 方法名(参数1,参数2) 异常{
方法体
}
4.什么叫方法重载
首先这些方法在同一个类里面定义,方法名字相同,但是参数列表不同.要么参数类型不同,要么参数个数不同,要么参数个数一样,但是排列顺序不一样,特别注意,跟返回值类型无关。
public void print(String name){
System.out.println("学生姓名是:"+name);
}
public void print(int age){
System.out.println("学生年龄是:"+age);
}
public void print(String name,int age){
System.out.println("学生的基本信息:姓名是"+name+"\t 年龄是"+age);
}
public void print(int age,String name){
System.out.println("学生的基本信息:姓名是"+name+"\t 年龄是"+age);
}
优点:在运行的时候根据具体实参的不同自动调用相应的方法。整个过程对使用对象的方法的程序员来说是透明的。
实例代码
根据传入参数的不同自动选取相应方法
典型例子,System.out.println(整形,字符串等)
5. 构造方法
定义:首先构造方法没有返回值,方法名要跟类名一致,其他部分和普通方法没有区别。
如果一个类里面没有定义任何构造方法,默认系统会给设置一个构造方法,内容如下:
//构造方法
public Student(){
}
构造方法可以重载
//构造方法
public Student(){
}
public Student(int age){
this.age=age;//修改当前对象的实例变量的值
}
public Student(String name){
this.name=name;
}
public Student(String name,int age){
this.name=name;
this.age=age;
}
构造方法作用:
-
创建对象
-
构造方法里面有方法体,一般是用来初始化实例变量
构造方法在对象构造时,被自动调用一次。而且只会被调用一次
分配 空间
初始化属性
调用构造方法
6.This关键字
This表示当前对象,在类内的任何实例方法中都可以使用,表示等到具体实例化对象的时候会自动产生一个指向对象的变量,这个变量就是this。但this只对类内可见,在外部不能使用。
public class TestThis2 {
public static void main(String args[]){
MyClass m1 = new MyClass();
m1.print();
}
}
class MyClass{
int i = 10;
public void print(){
int i = 20;
System.out.println(i);
System.out.println(this.i);
}
}
7.String类 字符串 char—2个byte
一个特殊类String
创建一个字符串对象
String s = “suns”;创建一个对象
String s = new String(“suns”); 创建了两个对象
这两种写法区别
前者对象放在jvm字符串池,下次定义同样字符串时候可以不用创建,直接使用,建议采用此方式
后者不放在串池
String类中的常用方法
boolean equals()
equals用法
String str=new String("apple");
if("apple".equals(str)){
System.out.println("二者内容相同");
}
char charAt(int pos)
//charAt(pos) pos 0---start
char c="apple".charAt(3);
System.out.println(c);
//
int length()
字符串长度
boolean startWith(String s)
是否以某个字符串s开始,返回布尔值
String str="dianwei.chi@163.com";
System.out.println(str.startsWith("d"));
trim()
去掉两边空格
Contains(String str)
当前字符串对象是否包含str对应的字符串,如果包含返回true,不包含返回false。
String str="orrnge";
if(str.contains("a")){
System.out.println("该商品符合检索条件");
}
Substring(int begin,int end)
Begin从0开始,end表示截取到第end-1个字符。
String str="dianwei.chi@163.com";
String substr=str.substring(8,11);
System.out.println(substr);//chi
Substring(int begin)
对当前字符串求从begin这个位置开始的子字符串。Begin从0开始。
String str="dianwei.chi@163.com";
String substr=str.substring(12);
System.out.println(substr);//163.com
Int indexOf(String s)
返回s在当前大字符串中第几个位置出现,位置从0开始计算的。
@163
String str="dianwei.chi@163.com";
int pos=str.indexOf("@");
System.out.println(pos);//11
lastIndexOf(String s)
s在字符串中最后一次出现的位置
String str="dianwei.chi@163.com";
int pos=str.lastIndexOf(".");
System.out.println(pos);//15
Replace(old,new),replaceAll(find,instead)
Replace:old代表被替换的字符串,new表示替换成的目标字符串
replaceAll含义和replace基本相同,但是支持正则表达式。
split: public class TestString1 {
public static void main(String[] args) {
// split 分割 [1,2,3,4,5] 1,2,3,4,5
String str=" 1,one2,one3,one4, one5 ";
int[] arr=new int[5];
String[] sarr=str.split(",one");
for(int i=0;i<sarr.length;i++)
System.out.print(sarr[i]+"\t");
}
}
For循环的for each写法
//for each写法
for(String product:products){
System.out.println(product);
}