今天有看到一些java关键字的使用,觉得很有意义,也分享一些.
static
静态的
static修饰变量-----静态变量|类变量,stitic是成员修饰符,不能修饰局部变量.(定义在方法中和语句块中,就是{}中的语句)
static修饰方法,-----静态方法|类方法
被static修饰的方法|变量使用的方式:
1.类名.静态变量名;类名.静态方法名
2.对象.静态变量名;对象.静态方法名
静态的内容是属于类的,成员的内容是属于对象的,跟随对象使用
静态的变量会在类第一次加载时加载,独有一份,是当前类中所有的对象共享的资源.
在静态的内容中,可以直接使用静态的内容,不可以直接使用非静态的内容
在非静态的内容中,可以直接使用静态的内容.
public class StaticText {
//静态变量 |类变量
static int a=13;
//成员变量
int b=5;
public static void main(String[] args) {
System.out.println(a); //13
System.out.println(StaticText.a);//13
StaticText sd=new StaticText();
System.out.println(sd.a); //13
System.out.println(sd.b); //5```
change();
System.out.println(a); //14
System.out.println(sd.b); //5
sd.change2();
System.out.println(a); //15
System.out.println(sd.b); //6
}
//静态方法
public static void change(){
a++;
StaticText sd=new StaticText();
sd.b++;
System.out.println(a+"-->"+sd.b); //a=14 b=6
}
//成员方法 中的成员变量和this,指代调用当前成员方法的对象
public void change2(){
a++;
this.b++;
System.out.println(a+"-->"+this.b); //a=15 b=6
}
}
block
块,以{}作为区分,就是一个作用域
用于方法中|语句块中–局部代码块|普通代码块 执行时机:跟随方法执行
用于类中方法外---------构造块 执行时机:new对象时执行
static{}------类中方法外----静态块 类第一次加载的时候执行
同步块–>多线程
要注意的要点有:构造块在创建对象的时候,其中一步调用构造器,构造块会在构造器之前执行,如果有多个构造块,那就从上往下依次执行.
它的运行顺序:静态块----main方法----构造块----构造器
public class BlockTest04 {
public static int a=0;
{
a=10;
System.out.println(".非静态代码块执行a="+a);
}
static {
a=6;
System.out.println(".静态代码块执行a="+a);
}
public BlockTest04(){
this(a);
System.out.println("."+a);
System.out.println(".无参构造方法执行a="+a);
}
public BlockTest04(int n){
System.out.println("."+n);
System.out.println("."+a);
}
public static void main(String[] args) {
System.out.println("main");
BlockTest04 tsc=new BlockTest04();
}
}
private
私有的,成员修饰符,不能修饰局部方法,
私有的内容只能在本类中使用,
对私有的内容提供了公共的访问的方式,数值器,访问器
方法:setter getter
对私有的内容,提供了访问方式也不一定是真的安全的
1.不能直接操作在属性上
2.使用逻辑进行判断
面向对象的三大体性之一
封装:对外隐藏内部的实现细节,提供公共的访问方式.
那么私有就是封装了吗,这个问题大部分人都会搞错.
私有肯定是封装,但封装不一定只有私有,方法 类 . 但是封装的一种体现…
那我们来说一下封装的好处
A;隐藏了实现细节,提供了公共的访问方式
B:提高代码的复用性
C:提高了代码的安全性
在讲一下javabean类
它是一个实体类----模版类----封装类
javaBean编码规则:
(1) javaBean必须声明为public class,这样才能够被外部所访问;
(2) 一个JavaBean中至少存在一个无参构造方法
(3)类中所有的属性都必须封装,即:使用private声明;
(4)为封装的私有属性提供公共的setter、getter方法
public class Person {
//姓名
String name;
//年龄
private int age;
//alt+/这是一个无参构造器
public Person() {//
}
//alt+shift+s-->o-->enter这是一个有参构造器
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
//age属性的设置器
public void setAge(int age){
if(age>0 && age<150){
this.age=age;
}else{
System.out.println("年龄格式错误");
return;
}
}
//age属性的访问器
public int getAge(){
return this.age;
}
//吃
public void eat(){
System.out.println("不吃不胖,多吃多胖!!! --横批:燃烧我的卡路里");
}
public void info(){
System.out.println(name+"-->"+age);
}
}
Extends
继承
我们为什么会要使用继承呢,这个问题在大家刚开始学习的时候大家都会被问到
它的作用就是为了达到类层面的一个复用
平时我们使用继承的模式就是
子类 extends 父类
特点
1.子类一旦继承父类,就自动拥有了父类的内容
2.一个类可以有多个子类,但是只能有一个父类,是一种单继承机制,多实现.
3.子类是父类的延续+扩展.
父类|基类|超类------被继承的类
子类|派生类:-------继承其它类的类
继承的优点就是提高代码的复用性
单继承的优点----使用简单
单继承的缺点:—不方便与后期维护
面向对象设计原则之一
开闭原则对修改关闭对扩展开放
public class Extends {
public static void main(String[] args) { //主方法
Teacher teacher=new Teacher();
teacher.name="殷唯";
teacher.age=18;
teacher.teach();
teacher.sleep();
}
}
//父类
class Person{
String name;
int age;
public void sleep(){
System.out.println("不好好休息就要狗带...");
}
}
//教师类继承Person类
class Teacher extends Person{
String subject;
public void teach(){
System.out.println(name+"正在上课...");
}
}
//学生类继承Person类
class Student extends Person{
String hometown;
public void study(){
System.out.println(name+"正在学习...");
}
}
this
this指代当前对象(new的对象),代表当前的地址
他有两个功能
一. 调用本类中其它的构造器
this()[参数列表]);
1.要求在构造器的首行使用this调用其它构造器
2.两个构造器不能相互调用,否则会形成死循环.
二. 区分同名变量的问题
1.区分成员变量与局部变量之间的同名问题,
2.构造器中区分成员变量和参数之间同名问题,默认就近原则,如果调用成员 this.属性名,因为this中存放的是当前调用构造器的对象的地址.
3.this在成员对象中起到指代当前调用成员方法的对象
4.如果不存在同名变量的问题,在使用成员变量时的时候默认前面省略了this…this是可以省略的
举个例子
public class This {
public static void main(String[] args) {
Person p=new Person("张三",18,181);
System.out.println(p);
p.info(333);
}
}
class Person{
String name;
int age;
int height;
public Person() {
System.out.println("我是空构造");
}
public Person(String personName) {
name=personName;
System.out.println("我是带参构造器 name");
}
public Person(String name,int age) {
this();
this.name=name;
this.age=age;
System.out.println("我是带参构造器 name age");
}
public Person(String name,int age,int height) {
// name=personName;
// age=personAge;
this(name,age); //调用奔雷其他构造器,至其他构造器的代码
this.height=height;
System.out.println("我是带参构造器 name age height");
System.out.println(this);
}
public void info(int age){
System.out.println(this.name+"-->"+this.age+"-->"+height);
System.out.println(this);
this.haha();
}
public void haha(){
System.out.println(name+"hhhhhhhhhhh");
}
}