Java面向对象
对象
:一切客观存在的事物
对象的结构:对象由属性和方法组成
类:类是对大量共性的总结,是创建对象的模板 在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修饰的成员变量叫做实例变量
未使用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的其他使用
静态代码块:是一个以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()的方式调用,但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.成员变量名 访问被隐藏的成员变量
}
}