文章目录
Java基础知识全解第三弹
记录回顾自己学过的java常见的基础知识,希望可以给初学者一些帮助,如果合适的话希望各位给一个免费的点赞和关注,在此谢谢各位了。
一、面向对象编程
1.1 面向对象编程思想
拿到一个问题域时,找名词,将名词分别成两类:实体、属性。
一个实体一个类
一个属性是类中的成员变量
接下来找动词,一个动词是类中的方法
类与类之间的关联关系体现在一个类的对象是另一个类的方法参数
1.2 类和对象关系
1.2.1 类
在java中我们使用class关键字来定义类,类实际上就是一类具有共通属性和行为的对象的集合,起到一个模板作用,比如生产汽车需要设计图纸,类就好比设计图纸,类中可以有属性和方法,属性体现一类对象共通的属性,而方法则是体现这类对象具有的本能和能力。
1.2.2 对象
对象是类的一个具体实例,比如上面提及到的汽车设计图纸,类是设计图纸的话,那么对象就是根据图纸生产出来的具体汽车,每个对象都具备类中的属性和功能。
2. 对象创建和使用
需求:创建一个学生类,并创建两个学生对象,为属性赋值,同时调用方法
语法 :
修饰符 class 类名 {
//属性
//方法
}
注意:类名的命名规范
1.类名首字母大写
2.若由多个单词构成,则每个单词首字母大写
代码:
public class Student {
String name;
int stuNo;
public void showInfo() {
System.out.println("我叫:"+name+",学号:"+stuNo);
}
}
public static void main(String[] args) {
//1.如何通过类去创建一个对象
//类名 对象名 = new 类名();
Student zs = new Student();
Student ls = new Student();
//2.为对象的属性赋值
zs.name = "张三";
zs.stuNo = 1001;
//3.获取对象的属性值
System.out.println(zs.name);
//4.调用方法,通过对象名.方法名(实参)
zs.showInfo();
ls.showInfo();
}
3.构造方法
这是一种创建对象的方法,他和类同名,只能被new关键字调用,然后来创建对象。构造方法没有返回值,并且不能写void
如果没有构造方法,系统会默认提供一个无参的构造方法
如果写了构造方法,系统就不再提供构造方法。
我们在构造方法中,通常写赋值语句,将调用者传入的参数赋值给当前对象的成员变量。
一般来讲,当我们写了一个有参的构造方法后,还需写一个无参的构造方法。
4.方法的调用
我们可以使用对象.成员变量来进行方法
我们可以使用对象.方法来调用方法
5.java的内存结构
java程序在运行过程中,会把内存分为五块:
①栈:存放局部变量、方法运行也是在栈中运行的
②堆:存放对象
③方法区:分为常量池和静态代码区,常量池用来存放常量和静态变量,静态代码区用来加载代码
④本地方法栈:与操作系统相关
⑤程序计数器:与cpu相关
练习题:
定义一个Point类,表示三维空间中的一个点
属性:double x,y,z表示它的坐标
要求:提供构造方法创建一个点对象并赋属性值
分别提供一个修改下,x,y,z的方法
另一个提供计算某点到原点距离的方法
编写测试类进行以上功能的验证。
//Point类
public class Point {
double x;
double y;
double z;
Point(){
}
Point(double x,double y,double z){
this.x=x;
this.y=y;
this.z=z;
}
public void setX(double x){
this.x=x;
}
public void setY(double y){
this.y=y;
}
public void setZ(double z){
this.z=z;
}
public double mathlen(double x,double y,double z){
double x1=x*x;
double y1=y*y;
double z1=z*z;
return Math.sqrt(x1+y1+z1);
}//可以优化成如下传入参数为Point类型,通过传入Point的属性与本身点的属性进行计算。可以不止算出原点到该点的距离,也可以算出该点到任意一点的距离。
//测试类
public class TestPoint {
public static void main(String[] args) {
Point p = new Point(1,1,1);
System.out.println("x="+p.x+" y="+p.y+" z="+p.z);
System.out.println("修改后为:");
p.setX(2.0);
p.setY(2.0);
p.setZ(2.0);
System.out.println("x="+p.x+" y="+p.y+" z="+p.z);
System.out.println("该点到原点的距离是:");
System.out.println(p.mathlen(p.x,p.y,p.z));
}//测试类
6. 成员变量和局部变量
-
位置不同
①成员变量:在类中
②局部变量:在方法中,形参,代码块
-
初始值不同
①成员变量:有初始值,比如引用类型null,基本类型比如int 0
②局部变量:必须初始化,才能使用【必须显示赋值,才能使用】
-
作用范围不同
①成员变量:整个类中
②局部变量:它所在的
{}
范围 -
在内存中的区域不同
①成员变量:在堆内存中
②局部变量:在栈中
-
生命周期不同
①成员变量:随着对象的存在而存在
②局部变量:在栈中,用完之后就出栈
总结:定义在方法以外的变量
7.方法的重载
在一个类中,多个方法,方法名相同、参数不同,根据调用者传入参数来决定调用哪个方法,参数不同体现在要么个数不同,要么参数类型不同。
注意:构造方法也可以重载
二、this、static关键字
1.this
当前对象的引用,他存放当前对象的内存地址,我们可以使用this.变量访问当前类的成员变量,我们还可以使用this.方法调用当前对象所在类的方法。
2.static(静态的)
它可以修饰成员变量或者成员方法,为static修饰的成员变量称为静态变量,静态变量存放在常量池,它在内存中有一份,被当前类的所对象共享,它可以来计数,静态的成员变量可以使用类名直接调用。
被static修饰的方法是静态方法,静态方法可以使用类名直接调用。
静态方法中不能包含非静态的成员,静态方法中也不能包含this。
三、包
1.包的由来
java中,为了解决类名冲突的问题,引入了包的机制,同一个包中不能出现相同的类,如果需要方法其他包中的类,需要添加全包名(带有包名的类名),包使用package关键字来定义,包有层次结构,以小数点分割。
2.import关键字
用来导入其他包中的类,导入之后就无需写全类名,*表示通配符,导入包下的所有类。
同一个包中的类,使用时无需导包,不同的包下的类才需要导包。
java.lang包是唯一一个无需导包就可以直接使用的包。
一般情况,我们通常将使用自己所在公司域名倒写做为自己的包名。
四、封装
1 .什么是封装
封装是我们面向对象三大特征之一。
面向对象的封装特性一般指的就是将对象的属性私有化,如果需要访问属性的话,可以对外提供公开的方法供外界访问。
2.JavaBean----实体类
在实体类中,要求所有成员变量私有化
对外提供公共的get/set方法用来为成员变量取值或赋值
至少在提供一个无参构造方法。
JavaBean体现了面向对象的封装性。
五、继承
1.为什么要用继承
在现实世界中,继承是经常见到的,java语言本身也是从现实生活演变而来的
麻雀、大雁、鸭子都是鸟类,它们都具有共通的属性和行为,比如说都有羽毛,都会飞等。
所有的鸟类都可以飞行,但是这样会造成代码的冗余度比较高,所以在java中我们引入继承这个概念,让麻雀类和鸭类都继承鸟类,这样的话可以共享父类的属性和功能,继承通过extends关键字实现,但是需要注意的java只支持单继承,不像c++中可以实现多继承。但是在现实生活中单继承也是更符合伦理道德的,虽然java不能直接多继承,但是可以通过多次间接继承或者实现多个接口来弥补单继承的弊端。
2.什么是继承
“xxx是一种xxx”只要这句话说的通,这两者就有继承关系,子类继承父类,子类就自动拥有父类的所有属性和方法,除此外,子类还可以拥有自己新增加的属性和方法。
在Java中使用extends关键字来实现类的继承关系。
注意:Java中的继承是单继承,Java中的继承具有传递性。
3.方法重写
3.1重写的定义
继承关系的两个类,它们各种定义一个方法,方法声明部分相同,实现不同,根据调用者的类型决定调用的是那个方法。
3.2重写的条件
前提:必须存在继承关系
-
子类的方法名必须和父类方法名一致
-
子类的方法参数列表必须和父类的一致(参数个数、参数类型、参数位置)
-
子类的方法返回值类型必须和父类的一致
-
子类的方法的访问范围不能小于父类方法的访问范围
3.3@Override
该注解可以来修饰一个重写的方法,帮我们检查该方法是否是在重写。
4.super
1.super作用
super可以调用当前对象所在类父类中方法。
它是一个引用,它存放当前父类对象里面的那个父类的内存地址,我们可以通过super,成员变量访问当前对象的父类对象中的成员变量。
我们可以通过super.方法调用当前对象所在父类中的方法。
5. 访问修饰符
1.访问控制符
同一个类 | 同一个包 | 子类 | 在任何地方 | |
---|---|---|---|---|
private | Y | |||
默认 | Y | Y | ||
protected | Y | Y | Y | |
public | Y | Y | Y | Y |
注意:子类拥有父类所有的属性和方法,但是不能使用父类中的private修饰的属性和方法
注意:对于class的修饰只有默认和public两种,如果是默认,则该类只能在当前包使用,如果是public,则在任何地方都可以使用。
总结
java基础第三弹,主要介绍了java中面向对象相关的知识点,我在整理资料和编写的过程中,完成了对这些java相关知识的梳理和深刻理解。希望我对知识梳理的成果对各位读者有所帮助。再次感谢各位的阅读,一个菜鸟的起飞之路。
标签:Java,对象,double,基础,第三,java,父类,方法,属性 From: https://blog.csdn.net/qq_65124761/article/details/140507332