目录
4.this的引用(谁调用了包含this的类,这个this就是谁,表示当前对象的引用)
- 大驼峰,指的是定义类的修饰,即单词每一个首字母进行大写区分,例:WashWachine
- 小驼峰,指的是定义成员方法的修饰,即第二个单词首字母进行大写,第一个单词首字母小写进行区分,例:washClothes
- 针对Java的idea编译器中,若想找到当前代码的文件位置,直接鼠标右键点击文件名,选择Open in -> Explorer 即可
1.例:类:
class WashMachine{
//字段/属性 成员属性或者成员变量
public String brand; //"小天鹅"
public String type; //类型
public double weight;//重量
public double length;//长
public double width;//宽
public double height;//高
public double color;//颜色
}
//成员方法
public void wash Clothes(){//洗衣服
System.out.println("洗衣功能");
}
public void wash Clothes(){//脱水
System.out.println("脱水功能");
}
public void wash Clothes(){//定时
System.out.println("定时功能");
}
注意:
- 一般情况下,建议一个JAVA文件一个类
- main方法所在的类一般要使用public修饰
- public修饰的类必须要和文件名相同 (若需要修改文件名,鼠标右键文件名,选择RenamFile 便可修改)(若想找文件地址,鼠标右键文件名,选择Open in->Explorer)
- 不要轻易尝试修改public修饰的类的名称
2.类的实例化
用类类型创建对象的过程,称为类的实例化,在JAVA中采用new关键字,配合类名来实例化对象
结论:可以使用new关键字来实例化多个对象
- new关键字用于创建一个对象的实例
- 使用 . 来访问对象中的属性和方法
- 同一个类可以创建多个实例
一:
WashMachine washMachine1=new WashMachine();
WashMachine1.brand="小天鹅";
System.out.println(washMachine1.brand);
// 表示实例化为“小天鹅”
二:
WashMachine washMachine2=new WashMachine();
WashMachine2.brand="小天鹅";
System.out.println(washMachine2.brand);
//表示实话为“一个品牌”
3.类和对象的说明
- 类是一种自定义的类型,可以用来定义变量
- 一个类可以实例化出多个对象,实例化出的对象占用实际的物理空间,存储类成员变量
4.this的引用(谁调用了包含this的类,这个this就是谁,表示当前对象的引用)
public class TestDate{
public int year;
public int month;
public int day;
public void setDate(int year,int month,int day){
this.year=year;
this.month=month; //this表示当前对象的引用
this.day=day;
}
public void printDate(){
System.out.println(“年+"this.year+"月+"this.month+"日+”this.day);
}
public static void main(String[] args){
TestDate testDate1 = new TestDate();
TestDate testDate2 = new TestDate();
TestDate testDate3 = new TestDate();
testDate1.setDate(1998,1,9);
testDate2.setDate(1999,4,9);
testDate3.setDate(2000,9,9);
testDate1.printDate();
testDate2.printDate();
testDate3.printDate();
}
}
4.1 this引用的特性
- this的类型:对应类型引用
- this只能在“成员方法”中使用
- 在“成员方法”中,this只能引用当前对象,不能再引用其他对象
- this是“成员方法”第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法对象的引用传递给该成员方法,this负责来接受。
5.构造方法
5.1 构造方法模板
方法名(参数列表){
方法名;
} //没有返回值的方法,并且方法名必须和类名保持一致
5.2 一个对象的产生至少有以下两步:
- 为对象分配内存
- 调用合适的构造方法
5.3 在Java的idea编译器中生成构造方法发快捷方法
右击鼠标右键,选择Generate -> 选择Constructor -> 按住shift键,将自己创建的变量都勾选上,便可自动生成构造方法
5.4 构造方法的特性
- 名字必须与类名相同
- 没有返回值类型,设置void也不行
- 上述Date(构造方法)类中,没有定义任何构造方法,编译器会默认生成一个不带参数的构造方法
注:一旦用户定义,编译器则不再生成
4.构造方法中,可以通过this调用其他构造方法来简化代码
5.4.1 调用构造方法 this() ,需注意:
- 这个写法只能在构造方法当中才能这样写
- 构造方法中不能调用自己
- 只能放在构造方法的第一行
- 不能形成环
5.4.2 this的三种用法
- this.属性
- this()
- this.方法
5.5 默认初始化
- 成员变量在没有初始化的时候,都有一个默认值,引用类型的值都是null
5.6 就地初始化
例:
public String name;----->public String name="悟空";
public int age;----->public int age=10000;
6.封装
在Java当中,语法层次上说,使用private可以隐藏实现细节
访问修饰限定符:
default的使用就是什么都不写
public:可以理解为一个外貌特征,谁都可以看得到
default:对于自己家族中(同一个包)不是什么秘密,对于其他人来说是隐私
private:只有自己知道,其他人不知道
【说明】:
- protected主要用在继承中
- default权限指:什么都不写时的默认权限
- 访问权限除了限定类中成员的可见性,也可以控制类的可见性
6.1 封装扩展之包
包其实是Java当中组织类的一种方式
6.2 导入包中的类
Java中已经提供了很多现成的类供我们使用,
例如Date类:可以使用 Java.until.Date导入Java.until这个包中的Date类
即: Java.until.Date date=new java.until Date();
进行优化,可以使用 import语句导入包
import java.until.Date;
Date date=new date();
若含有两个及以上的类,可以使用速配符:
即 import java.until.*;(非必要不使用)
它不是导入until下的所有类,作用是用到哪个类,它帮助你导哪个类
可以使用 import static 导入包中静态的方法和字段
import static java.until,lang.Math.*;
//double result=Math.sqrt(Math.pow(x,2)+Math.pow(y,2));
表示x的平方加y的平方的和再开方
double result=sqrt(pow(x,2)+pow(y,2));
6.3 自定义包
输入:右键左边的src -->new --> package -->输入包名(一般都是网址)
例:com.bit.www 或者 com.bit
创建好之后,会生成bit的包,在bit中创建新的项目,首行需声明当前Java文件,在哪个包中
例:package com;
例:import com.bit.TestBit;
TestBit testBit =new TestBit():
6.4 常见的包
-
java.lang:系统常用基础类(String、Object),此包从JDK1.1后自动导入
-
java.lang.reflect:Java反射编程包
-
java.net:进行网络编程开发包
-
java.sql:进行数据库开发的支持包
-
java.until:是Java提供的工具程序包。(集合类等)非常重要
- java.io:I/O编程开发包
6.5 创建多个属性的快捷方法
类中含有多个属性:
鼠标右键Generate -->选择Generate and Setter -->按住shift选中所有,编译器会自动帮助生成,不管有多少属性
7.static 成员
private String name; //普通成员变量
privat int age;
//表示所有对象都有一份
private static String classRoom; //教室【就只有一份】,类变量,静态成员变量
//表示所有对象共用一份
System.out.println("教室是“+Student.classRoom);
普通成员变量:在类的内部,构造方法的外部
静态成员变量:在类的外部,构造方法的外部,被static修饰了
局部变量:方法内部定义的变量
类的静态成员变量通过类名访问,也就是说,这个静态成员变量不属于对象
静态成员的访问方式:不建议通过对象的引用访问,建议通过类名.的方式进行访问
1.引用不可以指向引用
Student student1=new Student("zhangsan",18);
Student student2=student1;
引用只能指向对象:上述代码的意思是,student2这个引用,指向student1这个引用所指向的对象
2.一个引用不能指向多个对象
3. Person P=null; 代表不指向的对象
静态方法的内部是不能调用非静态的方法的
原因是因为静态方法不依赖对象,但是非静态方法依赖对象
例:
class student{
public void print(){
System.out.println("姓名:"+this.name+"年龄:"+this.age):
}
public static void funcStatic(){
//print();编译错误,这是非静态的方法
System.out.println("funcStatic().....")
}
}
public static void main(String[] args){
student.funcStatic();
}
静态方法是属于整个类的,而非静态方法只能通过对象调用
【静态方法特征】(静态是最先被执行的):
- 不属于某个具体的对象,是类方法
- 可以通过对象调用,也可以通过类名.静态方法名(...)方式调用,更推荐使用后者
- 不能在静态方法中访问任何非静态方法,因为非静态方法有this参数,在静态方法中调用的时候无法传递this引用