目录
一、包
1.包的作用:
(1)区分同名的类。
包最重要的作用:区分同名的类,例如:
JDK自带一个Book类;将来我们做书城项目也会创建Book类
如果没有包名,两个Book类就无法区分了。
(2)将不同的类放在不同包下。
2.简单类名和全类名
简单类名:不带包名的类名
全类名:包名.类名
2.包的定义
包其实就是目录。
特别是项目比较大,java 文件特别多的情况下,我们应该分目录管理,在java 中称为分包管理,包名称通常采用小写。
//定义的全格式:公司域名倒叙.项目名.模块名;
//baidu公司开发oa项目,system是oa项目中其中一个模块!
package com.bjpowernode.oa.system;
com.baidu.oa.system;;
public class User{
public static void main(String[] args){
System.out.println("User's main method execute!");
}
}
软件包机制:
①为了解决类的命名冲突问题,在类名前加命名空间(包机制)。
②在java中使用package语句定义包.(单包,复包)。
③package语句只能出现在.java源文件的第一行。
3.包的导入
package com;
//import语句可以引入其他类.
//import语句只能出现在package语句之下,class定义的语句之上。
import com.baidu.oa.system;
//java.lang;软件包下所有类不需要手动导入。系统自动导入.
import java.util.Date;
JDK中主要的包介绍
(1)java.lang----包含一些Java语言的核心类,如String、Math、Integer、 System和Thread,提供常用功能。
(2)java.net----包含执行与网络相关的操作的类和接口。
(3)java.util----包含一些实用工具类,如定义系统特性、接口的集合框架类、使用与日期日历相关的函数。
(4)java.text----包含了一些java格式化相关的类
(5)java.sql----包含了java进行JDBC数据库编程的相关类/接口
4.类和对象的定义
类(设计图) :是对象共同特征的描述;
对象:是真实存在的具体实例。(万物皆对象)
结论:在Java中,必须先设计类,才能创建对象并使用。
4.1类和对象的关系
程序中的『类』,对应到生活中就是对同一类事物的一个统一的『分类名称』
从抽象和具体的角度来说:
类:抽象描述
对象:具体实体,所以对象也被称作:『类的实例』
5.如何设计类
5.1类的组成部分:
(1)属性(对应程序中的数据)
通过程序中的各种数据类型,来描述一个类的特征。
例如:汽车的颜色、汽车的排量、汽车的价格……
(2)行为(对应程序中的操作)
通过程序中的方法(也就是面向过程视角中的函数),来执行这个类的对象能够做的动作。
例如:汽车的行驶、汽车的鸣笛、汽车的启动、汽车的停泊……
5.2类的声明
5.3类中的属性
①声明属性的语法格式
修饰符 数据类型 属性名;
或
修饰符 数据类型 属性名 = 初始化值
②初始化值
声明一个属性时,如果没有明确的对这个属性进行初始化值的设置,那么系统会给这个属性设置默认值。所以如果有确定的需要可以设置属性的默认值,如果没有特殊需要,不设置也行。
③权限修饰符
5.3.1修饰符
修饰符指的是函数的访问权限。
所谓访问权限,指的就是本类中的成员变量、成员方法对其他类的可见性。
Java中有四种访问权限,分别是「public、protected、default(默认)、private」,如果省略了访问修饰符,那默认访问权限为「包访问权限」。 这四种权限从「最大权限」到「最小权限」分别是:
public > protected > default> private。
default: 没有任何修饰符的权限就是「包访问权限」,意味着当前包的所有类都可以访问这个成员;
public:被public修饰的成员对任意一个类都是可用的,任何一个类都可以访问到,通过操作该类的对象随意访问public成员
protected:在相同的class内部,同一个包内和其他包的子类中能被访问。要理解protected权限,就需要了解「继承」,因为这个权限处理的就是继承相关的概念,继承而来的子类可以访问「public、protected」,
private: 除了包含这个成员的类之外,所有类都无法访问这个成员,相当于自我封闭,防止其他类改变或删除这个方法。
PS:对class的权限修饰符只有public和缺省(默认)两种
public:表示这个类可以在工程中任意位置访问(开发中实际使用的方式)
default:表示这个类只能在同一个包内访问(实际开发不会使用这种方式)
public class Car {
// 属性 (成员变量)
String name;
double price;
// 行为(方法)
public void start(){
}
public void run(){
}
}
5.3.2 如何得到类的对象:
类名 对象名 = new 类名();
Car c = new Car();
5.3.3如何使用对象:
5.4类和对象的使用
声明类
public class Car {
// 成员变量(属性)
String name;
double price;
// 方法(行为)
public void start()
{
System.out.println(name+“启动了!”);
}
public void run(){
System.out.println(“价格是:" + price +"的" + name+"跑的快!");
}
}
测试类
public class Test {
public static void main(String[] args) {
Car c1 = new Car();
c1.name = "奔驰";
c1.price = 39.78;
System.out.println(c1.name);
System.out.println(c1.price);
c1.start();
c1.run();
Car c2 = new Car();
c2.name = "宝马";
c2.price = 38.98;
System.out.println(c2.name);
System.out.println(c2.price);
c2.start();
c2.run();
}
}
5.5总结:
定义类的补充注意事项:
类名首字母建议大写,且有意义,满足“驼峰模式”。
一个Java文件中可以定义多个class类,但只能一个类是public修饰,而且public修饰的类名必须成为代码文件名。实际开发中建议还是一个文件定义一个class类。
成员变量的完整定义格式是:修饰符 数据类型 变量名称 = 初始化值; 一般无需指定初始化值,存在默认值。
1. 定义类有哪些建议,有什么需要注意的?
类名首字母建议大写、英文、有意义,满足驼峰模式,不能用关键字,满足标志符规定
一个代码文件中可以定义多个类,但是只能一个类是public修饰的,public修饰的类名必须是Java代码的文件名称。
2. 成员变量的格式是什么样的,有什么特点?
成员变量的完整格式是:修饰符 数据类型 变量名称 = 初始化值;
一般无需为成员变量指定初始化值,存在默认值。
二、案例:
package Classstudent.Student;
public class Student1 {
String name;
int age;
String hobby;
public void Classroom(){
System.out.println(age+"岁的"+name+"同学到教室了");
}
public void Lateroom(){
System.out.println(age+"岁的"+name+"同学放学了");
}
}
package Classstudent.Student;
public class Student1test {
public static void main(String[] args) {
Student1 sd=new Student1();
sd.name="小明";
sd.age=22;
sd.hobby="乒乓球、篮球";
System.out.println("学生姓名:"+sd.name);
System.out.println("年龄是:"+sd.age);
System.out.println("爱好是:"+sd.hobby);
sd.Classroom();
sd.Lateroom();
System.out.println("-----------");
Student1 sd1=sd;
sd.name="王五";
sd.age=23;
System.out.println("学生姓名:"+sd.name);
System.out.println("年龄是:"+sd.age);
System.out.println("爱好是:"+sd.hobby);
sd.Classroom();
sd.Lateroom();
}
}
三、对象在内存中的运行机制:
1.多个对象的内存图
总结:
1. 对象到底是放在哪个位置的?
2. Car c = new Car(); c变量名中存储的是什么?
3. 成员变量(name、price)的数据放在哪里,存在于哪个位置?
2.两个变量指向同一个对象内存图
3.垃圾回收
注意:当堆内存中的对象,没有被任何变量引用(指向)时,就会被判定为内存中的“垃圾”。
补充知识:成员变量、局部变量区别
四、案例