:一切客观存在的事物 对象的结构:对象由属性和方法组成 类:类是对大量共性的总结,是创建对象的模板 在java中,对象都是以类为基础而创建 类和对象的关系: 类是一个族群,对象是族群中的个体
类与方法代码的写法
package demo; public class person { String name; int age; String sex; public void say() { System.out.println("大家好,我叫:"+name+",年龄:"+age+",性别:"+sex); } } package demo; public class test { public static void main(String[] args) { //人类是我们自己定义的类型 person a; //声明一个人 a = new person();//创建一个对象 a.name = "张十三"; a.age = 23; a.sex = "女"; a.say(); } }构造方法:用来构造对象的方法 Java语言通过类的构造方法创建对象,构造方法与普通方法的声明类似
package demo; public class Person2 { String name; String sex; double weight; /** * 构造方法:用来创建对象的方法 * 名字和类名相同,不写返回值类型 * 构造方法只有在一种情况下被调用,那就是new * 当不写的时候,会自动带一个默认无参数构造 * 当编写过有参数构造之后,默认无参就没有了 */ public Person2() { // TODO Auto-generated constructor stub } public Person2(String mingzi) { name = mingzi; } }什么是类成员: 使用static修饰的成员方法和成员变量称为类成员 使用static修饰的成员变量叫做类变量 使用static修饰的成员方法叫做类方法
什么是实例变量: 未使用static修饰的成员方法和成员变量称为实例成员 未使用static修饰的成员变量叫做实例变量 未使用static修饰的成员方法叫做实例方法
package Static_demo; public class Person { //静态属性 所有对象共享,唯一的,从类的角度出发,是类的属性 static int num = 3; final static String TITLE = "人族"; //final:不可修改 //实例属性 String name; int age; String sex; public static void main(String[] args) { //输出人的num System.out.println(Person.num); Person p1 = new Person(); System.out.println(p1.num); Person p2 = new Person(); p2.num = 22; System.out.println(p1.num); System.out.println(Person.TITLE); } }所有该类对象共享类方法和实例方法 类方法使用 类名.方法名([参数])调用 实例方法使用对象名.方法名([参数])调用
package Static_demo; public class Person { //静态属性 所有对象共享,唯一的,从类的角度出发,是类的属性 static int num = 3; final static String TITLE = "人族"; //final:不可修改 //实例属性 String name; int age; String sex; //实例方法 public void say() { System.out.println("hello world"); } //类方法:里面可以使用静态变量,也可以调用静态方法 //但是不能使用实例属性或实例方法,因为还没有实例存在 public static void eat() { System.out.println("吃吃吃"); } public static void main(String[] args) { Person.eat(); //输出人的num System.out.println(Person.num); Person p1 = new Person(); System.out.println(p1.num); Person p2 = new Person(); p2.num = 22; System.out.println(p1.num); System.out.println(Person.TITLE); } }静态代码块:是一个以static为前导的代码块,一般用于为类的工作,做一些初始化工作,如初始化一些静态变量
package demo; public class Testt { static String title = null; static int i = 0; /** * 静态代码段 * 在类被加载的时候执行,只执行一次 * new、调用、main写在类中都会导致类被加载 */ static { System.out.println("静态代码段被执行"); title = "人族"; i++; } public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(Testt.title); } }加上private修饰符,加上get、set方法 get set快捷:Source->generate getters and setters
package fengzhuang; public class Person { private String name = "无名"; private String sex; private int age; public String getName() { if(Math.random()<0.8) { return this.name; }else { return "就不告诉你"; } } public void setName(String name) { this.name = name; } } package fengzhuang; public class Test { public static void main(String[] args) { // TODO Auto-generated method stub Person p = new Person(); String n = p.getName(); System.out.println(n); } }概念:this是一种特殊的引用,指向当前对象 使用方法:①如果发生局部变量与成员变量命名冲突时,可以通过this.成员变量名的方法区分实例变量和局部变量 ②一个构造方法中需要调用同一个类的另一种构造方法,可以通过this()的方式调用,但this()必须要书写在第一行
package fengzhuang; public class Test { int i = 20; public Test() { System.out.println("这是无参构造方法"); } public Test(int i) { this(); //通过this()调用无参构造方法 this.i = 1; } public void test() { int i = 30; //局部变量与成员变量同名,那么成员变量被隐藏 System.out.println(i);//30 System.out.println(this.i);//20 //通过this.成员变量名 访问被隐藏的成员变量 } }