目录
一、类与对象的初步认识
1.1类与对象
1.2类的定义:
1.3类的实例化:
二、类的成员
2.1 字段/属性/成员变量
2.2 static关键字(与对象无关!)
2.2.1 修饰属性
2.2.2 修饰方法
2.2.3 代码块
2.2.4修饰类
2.2.5 注意事项
三、封装
3.1 public和private
3.2 getter和setter
四、构造方法
4.1 构造方法
4.2 this关键字
五、认识代码块
5.1 构造代码块
5.2 静态代码块
六、匿名对象
一、类与对象的初步认识
1.1类与对象
类:只是一个模型一样的东西,规定了该类所具备的属性和行为。
对象:类的一个实例。
1.2类的定义:
class 类名称{
属性(成员变量、字段)
行为/方法(成员方法、实例方法)
其他类/接口
}
注意事项:
- 类名称使用大驼峰命名法,从第一个单词开始首字母大写,多个单词都是首字母大写。
- 一个源文件*.java必须与该文件中的主类同名(public class),源文件中主类有且只有一个。
- 一个源文件可以存在n个普通类,直接使用class声明的类,不加public。
1.3类的实例化:
class Person{
public int age; //成员属性
public String name;
public String sex;
public void eat(){ //成员方法
System.out.println("吃饭!");
}
public void sleep(){
System.out.println("睡觉!");
}
}
public class Test {
public static void main(String[] args) {
Person person=new Person(); //通过new实例化对象
person.eat(); //成员方法调用需要通过对象的引用调用
person.sleep();
//产生对象 实例化对象
Person person1=new Person();
Person person2=new Person();
}
}
//结果如下
//吃饭!
//睡觉!
注意事项:
- new关键字用于创建一个对象的实例。
- 使用 . 来访问对象中的属性和方法。
- 同一个类可以创建多个实例。
二、类的成员
2.1 字段/属性/成员变量
定义:在类中,但是方法外部的变量。
注意事项:
- 使用 . 访问对象的字段
- 对于一个对象的字段如果没有显式设置初始值,那么会被设置一个默认的初值
- 对于各种数字类型,默认值为0
- 对于boolean类型和引用类型,默认值为null
关于null:
null在Java中为“空引用”,表示不引用任何对象。
2.2 static关键字(与对象无关!)
2.2.1 修饰属性
static属性:在JVM方法区保存,静态属性,表示类属性,该类的所有对象共享该属性,直接通过类名称访问,访问方式:类名称.属性。
- 类中常量:static final 此时常量全局唯一且不能修改,所有对象共享此常量。
例如:
class TestDemo{
public int a;
public static int count;
}
public class Test {
public static void main(String[] args) {
TestDemo t1=new TestDemo();
t1.a++;
TestDemo.count++;
System.out.println(t1.a);
System.out.println(TestDemo.count);
System.out.println("------------");
TestDemo t2=new TestDemo();
t2.a++;
TestDemo.count++;
System.out.println(t2.a);
System.out.println(TestDemo.count);
}
}
//结果如下
//1
//1
//------------
//1
//2
2.2.2 修饰方法
static方法:静态方法,直接通过类名称调用,无需产生该类的对象
- 静态方法属于类,而不属于类的对象
- 可以直接调用静态方法,而无需创建类的实例
- 静态方法可以访问静态数据成员,并可以更改静态数据成员的值
例如:
class TestDemo{
public int a;
public static int count;
public static void change(){
count=100;//访问静态数据成员,并且更改
}
}
public class Test {
public static void main(String[] args) {
TestDemo.change();//无需创建实例对象,通过类名称调用
System.out.println(TestDemo.count);
}
}
//结果如下:
//100
2.2.3 代码块
static代码块:静态代码块,定义在类中,使用static修饰的代码块,当类加载时执行一次,与对象产生无关。(类加载:就是把需要使用的类加载到JVM中)
例如:
static{
//只能访问静态数据成员
}
注意事项:
- 静态代码块不管产生多少个对象,其只会执行一次,且是最先执行的
- 静态代码块执行完毕后,构造代码块执行,再然后是构造函数执行
2.2.4修饰类
.......略.......
2.2.5 注意事项
- static家族中可以互相调用——都不依赖于对象
- 静态方法不能访问类中成员变量
- 静态方法能访问类中静态变量
- 成员方法能访问静态变量
- 成员方法能访问成员变量
三、封装
3.1 public和private
阿里编程规约:类中如无特殊说明,所有成员变量统一使用private封装(99%)。
public:被public修饰的成员变量或成员方法,可以直接被类的调用者使用。
private:当一个属性被private修饰时,该属性只在类的内部可见,出了该类就无法使用,不能被类的调用者使用。
范例:使用private封装属性,并提供public方法供类的调用者使用
class Person{
private String name="张三";
private int age=18;
public void show(){
System.out.println("name:"+name+",age:"+age);
}
}
public class Test{
public static void main(String[] args) {
Person person=new Person();
person.show();
}
}
//结果如下
//name:张三,age:18
3.2 getter和setter
如果要修改或获取private属性,就需要使用getter/setter方法。
范例:
class Person{
private String name="张三";
private int age=18;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void show(){
System.out.println("name:"+name+",age:"+age);
}
}
public class Test{
public static void main(String[] args) {
Person person=new Person();
person.setName("李四");
String name=person.getName();
System.out.println(name);
person.show();
}
}
//结果如下
//李四
//name:李四,age:18
- 在IDEA中可以使用alt+insert快速生成setter/getter方法
四、构造方法
4.1 构造方法
构造方法:是类的特殊方法,是执行对象的初始化操作。
语法规则:
- 方法名称必须与类名称相同
- 构造方法没有返回值类型声明
- 每一个类中一定至少存在一个构造方法
定义:
访问修饰符(public/private) 类名称(){
}
注意事项:
- 当类中没有显示声明构造方法时,JVM会生成一个默认的无参构造,当类中显示提供了构造方法,JVM将不会再生成默认的无参构造
- 初始化(类中成员属性赋值)
- 构造方法的重载:这些重载的构造方法只有参数个数不一样(构造方法就是给类中的属性赋值,类中属性的类型在定义时就规定好了),按照构造方法参数个数升序排列
- 构造方法的互相调用:使用 this(参数); 必须放在该方法的第一行调用,并且调用不能成“环”,不能递归调用
注意:当一个类构造方法被private,表示不希望通过外部产生对象,而由类本身向外提供对象,外部只能使用不能创建。例如:星期类
4.2 this关键字
- this修饰属性表示直接从本类中寻找属性(this.)
- this修饰方法,表示调用方法(调用本类中普通方法:this.方法名称();? ? 调用本类中的构造方法:this(参数);)
- this表示当前对象引用(当前调用的成员方法或变量是通过对象A调用的,则此时this就是A)
五、认识代码块
代码块:使用{}定义的一段代码
5.1 构造代码块
定义:定义在类中的代码块(不加修饰符),也叫实例代码块
例如:
class Person{
private String name;
private int age;
private String sex;
public Person(){
System.out.println("I am Person init()!");
}
//构造代码块
{
this.name="bit";
this.age=12;
this.sex="man";
System.out.println("I am instance init()!");
}
public void show(){
System.out.println("name:"+name+" age:"+age+" sex:"+sex);
}
注意:当产生对象时执行构造代码块,优先于构造方法执行,有几个对象产生,构造代码块就执行几次。
5.2 静态代码块
2.2.3已经讲解,这里不再赘述......
六、匿名对象
匿名对象:一个对象没有任何引用指向
注意事项:
- 匿名对象只能在创建对象时使用
- 如果一个对象只是用一次,后面就不需要用了,可以考虑使用匿名对象
- Java没有析构函数,当一个对象没有任何引用指向,该对象就会被标记为垃圾对象,由JVM自主释放空间,若一个对象有引用指向,无论内存是否够用,都不会释放该空间
|