类
package com.yuzhenc.oop;
public class Person {
String name;
int age;
double height;
double weight;
public void sleep(){
System.out.println("我在睡觉!");
}
public void eat(){
System.out.println("我在吃饭!");
}
}
对象
package com.yuzhenc.oop;
public class Test01 {
public static void main(String[] args) {
Person p = new Person();
p.name = "sqlboy";
p.age = 25;
p.height = 178;
p.weight = 145;
p.eat();
p.sleep();
}
}
局部变量和成员变量
区别类型 | 局部变量 | 成员变量 |
---|
代码中位置不同 | 方法中定义的变量,代码块中定义的变量 | 类中方法外定义的变量 |
代码作用范围不同 | 当前一个方法或者当前所在代码块 | 当前类的很多方法 |
是否有默认值 | 没有默认值 | 有默认值 |
是否要初始化 | 必须初始化,不然报错 | 不需要,建议使用时赋值即可 |
内存中的位置不同 | 栈内存 | 堆内存 |
作用时间不同 | 当前方法或当前代码块从开始执行到执行完毕 | 当前对象从创建到销毁 |
类型大类 | 类型小类 | 默认值 |
---|
基本类型 | byte | (byte)0 |
基本类型 | short | (short)0 |
基本类型 | int | 0 |
基本类型 | long | 0L |
基本类型 | float | 0.0f |
基本类型 | double | 0.0d |
基本类型 | char | ‘\u0000’ (null) |
基本类型 | boolean | false |
引用类型 | / | null |
package com.yuzhenc.oop;
public class Test02 {
byte a;
short b;
int c;
long d;
float e;
double f;
char g;
boolean h;
Object i;
public static void main(String[] args) {
Test02 t = new Test02();
t.print();
}
public void print(){
System.out.println(a+"\t"+b+"\t"+"\t"+c+"\t"+d+"\t"+e+"\t"+f+"\t"+g+"\t"+h+"\t"+i);
}
}
构造器
package com.yuzhenc.oop;
public class Person1 {
String name;
int age;
public Person1(){};
public Person1(String name, int age){
this.name = name;
this.age = age;
}
public static void main(String[] args) {
Person1 p1 = new Person1("sqlboy", 25);
System.out.println("我的名字叫"+p1.name+"!");
System.out.println("我今年"+p1.age+"岁了!");
}
}
this
package com.yuzhenc.oop;
public class Person2 {
String name;
int age;
public Person2(){}
public Person2(String name, int age){
this.name = name;
this.age = age;
}
public void eat(){
int age = 10;
System.out.println(age);
System.out.println(this.age);
System.out.println(name);
}
public void play(){
eat();
System.out.println("吃完饭我要去玩了!");
}
public static void main(String[] args) {
Person2 p2 = new Person2("sqlboy", 25);
p2.play();
}
}
static
package com.yuzhenc.oop;
public class Person3 {
String name;
int age;
static int count;
public static void print(){
System.out.println("我是静态方法,直接类名就可以调用!");
}
public static void main(String[] args) {
System.out.println(Person3.count);
Person3.print();
}
}
- 总结
- 在类加载的时候一起加载入方法区中的静态域中
- 先于对象存在
- 访问方式: 对象名.属性名 类名.属性名(推荐)
代码块
- 类的组成:属性,方法,构造器,代码块,内部类
- 代码块分类:普通块,构造块,静态块,同步块(多线程)
package com.yuzhenc.oop;
public class Test03 {
int a;
static int sa;
public void a(){
System.out.println("-----a");
{
System.out.println("这是普通块");
System.out.println("----000000");
int num = 10;
System.out.println(num);
}
}
public static void b(){
System.out.println("------b");
}
{
System.out.println("------这是构造块");
}
static{
System.out.println("-----这是静态块");
System.out.println(sa);
b();
}
public Test03(){
System.out.println("这是空构造器");
}
public Test03(int a){
this.a = a;
}
public static void main(String[] args) {
Test03 t = new Test03();
t.a();
Test03 t2 = new Test03();
t2.a();
}
}
- 代码块执行顺序
- 最先执行静态块,只在类加载的时候执行一次,所以一般以后实战写项目:创建工厂,数据库的初始化信息都放入静态块,一般用于执行一些全局性的初始化操作
- 再执行构造块(不常用)
- 再执行构造器
- 再执行方法中的普通块
包
- 包的作用:为了解决重名问题(实际上包对应的就是盘符上的目录)
- 包名定义
- 名字全部小写
- 中间用.隔开
- 一般都是公司域名倒着写
- 加上模块名字
- 不能使用系统中的关键字
- 包声明的位置一般都在非注释性代码的第一行
- 在导包以后,还想用其他包下同名的类,就必须要手动自己写所在的包
package com.yuzhenc.oop;
import java.util.Date;
public class Test04 {
public static void main(String[] args) {
new Person();
new Date();
new java.sql.Date(1000L);
System.out.println(Math.random());
}
}
- 总结
- 使用不同包下的类要需要导包: import **..; 例如:import java.util.Date;
- 在导包以后,还想用其他包下同名的类,就必须要手动自己写所在的包
- 同一个包下的类想使用不需要导包,可以直接使用
- 在java.lang包下的类,可以直接使用无需导包