类
public class Dog{
String breed;
int age;
String color;
void barking(){
}
void hungry(){
}
void sleeping(){
}
}
类的方法
public class Main {
public static void main(String[] args) {
// 方法调用
myMethod();
}
// 方法
public static void myMethod () {
System.out.print("你好");
}
}
不定长参数...
,只能作为最后一个参数
public class Main {
public static void main(String[] args) {
myMethod("1","2");
}
public static void myMethod (String... args) {
System.out.println("你好" + args[0]);
}
}
类的构造方法(相当于初始化)
每个类都有构造方法。如果没有显式地为类定义构造方法,Java编译器将会为该类提供一个默认构造方法。
在创建一个对象的时候,至少要调用一个构造方法。构造方法的名称必须与类同名,一个类可以有多个构造方法。
public class Puppy{
public Puppy(){
}
public Puppy(String name){
// 这个构造器仅有一个参数:name
}
}
创建对象
public class Puppy{
public Puppy(String name){
//这个构造器仅有一个参数:name
System.out.println("小狗的名字是 : " + name );
}
public static void main(String[] args){
// 下面的语句将创建一个Puppy对象
Puppy myPuppy = new Puppy( "tommy" );
}
}
// 小狗的名字是 : tommy
访问实例变量和方法
public class Puppy{
int puppyAge;
public Puppy(String name){
// 这个构造器仅有一个参数:name
System.out.println("小狗的名字是 : " + name );
}
public void setAge( int age ){
puppyAge = age;
}
public int getAge( ){
System.out.println("小狗的年龄为 : " + puppyAge );
return puppyAge;
}
public static void main(String[] args){
/* 创建对象 */
Puppy myPuppy = new Puppy( "tommy" );
/* 通过方法来设定age */
myPuppy.setAge( 2 );
/* 调用另一个方法获取age */
myPuppy.getAge( );
/*你也可以像下面这样访问成员变量 */
System.out.println("变量值 : " + myPuppy.puppyAge );
}
}
/*
小狗的名字是 : tommy
小狗的年龄为 : 2
变量值 : 2
*/
对象的初始化顺序
1、类加载
概念:将class文件读取加载到JVM内存中的过程
2、类加载的时机:
1、创建类的对象
2、调用类的静态属性或方法
3、执行main方法时,main方法所在的类会被加载
4、通过反射调用类 Class.forName("包名.类名")
3、对象的初始化顺序
1、对象所在的类被加载
执行静态属性和静态代码块(执行的顺序由上到下)
特性:
- 静态变量在类加载时初始化,且在内存中只分配一次空间
- 静态代码块在类加载时执行,且只执行一次(类只会被加载一次,也就是说当你创建两个类的对象,其实类只加载了一次)
2、对象被创建
执行实例属性和代码块(执行的顺序由上到下)
执行构造方法
类的成员
- 属性(实例属性、静态属性)
- 方法(实例方法、静态方法)
- 构造方法
- 代码块
- 静态代码块
class User {
// 实例属性
String name = "张三";
// 静态属性
static String hobby = "吃饭";
public void a () {
System.out.println("实例方法");
}
public static void b () {
System.out.println("静态方法");
}
public User () {
System.out.println("构造方法");
}
{
System.out.println("代码块");
}
static {
System.out.println("静态代码块");
}
}
执行顺序:静态代码块 -> 代码块 -> 构造方法