面向对象基础
// 定义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;
}
}