面向对象基础

  1. // 定义Person类
  2. class Person {
  3. /*
  4. * public公开,外界可以直接.属性就可以调用
  5. * 暴露给外部可能会破坏封装性*/
  6. public String name;
  7. public int age;
  8. }
  9. public class Object {
  10. public static void main(String[] args) {
  11. // 实例化得到ming方法
  12. Person ming = new Person();
  13. // 方法.属性
  14. ming.name = "少帅";
  15. ming.age = 21;
  16. System.out.println(ming.name);
  17. }
  18. }

方法

  1. class Person{
  2. private String name;
  3. private int age;
  4. public String getName(){
  5. return this.name;
  6. }
  7. public void setName(String name){
  8. if (name == null || name.isBlank()){ // isBlank()判断是不是空字符串
  9. throw new IllegalArgumentException("invalid name");
  10. }
  11. this.name = name.strip(); // 去除两边的空格
  12. }
  13. public int getAge(){
  14. return this.age;
  15. }
  16. public void setAge(int age){
  17. if (age < 0|| age > 100){ // 满足条件抛出错误
  18. throw new IllegalArgumentException("invalid age value");
  19. }
  20. this.age = age; // this指当前实例ming
  21. }
  22. }
  23. public class Object{
  24. public static void main(String[] args) {
  25. Person ming = new Person();
  26. ming.setName(" 少帅 "); // 设置name
  27. ming.setAge(12); // 设置age
  28. System.out.println(ming.getName() + "," + ming.getAge());
  29. }
  30. }
  31. 修饰符 方法返回类型 方法名(方法参数列表) {
  32. 若干方法语句;
  33. return 方法返回值;
  34. }
  35. 方法返回值通过return语句实现,如果没有返回值,返回类型设置为void,可以省略return
  36. private方法,外部代码无法调用,但是,内部方法可以调用它

方法参数

  1. class Person {
  2. public void setNameAndAge(String name, int age) {
  3. ...
  4. }
  5. }
  6. // 调用setNameAndAge方法时必须传入两个参数(一个是name,另一个是age)
  7. class Group {
  8. private String[] names;
  9. public void setNames(String... names) {
  10. this.names = names;
  11. }
  12. }
  13. public class Object{
  14. public static void main(String[] args) {
  15. Person p = new Person();
  16. String[] fullname = new String[]{"shuai","shenwo"};
  17. p.setName(fullname); // 传入fullname数组
  18. System.out.println(p.getName()); // shuai shenwo
  19. fullname[0] = "xiaoshuai"; // 编辑会改变值
  20. System.out.println(p.getName()); // xiaoshuai shenwo
  21. }
  22. }
  23. class Person{
  24. private String[] name;
  25. public String getName(){
  26. return this.name[0] + " " + this.name[1];
  27. }
  28. public void setName(String[] name){
  29. this.name = name;
  30. }
  31. }
  32. public class Object{
  33. public static void main(String[] args) {
  34. Person p = new Person();
  35. String bob = "Bob";
  36. p.setName(bob); // 传入bob变量
  37. System.out.println(p.getName()); // Bob
  38. bob = "Alice"; // 赋值不会改变bob的值
  39. System.out.println(p.getName()); // Bob
  40. }
  41. }
  42. class Person{
  43. private String name;
  44. public String getName(){
  45. return this.name;
  46. }
  47. public void setName(String name) {
  48. this.name = name;
  49. }
  50. }

构造方法

  1. public class Object{
  2. public static void main(String[] args) {
  3. //Person p = new Person("小帅",21); // 实例化得到对象需要按要求传参,否则报错
  4. //Person p = new Person("小王",26); // 输出传入的值
  5. //Person p = new Person("小王"); // 输出传入的值
  6. Person p = new Person(); // 输出传入的值
  7. /*
  8. * 第一种情况:如果调用new Person("小王",26);,会自动匹配到构造方法public Person(String, int)。
  9. 第二种情况:如果调用new Person(""小王"");,会自动匹配到构造方法public Person(String)。
  10. 第三种情况:如果调用new Person();,会自动匹配到构造方法public Person()。
  11. * 第三种情况如果初始值赋值了,就显示初始值内容*/
  12. System.out.println(p.getName());
  13. System.out.println(p.getAge());
  14. }
  15. }
  16. class Person {
  17. private String name; // 默认初始化为null
  18. private int age; // 默认初始化为0
  19. //private String name="小帅"; // 可以在初始化赋值
  20. //private int age=35; // 可以在初始化赋值
  21. // 初始化数据
  22. public Person(String name,int age){
  23. this.name = name;
  24. this.age = age;
  25. }
  26. public Person(String name){
  27. //this.name = name;
  28. //this.age = 26;
  29. this(name,18);
  30. }
  31. public Person(){
  32. this("hfsdajhf");
  33. }
  34. public String getName(){
  35. return this.name;
  36. }
  37. public int getAge(){
  38. return this.age;
  39. }
  40. }

方法重载

  1. /*
  2. 方法重载是指多个方法的方法名相同,但各自的参数不同;
  3. 注意:方法重载的返回值类型通常都是相同的。
  4. */
  5. public class Object {
  6. public static void main(String[] args) {
  7. String s = "Test string";
  8. int n1 = s.indexOf('t');
  9. int n2 = s.indexOf("st");
  10. int n3 = s.indexOf("st", 4); // s.indexOf(查找类型, 定起始位置);
  11. System.out.println(n1); // 3
  12. System.out.println(n2); // 2
  13. System.out.println(n3); // 5
  14. }
  15. }
  16. public class Object{
  17. public static void main(String[] args) {
  18. Person xiao = new Person();
  19. Person wang = new Person();
  20. xiao.setName("xiao wang");
  21. wang.setName("xiao","wang");
  22. System.out.println(xiao.getName());
  23. System.out.println(wang.getName());
  24. }
  25. }
  26. class Person{
  27. private String name;
  28. public String getName(){
  29. return name;
  30. }
  31. public void setName(String name){
  32. this.name = name;
  33. }
  34. public void setName(String name1,String name2){
  35. this.name = name1 + " " +name2;
  36. }
  37. }