一、万物皆对象
对象:在现实生活中存在具体的一个事物。;
类:实际就是对某种类型事物的共性属性与行为的抽取。
人类认识世界: 对象---->类。
在java中: 类 ----->对象。
//举个例子
public class Car {
String color;// 成员变量
int num; // 成员变量
// 成员函数
void run() {
System.out.println(color + "的车,轮胎数:" + num + "个,跑起来了");
}
}
二、封装的实现
设置类的属性为private(关键字),不能使用对象名.属性名的方式直接访问对象的属性。
public class EmployeeDemo {
public static void main(String[] args) {
// 创建对象
Employee jack = new Employee();
// 调用公有方法,给成员变量赋值。
jack.setId("007");
jack.setName("jack");
jack.setGender("男xx");
// 调用成员方法
jack.work();
}
}
class Employee {
private String name;
private String id;
private String gender;
// 提供公有的get set方法
public String getName() {
return name;
}
public void setName(String n) {
name = n;
}
public String getId() {
return id;
}
public void setId(String i) {
id = i;
}
public String getGender() {
return gender;
}
public void setGender(String gen) {
if ("男".equals(gen) || "女".equals(gen)) {
gender = gen;
} else {
System.out.println("请输入\"男\"或者\"女\"");
}
}
public void work() {
System.out.println(id + ":" + name + ":" + gender + " 努力工作中!!!");
}
}
2.1 封装的好处
1:隐藏了类的具体实现
2:操作简单
3:提高对象数据的安全性
三、构造方法
作用:对对象进行初始化
siclass Employee {
private String name;
private int id;
private String gender;
//全参构造方法给对象赋初值
Employee (String n, int i, String g){
name = n;
id = i;
gender = g;
}
//无参构造方法
Empioyee(){
}
四、static 静态关键字
1、解决问题,优化内存,使用static将数据放入共享区。
2:使用static 是为了实现对象之间重复属性的数据共享
3:static使用
(1)、主要用于修饰类的成员
①:非静态成员变量:需要创建对象来访问
②:静态成员变量:使用类名直接调用,也可以通过对象访问
(2)、成员方法
可以使用类名直接调用
①:静态函数:
1:静态函数中不能访问非静态成员变量,只能访问静态变量。
2:静态方法不可以定义this,super关键字.
3:因为静态优先于对象存在.静态方法中更不可以出现this
②:非静态函数:非静态函数中可以访问静态成员变量
class Person {
String name;
int age;
String gender;
//static 修饰成员变量
static String country = "CN";
Person() {
}
Person(String name, int age, String gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
//非静态方法
void speak() {
//非静态方法可以访问静态成员
System.out.println("国籍:" + country );
System.out.println("国籍:" + country + " 姓名:" + name + " 性别:" + gender
+ " 年龄:" + age + " 哈哈!!!");
}
//静态方法
static void run(){
//静态方法只能访问静态成员变量。
System.out.println("国籍:"+country);
//静态方法访问非静态成员变量,编译报错。
System.out.println(" 姓名:" + name);
//静态方法中不可以出现this,编译报错
this.speak();
}
}
4:细节:
(1):静态函数中不能使用非静态变量
(2):非静态函数可以访问静态变量
public static void main(String[] args) {
// 访问静态成员
// 直接通过类名来调用
String country = Person.country;
System.out.println(country);
// 通过对象.成员的形式访问
Person p1 = new Person("jack", 20, "男");
p1.country = "US";
p1.speak();
}
}
5:为什么静态函数中不能访问非静态成员
(1):static修饰的成员在共享区中。优先于对象存在
(2):使用静态代码块验证
①:静态代码块
static{
静态代码块执行语句;
}
② :静态代码块特点:随着类的加载而加载。只执行一次,优先于主函数。用于给类进行初始化。
class Person {
String name;
int age;
String gender;
// static 修饰成员变量
static String country = "CN";
static {
System.out.println("这是静态代码块");
}
{
System.out.println("这是构造代码块");
}
Person() {
System.out.println("无参数构造");
}
Person(String name, int age, String gender) {
this.name = name;
this.age = age;
this.gender = gender;
System.out.println(" 有参数构造");
}
6:static特点
1 随着类的加载而加载,静态会随着类的加载而加载,随着类的消失而消失。说明它的生命周期很长。
2 优先于对象存在。-->静态是先存在,对象是后存在。
3 被所有实例(对象)所共享。
4 可以直接被类名调用
7:静态变量(类变量)和实例变量的区别:
1存放位置
1:类变量随着类的加载而加载存在于方法区中.
2:实例变量随着对象的建立而存在于堆内存中.
2生命周期
1:类变量生命周期最长,随着类的消失而消失.
2:实例变量生命周期随着对象的消失而消失.
8:静态优缺点
1: 优点:对对象的共享数据进行单独空间的存储,节省空间 例如Person 都有
国籍。该数据可以共享可以被类名调
2:缺点:生命周期过长
访问出现局限性。(静态只能访问静态)
9: 什么时候定义静态变量
1:静态变量(类变量)当对象中出现共享数据
例如:学生的学校名称。学校名称可以共享
对象的数据要定义为非静态的存放在对内存中(学生的姓名,学生的年龄)
10:什么时候定义静态函数
如果功能内部没有访问到非静态数据(对象的特有数据。那么该功能就可以定义为静态)
11:静态的应用
// 1:定义一个遍历数组的函数
public static void print(int[] arr) {
for (int x = 0; x < arr.length; x++) {
if (x != (arr.length - 1)) {
System.out.print(arr[x] + ",");
} else {
System.out.print(arr[x]);
}
}
}
// 2:定义一个获取数组最大值的功能函数
public static int getMax(int[] arr) {
int max = 0;
for (int x = 0; x < arr.length; x++) {
if (arr[max] < arr[x]) {
max = x;
}
}
return arr[max];
}
// 3:冒泡排序
public static void test(int[] arr) {
for (int x = 0; x < arr.length - 1; x++) {
if (arr[x] > arr[x + 1]) {
int temp = arr[x + 1];
arr[x + 1] = arr[x];
arr[x] = temp;
}
}
}
网友评论