面向对象1
一、对象和类
1.对象是具体的事物;类是对对象的抽象;
2.类可以看成一对象的模板,对象可以看成该类的一个具体实例。
3.类是用于描述同一类型的对象的一个抽象概念,类中定义了这一类对象所应具有的共同的属性、方法。
public class Stxtu{
int age;
int height;
String name;
computer comp;
void study() {
System.out.println("我叫"+name+"\n"+"我今年"+age);
}
void play() {
System.out.println("我的电脑是:"+comp.brand);
}
public static void main(String[] args) {
Stxtu a=new Stxtu();
a.age=18;
a.height=180;
a.name="zh";
computer b=new computer();
b.brand="麦本本";
a.comp=b;
a.play();
a.study();
}
}
class computer{
String brand;
}
二、构造方法(对象初始化)
1.构造方法及重载
public class User{
int id;
int age;
String name;
String pwd;
public User(){
}
User(int id,String name) {
super();
this.id=id;
this.name=name;
}
User(int id,String name,int age){
this(id,name);
this.age=age;
}
User(int id,String name,String pwd){
this(id,name);
this.pwd=pwd;
}
public static void main(String[] args) {
User a=new User();
User a1=new User(1,"zh");
User a2=new User(3,"zh","dhshc");
User a3=new User(4,"ff",334);
System.out.println(a1.name);
System.out.printf("%s%s",a3.name,a3.age);
}
}
2.关键字
静态方法中不能对非静态字段进行静态引用
非静态方法中可以调用静态方法跟变量
3.static 初始化块(对象初始化)
public class User3 {
int id; //id
String name; //账户名
String pwd; //密码
static String company; //公司名称
static {
System.out.println("执行类的初始化工作");
company = "北京尚学堂";
printCompany();
}
public static void printCompany(){
System.out.println(company);
}
public static void main(String[] args) {
User3 u3 = new User3();
}
}
4.import导入
1. Java会默认导入java.lang包下所有的类,因此这些类我们可以直接使用。
2. 如果导入两个同名的类,只能用包名+类名来显示调用相关类:
java.util.Date date = new java.util.Date();
【示例4-15】导入同名类的处理
import java.sql.Date;
import java.util.*;//导入该包下所有的类。会降低编译速度,但不会降低运行速度。
public class Test{
public static void main(String[] args) {
//这里指的是java.sql.Date
Date now;
//java.util.Date因为和java.sql.Date类同名,需要完整路径
java.util.Date now2 = new java.util.Date();
System.out.println(now2);
//java.util包的非同名类不需要完整路径
Scanner input = new Scanner(System.in);
}
}
5.静态导入
静态导入用于导入指定类的静态属性,这样我们可以直接使用静态属性。
//以下两种静态导入的方式二选一即可
import static java.lang.Math.*;//导入Math类的所有静态属性
import static java.lang.Math.PI;//导入Math类的PI属性
public class Test2{
public static void main(String [] args){
System.out.println(PI);
System.out.println(random());
}
}
6.package
通过package实现对类的管理,package的使用有两个要点:
1. 通常是类的第一句非注释性语句。
2. 包名:域名倒着写即可,再加上模块名,便于内部管理类。
表4-3 JDK中的主要包 | |
---|---|
Java****中的常用包 | 说明 |
java.lang | 包含一些Java语言的核心类,如String、Math、Integer、System和Thread,提供常用功能。 |
java.awt | 包含了构成抽象窗口工具集(abstract window toolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)。 |
java.net | 包含执行与网络相关的操作的类。 |
java.io | 包含能提供多种输入/输出功能的类。 |
java.util | 包含一些实用工具类,如定义系统特性、使用与日期日历相关的函数。 |
7.java参数传值机制
基本数据类型参数的传值
传递的是值的副本。 副本改变不会影响原件。
· 引用类型参数的传值
传递的是值的副本。但是引用类型指的是“对象的地址”。因此,副本和原参数都指向了同一个“地址”,改变“副本指向地址对象的值,也意味着原参数指向对象的值也发生了改变”。
/**
* 测试参数传值机制
* @author 高淇
*
*/
public class User4 {
int id; //id
String name; //账户名
String pwd; //密码
public User4(int id, String name) {
this.id = id;
this.name = name;
}
public void testParameterTransfer01(User4 u){
u.name="高小八";
}
public void testParameterTransfer02(User4 u){
u = new User4(200,"高三");
}
public static void main(String[] args) {
User4 u1 = new User4(100, "高小七");
u1.testParameterTransfer01(u1);
System.out.println(u1.name);
u1.testParameterTransfer02(u1);
System.out.println(u1.name);
}
}