面向对象基础
// 定义Person类class Person { /* * public公开,外界可以直接.属性就可以调用 * 暴露给外部可能会破坏封装性*/ public String name; public int age;}public class Object { public static void main(String[] args) { // 实例化得到ming方法 Person ming = new Person(); // 方法.属性 ming.name = "少帅"; ming.age = 21; System.out.println(ming.name); }}
方法
class Person{ private String name; private int age; public String getName(){ return this.name; } public void setName(String name){ if (name == null || name.isBlank()){ // isBlank()判断是不是空字符串 throw new IllegalArgumentException("invalid name"); } this.name = name.strip(); // 去除两边的空格 } public int getAge(){ return this.age; } public void setAge(int age){ if (age < 0|| age > 100){ // 满足条件抛出错误 throw new IllegalArgumentException("invalid age value"); } this.age = age; // this指当前实例ming }}public class Object{ public static void main(String[] args) { Person ming = new Person(); ming.setName(" 少帅 "); // 设置name ming.setAge(12); // 设置age System.out.println(ming.getName() + "," + ming.getAge()); }}修饰符 方法返回类型 方法名(方法参数列表) { 若干方法语句; return 方法返回值;}方法返回值通过return语句实现,如果没有返回值,返回类型设置为void,可以省略return。private方法,外部代码无法调用,但是,内部方法可以调用它
方法参数
class Person { public void setNameAndAge(String name, int age) { ... }}// 调用setNameAndAge方法时必须传入两个参数(一个是name,另一个是age)class Group { private String[] names; public void setNames(String... names) { this.names = names; }}public class Object{ public static void main(String[] args) { Person p = new Person(); String[] fullname = new String[]{"shuai","shenwo"}; p.setName(fullname); // 传入fullname数组 System.out.println(p.getName()); // shuai shenwo fullname[0] = "xiaoshuai"; // 编辑会改变值 System.out.println(p.getName()); // xiaoshuai shenwo }}class Person{ private String[] name; public String getName(){ return this.name[0] + " " + this.name[1]; } public void setName(String[] name){ this.name = name; }}public class Object{ public static void main(String[] args) { Person p = new Person(); String bob = "Bob"; p.setName(bob); // 传入bob变量 System.out.println(p.getName()); // Bob bob = "Alice"; // 赋值不会改变bob的值 System.out.println(p.getName()); // Bob }}class Person{ private String name; public String getName(){ return this.name; } public void setName(String name) { this.name = name; }}
构造方法
public class Object{ public static void main(String[] args) { //Person p = new Person("小帅",21); // 实例化得到对象需要按要求传参,否则报错 //Person p = new Person("小王",26); // 输出传入的值 //Person p = new Person("小王"); // 输出传入的值 Person p = new Person(); // 输出传入的值 /* * 第一种情况:如果调用new Person("小王",26);,会自动匹配到构造方法public Person(String, int)。 第二种情况:如果调用new Person(""小王"");,会自动匹配到构造方法public Person(String)。 第三种情况:如果调用new Person();,会自动匹配到构造方法public Person()。 * 第三种情况如果初始值赋值了,就显示初始值内容*/ System.out.println(p.getName()); System.out.println(p.getAge()); }}class Person { private String name; // 默认初始化为null private int age; // 默认初始化为0 //private String name="小帅"; // 可以在初始化赋值 //private int age=35; // 可以在初始化赋值 // 初始化数据 public Person(String name,int age){ this.name = name; this.age = age; } public Person(String name){ //this.name = name; //this.age = 26; this(name,18); } public Person(){ this("hfsdajhf"); } public String getName(){ return this.name; } public int getAge(){ return this.age; }}
方法重载
/*方法重载是指多个方法的方法名相同,但各自的参数不同;注意:方法重载的返回值类型通常都是相同的。*/public class Object { public static void main(String[] args) { String s = "Test string"; int n1 = s.indexOf('t'); int n2 = s.indexOf("st"); int n3 = s.indexOf("st", 4); // s.indexOf(查找类型, 定起始位置); System.out.println(n1); // 3 System.out.println(n2); // 2 System.out.println(n3); // 5 }}public class Object{ public static void main(String[] args) { Person xiao = new Person(); Person wang = new Person(); xiao.setName("xiao wang"); wang.setName("xiao","wang"); System.out.println(xiao.getName()); System.out.println(wang.getName()); }}class Person{ private String name; public String getName(){ return name; } public void setName(String name){ this.name = name; } public void setName(String name1,String name2){ this.name = name1 + " " +name2; }}