方法
按照生命周期分为:
静态方法(类方法):
被static修饰普通方法就是静态方法。
非静态方法(实例方法):
没有被static修饰普通方法就是非静态方法。
备注:
1、所有的非静态方法通过该方法所在类的对象去调用/使用。
格式:
类名 对象名 = new 类名();
对象名.非静态方法名(实参);
2、所有静态方法通过该方法所在类的类名去调用/使用。
格式:
类名.静态方法名(实参);
package com.wlx.day05;
public class MethodDemo
{
/**
* 声明无参数的非静态方法/实例方法
*/
void demo()
{
System.out.println("demo()---");
}
/**
* 声明有一个String类型参数的非静态方法/实例方法
* @param s
*/
void method(String s)
{
demo();
}
/**
* 定义有一个int类型参数的静态方法
* @param a 形参
*/
static void demo1(int a)
{
System.out.println("a = "+a);
}
public static void main(String[] args)
{
//创建MethodDemo这个类的实例对象
MethodDemo md = new MethodDemo();
//定义一个int类型的变量b,并为其初始化
int b = 123;
demo1(b);//此处的变量b被称为实参---实际的参数/有具体值的参数
//通过md对象使用md对象中的demo()方法
md.demo();
}
}
创建对象
创建对象的格式:
引用数据类型 对象名 = new 引用数据类型();
访问权限修饰符
访问权限修饰符从大到小的顺序是:
public > protected > default > private
类和对象
类的定义:
类是相同属性和行为的抽象出来的就是类,定义类时,使用class修饰。
对象的定义:
对象就是类的一个具体的个体的实例。
构造方法
构造方法是一个特殊的方法,主要用于创建对象,并初始化属性和实例方法。
格式:
[访问权限修饰符] 当类的类名(参数列表)[异常]
{
方法体;
}
备注:
1、访问权限修饰符和构造方法名之间什么都没有。
2、所有被class修饰的类,默认情况下都有一个无参数的构造方法,该构造方法默认被编译器和JVM创建。
3、如果自己定义有参数的构造方法,推荐将无参数的构造方法一起定义了,因为此时编译器和JVM就不会创建该无参数的构造方法了。
4、构造方法不能直接调用,创建对象时调用。
package com.wlx.day05;
public class ConstructorDemo
{
public String username = "helloname";
private String userpwd = "hn123456";
/**
* 定义一个无参数的构造方法
*/
ConstructorDemo()
{
System.out.println("无参数的构造方法");
}
ConstructorDemo(String s,String p)
{
username = s;
userpwd = p;
}
public static void main(String[] args) {
ConstructorDemo cd = new ConstructorDemo("jim","jim123");
System.out.println(cd.username);
System.out.println(cd.userpwd);
}
}
this关键字
this表示当前实例对象的自我引用。
备注:
1、this只能在非静态中使用。
2、当局部变量和全局变量同名时,此时全局变量被屏蔽,可以使用this.全局变量名调用被屏蔽的全局变量。
3、一个构造方法调用另一个构造方法时,使用this(参数列表)调用,该this()必须在构造方法体中,除注释以外的第一行。
4、当一个实例方法(非静态方法)调用另一个实例方法时,可以使用this.实例方法名()去调用,由于方法重载的约束条件,此时this.可以省略。
5、使用this判断当前调用该实例方法的对象和传递参数进来的对象是否是同一个对象。
package com.wlx.day05;
public class ThisDemo
{
public String username = "helloname";
private String userpwd = "hn123456";
public ThisDemo()
{
//调用有两个字符串类型参数的构造方法
// this("lilei","lilei123");
// System.out.println("无参数的构造方法");
}
public ThisDemo(String username,String userpwd)
{
this.username = username;
this.userpwd = userpwd;
System.out.println("username***"+username);
System.out.println("userpwd***"+userpwd);
}
/**
* 非静态方法/实例方法
* @param username
* @param userpwd
*/
public void demo(String username,String userpwd)
{
//打印局部变量username和userpwd的值
System.out.println("username = "+username);
System.out.println("userpwd = "+userpwd);
//打印全局变量username和userpwd的值
System.out.println("this.username = "+this.username);
System.out.println("this.userpwd = "+this.userpwd);
}
public void test()
{
System.out.println("test()---");
//调用有两个字符串类型形参的demo()方法
// this.demo("hanmm","hanmm123");
demo("hanmm","hanmm123");
}
/**
*
* @param obt
*/
public void obj(Object obt)
{
//此处的==等于号,比较的是地址是否相等
if(this == obt)
{
System.out.println("this和obt是同一个对象");
}
else
{
System.out.println("this和obt---不是---同一个对象");
}
}
public static void main(String[] args) {
ThisDemo td = new ThisDemo();
ThisDemo td1 = new ThisDemo();
// td.test();
td.obj(td1);
}
}
方法的重载
方法重载是一个方法的多种表现形式。
约束条件:
1、方法名相同,方法的形参个数,顺序,类型至少有一项不同。
2、方法的返回值类型可以不同。
3、抽象方法也可以被重载。
4、方法重载对访问权限修饰符没有要求。
5、方法重载对抛出的异常也没有任何要求。
package com.wlx.day05;
public class OverLoadDemo
{
public void demo()
{
}
/**
* 方法的重载
* @param a
*/
public void demo(int a)
{
}
private String demo(String s)
{
return s;
}
protected void demo(int a,String s)
{
}
void demo(String a,int s)//throws Exception
{
}
//抽象方法
// public abstract void demo(double d);
}
面向对象特征
封装、继承、多态三大特征。
1.1、封装
封装类定义:
隐藏属性,提供公共方法用于设置或获取属性,并在公共的方法中对数据进行验证,这样的一个类就是封装类。
作用:
高内聚:
封装类/思想,源码中的代码和当前类的关系紧密度高。
低/松耦合:
当类可以用在任何一个需要该类的软件项目中(就是封装的这个类和其他类之间的紧密度低/松)。
package com.wlx.day05;
/**
* 封装类
*/
public class Person2
{
//属性
private String username;
private String userpwd;
private int userage;
private String usersex;
public Person2()
{
}
public Person2(String username,String userpwd,String usersex,int userage)
{
/*this.username = username;
this.userpwd = userpwd;
this.usersex = usersex;
this.userage = userage;*/
setUsername(username);
setUserpwd(userpwd);
setUsersex(usersex);
setUserage(userage);
}
/*public void hhhh(String username,String userpwd,String usersex,int userage)
{
this.username = username;
this.userpwd = userpwd;
this.usersex = usersex;
this.userage = userage;
}*/
//为username赋值
public void setUsername(String username)
{
if(username.length() >= 2 && username.length() <= 6)
{
this.username = username;
}
}
//从username获取值
public String getUsername()
{
return username;
}
//为userpwd赋值
public void setUserpwd(String userpwd)
{
if(userpwd.length() >= 3 && userpwd.length() <= 6)
{
this.userpwd = userpwd;
}
}
//为userage赋值
public void setUserage(int userage)
{
if(userage >= 0 && userage <= 160)
{
this.userage = userage;
}
}
//为usersex赋值
public void setUsersex(String usersex)
{
if(usersex.equals("男") || usersex.equals("女"))
{
this.usersex = usersex;
}
}
public String getUserpwd() {
return userpwd;
}
public int getUserage() {
return userage;
}
public String getUsersex() {
return usersex;
}
/*public static void main(String[] args)
{
*//*Person2 p2 = new Person2();
p2.usersex = "man";*//*
// Person2 person2 = new Person2("tom","tom123","man",123);
}*/
}