package com.uncle.public_test;
import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
/**
* 描述一个类
* 修饰符 特征 class 类名{
* 属性 权限 特征 类型 名字
* 方法 权限 特征 返回值 名字 参数 异常 执行体
* 构造方法 权限 名字 参数 异常 执行体
* 程序块 执行体
* }
*
* 修饰符
* 权限修饰符
* public 公共的
* protected 受保护的
* 默认不写 默认的
* private 私有的
* 特征修饰符
* final 最终的 不可更改的
* static 静态的
* abstract 抽象的
* native 本地的
* *transient 瞬时的 短暂的------>序列化
* *synchronized 同步的 线程问题
* *volatile 不稳定的
* ======================================================
*
* 权限修饰符
* public 公共的 本类 同包 子类 当前项目中任意类的位置只要有对象都可以访问
* protected 保护的 本类 同包 子类(通过子类对象在子类范围内部访问)
* 默认不写 默认的 本类 同包
* private 私有的 本类
*
* 1.能修饰什么 2.范围如何
* 权限修饰符可以用来修饰 类本身 和类中的成员(除程序块)
* 权限修饰符用来修饰类的时候只有两个可以用(public 默认不写)
* 权限修饰符都可以用来修饰类中其他成员
*
* ===========================================================
* Java类和类之间的关系
* 继承 关联 依赖
*
* Java面向对象的四个特征
* 继承 封装 多态 (抽象)
*
* 封装 : 将一些数据或执行过程 进行一个包装
* 目的 : 保护这些数据 或 执行过程的安全
* 写登录流程--->main 一段代码
* 写登录方法--->login(name,pass)
* 方法本身就算是封装 封装了执行的过程 保护过程的安全 隐藏了执行细节 增强复用性
* 好多的方法和属性---->类 类也算是一个封装
* ArrayBox
* 私有属性elementData size
* --->add get remove size
* ensureCapacityInternal grow copyOf rangeCheck
* 对属性本身的封装:
* 属性私有(封装在类中)
* 提供操作属性相应的方式(公有的方法)
* 以后强烈建议大家属性不要公有的---->非常不安全
* 既然以后大家都这样操作属性 属性及其操作属性的方法都有其命名的规约
* age------> setAge getAge
* myAge--> setMyAge getMyAge
* ====================================================================
* 特征修饰符
* 1.可以修饰什么
* 2.修饰以后有什么特点
*
* final 最终的 不可更改的
* 修饰变量
* 如果在定义变量时没有赋初始值
* 给变量一次存值的机会(因为变量在栈内存空间内 没有默认值 如果不给机会 就没法用啦)
* 一旦变量被存储了一个值 若用final修饰后 则不让再次改变 ----> 相当于常量啦(值没法动)
* 注意变量类型是基本类型还是引用类型
* 如果修饰的变量是基本数据类型 则变量内的值不让更改---常量
* 如果修饰的变量是引用数据类型 则变量内的地址引用不让更改---对象唯一
* 修饰属性
* 全局变量 存储在堆内存的对象空间内一个空间
* 属性如果没有赋值 有默认值存在的
* 属性用final修饰后 必须给属性赋初值 否则编译报错
* 特点与修饰变量一致
* 注意变量类型是基本类型还是引用类型
* 如果修饰的变量是基本数据类型 则变量内的值不让更改---常量
* 如果修饰的变量是引用数据类型 则变量内的地址引用不让更改---对象唯一
* 修饰方法
* 方法是最终的方法 不可更改
* 子类继承父类的方法 将父类的方法重写(覆盖)
* final修饰的方法 要求不可以被子类重写(覆盖)
* 修饰类本身
* 类是最终的 不可以更改
* (太监类 无后) 此类不可以被其他子类继承
* 通常都是一些定义好的工具类
* Math Scanner Integer String
*/
public class PublicTest {
private String name;
private String sex;
public PublicTest() {
}
public PublicTest(String name, String sex) {
this.name = name;
this.sex = sex;
}
public final void eat() {
System.out.println("吃");
}
protected void sleep() {
System.out.println("睡觉");
}
private void kiss() {
System.out.println("kiss");
}
}
-
final图解
-
看好下面代码块第一行的包名,有助于更加深入了解权限修饰符的作用
package com.uncle.public_test.src.packa.innera;
import com.uncle.public_test.src.packa.TestA;
public class TestInnerA {
public static void main(String[] args){
TestA ta = new TestA();
ta.testPublic();
//ta.testProtected();
//ta.testDefault();
//ta.testPrivate();私有的
}
}
package com.uncle.public_test.src.packa;
public class TestA {
public static void main(String[] args){
TestA ta = new TestA();
ta.testPublic();
ta.testProtected();
ta.testDefault();
ta.testPrivate();
}
public void testPublic(){
System.out.println("我是TestA类中的public修饰符方法");
}
protected void testProtected(){
System.out.println("我是TestA类中的protected修饰符方法");
}
void testDefault(){
System.out.println("我是TestA类中的默认不写修饰符方法");
}
private void testPrivate(){
System.out.println("我是TestA类中的private修饰符方法");
}
}
package com.uncle.public_test.src.packa;
public class TestAA {
public static void main(String[] args){
TestA ta = new TestA();
ta.testPublic();
ta.testProtected();
ta.testDefault();
//ta.testPrivate();私有的
}
}
package com.uncle.public_test.src.packb;
import com.uncle.public_test.src.packa.TestA;
public class TestB extends TestA{
public void testB(){
this.testPublic();
this.testProtected();
}
public static void main(String[] args){
//TestB tb = new TestB();
//tb.testPublic();
//tb.testProtected();
TestA ta = new TestA();
ta.testPublic();
}
}
package com.uncle.public_test.src.person;
public class Person {
//属性
public String name;
private int age;
public String sex;
//方法
//设计一个方法 用来取得age属性的值
// 提供条件?不需要 返回值? 获取的age的值
public int getAge(){
//if
return this.age;
}
//设计一个方法 用来给age属性赋值
// 提供条件? age的值 返回值?void
public void setAge(int age){
if(age<0){
System.out.println("对不起 您还没出生呢 请给正确的年龄范围");
this.age = -1000;
//抛出异常
}else if(age>130){
System.out.println("对不起 您已经升仙啦 请给正确的年龄范围");
this.age = -1000;
//抛出异常
}else {
this.age = age;
}
}
}
package com.uncle.public_test.src.person;
public class Test {
public static void main(String[] args){
//创建类的过程是在Java中描述的过程
//1.创建对象
Person p = new Person();
//2.对象的引用 . 调用属性
p.name = "郑中拓";
p.setAge(18);
p.sex = "男";
System.out.println("今年"+p.getAge());
}
}
package com.uncle.public_test.src.test;
import com.uncle.public_test.src.packb.TestB;
public class TestMain {
public static void main(String[] args){
TestB tb = new TestB();
tb.testPublic();
//tb.testProtected();
}
}
package com.uncle.public_test.src.test_final;
public class Animal {
public void eat(){
System.out.println("动物的吃饭方法");
}
}
package com.uncle.public_test.src.test_final;
public class Person extends Animal{//extends-->扩展
public void eat(){
System.out.println("子类重写(覆盖)父类的吃饭方法");
}
}
package com.uncle.public_test.src.test_final;
public class TestFinal {
private final String name = "";
public void testNum(final int[] a){
a[0] = 10;
}
public static void main(String[] args){
Person p = new Person();
p.eat();
// TestFinal tf = new TestFinal();
//final int a;//声明变量 内存开辟栈内存空间
//a = 1;//赋值 常量区取得一个常量 复制一份存入a空间内
//a = 10;//改变变量的值
/*
final int[] x;
x = new int[]{1,2,3};
x = new int[5];
x[0] = 10;
x[0] = 100;
*/
}
}