IDEA的安装
文本编辑器(TE)------------------------------
记事本,Notepad++,Edit Plus,UltraEdit,…
集成开发环境(IDE)------------------------------
Jbuilder,NetBeans,Eclipse,MyEclipse,IDEA,…
下载和安装方式------------------------------
下载地址:https://www.jetbrains.com/
安装方式:一路点击下一步默认安装即可
案例题目------------------------------
编程实现Animal类的封装,特征有:名字和毛色,要求提供打印所有特征的方法
编程实现Dog类的封装并继承自Aniaml类,该类的特征有:牙齿数量,要求提供打印所有特征的方法
编程实现DogTest类,在main方法中分别使用无参和有参方式构造Dog类型对象并打印特征
package com.lagou.task08; //package 包(文件夹),是关键字
//Animal在上面的,模块二代码.com.lagou.task08包里
//右键点Show in Explorer打开当前文件位置
//Refactor重构 -> Rename重命名
//
public class Animal {
private String name;
private String color;
//右键Generate 里面可以自动生成代码,如get和set和构造方法
public Animal() {
}
public Animal(String name, String color) {
setName(name);
setColor(color);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public void show(){
//sout 回车 生成打印语句
System.out.println("名字:" + getName() + ",颜色:" + getColor());
}
}
package com.lagou.task08;
public class Dog extends Animal {
private int tooth;
public Dog() {
super();//表示调用父类的无参构造方法
}
public Dog(String name, String color, int tooth) {
super(name, color); //表示调用父类的有参构造方法
//idea会自动保存,不用时刻ctrl s了
setTooth(tooth);
}
public int getTooth() {
return tooth;
}
public void setTooth(int tooth) {
if(tooth > 0) {
this.tooth = tooth;
}else{
System.out.println("数量不合理哦");
}
}
@Override
public void show() {
super.show();
System.out.println("牙齿数量是:" + getTooth());
}
}
package com.lagou.task08;
public class DogTest {
public static void main(String[] args) {
//使用无参方式构造Dog类型的对象并打印特征
Dog d1 = new Dog();
d1.show();
//使用有参方式构造Dog类型的对象并打印特征
Dog d2 = new Dog("旺财","白色",10);
d2.show(); //旺财 白色 10
}
}
对于继承来说
先执行父类的静态代码块,再执行子类的静态代码块
执行父类的构造块,执行父类的构造体
执行子类的构造块,执行子类的构造方法体
package com.lagou.task08;
public class SuperTest {
{
System.out.println("SuperTest类中的构造块!"); // (2) c
}
static {
System.out.println("SuperTest类中的静态代码块!"); // (1) a
}
public SuperTest() {
System.out.println("SuperTest类中的构造方法体!"); // (3) d
}
public static void main(String[] args) {
// 使用无参方式构造对象
SuperTest st = new SuperTest();
}
}
package com.lagou.task08;
// 导入java目录中lang目录中System类中的静态成员out 很少使用
import static java.lang.System.out;
public class SubSuperTest extends SuperTest {
{
System.out.println("==========SubSuperTest类中的构造块!"); // (2) e
}
static {
System.out.println("==========SubSuperTest类中的静态代码块!"); // (1) b
}
public SubSuperTest() {
//System.out.println("==========SubSuperTest类中的构造方法体!"); // (3) f
out.println("==========SubSuperTest类中的构造方法体!");
}
public static void main(String[] args) {
// 使用无参方式构造子类的对象
SubSuperTest sst = new SubSuperTest();
}
}
常用的访问控制符------------------------------
public修饰的成员可以在任意位置使用
private修饰的成员只能在本类内部使用
通常情况下,成员方法都使用public关键字修饰,成员变量都使用private关键字修饰
package语句的由来------------------------------
在idea设置setting里的Build里面的compiler里可以设置idea自动编译,勾选Bulid开头的,可以设置自动编译
存放的编译的字节码文件在idea工作区间的out文件夹里
定义类需要指定类的名称,但如果仅仅将类名作为类的唯一标识,则不可避免的出现命名冲突的问题
这会给组件复用以及团队间的合作造成很大的麻烦
在Java语言中,用包(package)的概念来解决命名冲突问题
包的定义------------------------------
在定义一个类时,除了定义类的名称一般还要指定一个包名,格式如下:
package 包名
package 包名1.包名2.包名3…包名n;
为了实现项目管理,解决命名冲突问题以及权限控制的效果
定义包的规范------------------------------
如果各个公司或开发组织的程序员都随心所欲的命名包名的话,仍然不能从根本上解决命名冲突的问题
因此,在指定包名的时候应该按照一定的规范
如:org.apache.commons.lang.StringUtil
其中StringUtils是类名,而org.apache.commons.lang是多层包名
其含义如下:org.apache表示公司或组织的信息(是这个公司(或组织)的域名的反写)
common表示项目的名称信息
lang表示模块的名称信息
包的导入------------------------------
使用import关键字导入类
使用import关键字导入静态成员,从Java5.0开始支持
final本意为"最终的,不可改变的",可以修饰类,成员方法以及成员变量
final关键字修饰类体现在该类不能被继承
主要用于防止滥用继承,如:java.lang.String类等
final关键字修饰成员变量方法体现在该方法不能被重写但可以被继承
主要用于防止不经意间造成的重写,如:java.text.Dateformat类中format方法等
package com.lagou.task08;
// ctrl+shift+/ 进行选中多行注释,再来一次取
// ctrl+/ 进行选中单行注释,再来一次取消
public class FinalClass {
public void show() {
System.out.println("FinalClass类中的show方法");
}
}
package com.lagou.task08;
public class SubFinalClass extends FinalClass {
@Override
public void show() {
super.show();
}
public static void main(String[] args) {
SubFinalClass sfc = new SubFinalClass();
sfc.show();
}
}
final关键字修饰成员变量体现在该变量必须初始化且不能改变
主要用于防止不经意间造成改变,如:java.lang.Thread类中MAX_PRIORITY等
package com.lagou.task08;
public class FinalMemberTest {
// private final int cnt = 1 ; //在声明变量的同时,给初始值,就叫显示初始化
private final int cnt;
public FinalMemberTest(){
cnt = 3; //构造方法体中进行初始化 //之所以可以在构造里初始,因为new新建时,构造会先执行
}
public static void main(String[] args) {
//声明FinalMemberTest类型的引用指向该类的对象
FinalMemberTest fmt = new FinalMemberTest();
//打印成员变量的数值
System.out.println("fmt.cnt:" + fmt.cnt);
}
}
常量的概念------------------------------
在以后开发中很少单独使用final关键字来修饰成员变量,通常使用public static final关键字共同修饰成员变量来表达常量的含义
常量的命名规范要求所有字母都要大写,不同的单词之间采用下划线连接
如:public static final double PI = 3.14;