60.【Java 进阶】
进阶篇
- (一)、静态变量
- 1.成员变量是private:
- 2.成员变量是public:
- 3成员变量是static
- (二)、类的三种格式:
- 工具类:
- 代码展示:
- 工具类 测试类 JavaBean类。三则连用
- (三)、sattic的注意事项:(多用在测试类和工具类)
- 1.静态方法中没有this指针:
- 2.静态方法只能访问静态:
- 3.非静态方法可以调用所有
- (四)、继承:
- 1.什么时候用到继承:
- 2.JAVA继承的特点
- 3.继承权限:
- (五)、派生类对成员的访问
- 1.成员变量的访问规则
- 2.成员方法的访问规则:
- 3.方法的重写
(一)、静态变量
假如说:在一个班级里面有n名学生,每一名学生的姓名。年龄、学号都不一样,我们可以通过创建Student类来对每一名学生进行赋值的操作。然而呢,老师的名字只有一个,那名字肯定也是相同的啊。如果我们在定义老师的名字的时候利用正常的成员变量。那么每次操作一个学生,我们都要对这个老师进行赋值的操作,那么程序会显得有一点笨重。这时候我们就可以使用STATIC静态变量对其操作运行。
1.成员变量是private:
Student类:
public class Student {private String name;private int age;private int id;
main类:
import java.sql.SQLOutput;
import java.util.*;
import java.awt.*;
import java.lang.Math;
public class hello {public static void main(String[] avgs) {Student stu1=new Student();stu1.setAge(18);stu1.setName("吉士先生");stu1.setId(21032114);stu1.study();stu1.show();Student stu2=new Student();stu2.setAge(20);stu2.setName("傻瓜");stu2.setId(21032118);stu2.study();stu2.show();}
}
类对象能访问公有权限的成员变量和公有的成员方法。哪个对象调用这个方法得话,那么就输出和设置这个对象的数据
2.成员变量是public:
Student类:
public class Student {private String name;private int age;private int id;public String teacher; //公有变量
main类:
import java.sql.SQLOutput;
import java.util.*;
import java.awt.*;
import java.lang.Math;
public class hello {public static void main(String[] avgs) {Student stu1=new Student();stu1.setAge(18);stu1.setName("吉士先生");stu1.setId(21032114);stu1.teacher="大聪明"; //通过调用成员变量进行操作stu1.study();stu1.show();Student stu2=new Student();stu2.setAge(20);stu2.setName("傻瓜");stu2.setId(21032118);stu2.study();stu2.show();}
}
因为我们只对学生对象1进行赋值操作,所以我们此时此刻的对象2的老师的那个位置是空的。
3成员变量是static
student类:
public class Student {private String name;private int age;private int id;static String teacher;
main方法:
import java.sql.SQLOutput;
import java.util.*;
import java.awt.*;
import java.lang.Math;
public class hello {public static void main(String[] avgs) {Student stu1=new Student();Student.teacher="大聪明"; // 通过类名.静态成员变量名对其进行赋值.类对象也可以stu1.setAge(18);stu1.setName("吉士先生");stu1.setId(21032114);stu1.study();stu1.show();Student stu2=new Student();stu2.setAge(20);stu2.setName("傻瓜");stu2.setId(21032118);stu2.study();stu2.show();}
}
因为静态变量是归类所有的,并不是某一个对象所有的
静态变量:优先于类对象的创建在堆里面。
(二)、类的三种格式:
工具类:
1.JavaBean 类:
2.测试类:
3.工具类:
工具类:实质上就是方法(构造函数用私有的)
代码展示:
工具类:
public class Util {private Util(){};//整数数组转成字符串:public static String ArrayChangeString(int []a){StringBuilder sb=new StringBuilder();sb.append("[");for(int i=0;i<a.length;i++){if(i==a.length-1){sb.append(a[i]);}else{sb.append(a[i]).append(","+" ");}}sb.append("]");return sb.toString();}//求一个数组的平均数:.public static double Average(int []a){int sum=0;for(int i=0;i<a.length;i++){sum+=a[i];}return sum/a.length;}
}
测试类:
import java.sql.SQLOutput;
import java.util.*;
import java.awt.*;
import java.lang.Math;
public class hello {public static void main(String[] avgs) {int []a=new int[]{1,2,3,4,5,8};System.out.println(Util.ArrayChangeString(a));int []b=new int[]{1,2,3,5,8,7,6,9};System.out.println(Util.Average(b));}
}
工具类 测试类 JavaBean类。三则连用
题目描述:
有一个对象集合,对象的属性是name score id.请你在工具类中实现类对象中最大的值,然后返回它的类对象。并且后输出所有的值信息。
工具类:
public static Student FindMaxScore(ArrayList<Student> stu){double max;Student s=stu.get(0);max=s.getScore();for(int i=1;i<stu.size();i++){Student s1=stu.get(i);double num=s1.getScore();if(num>max){s=s1; //对象拷贝}}return s;}
JavaBean类:
public class Student {private String name;private double score;private String ID;public Student() {}public Student(String name, double score, String ID) {this.name = name;this.score = score;this.ID = ID;}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getScore() {return score;}public void setScore(double score) {this.score = score;}public String getID() {return ID;}public void setID(String ID) {this.ID = ID;}
}
测试类:
import java.sql.SQLOutput;
import java.util.*;
import java.awt.*;
import java.lang.Math;
public class hello {public static void main(String[] avgs) {ArrayList<Student> stu=new ArrayList<>();Student s=new Student("吉士先生",94.3,"256dsd");Student s1=new Student("小姐也",56.6,"22222d");Student s2=new Student("大聪明",96.3,"11111d");stu.add(s);stu.add(s1);stu.add(s2);Student s3=Util.FindMaxScore(stu);System.out.println("最大值的信息是:"+s3.getName()+" "+s3.getScore()+" "+s3.getID());}
}
(三)、sattic的注意事项:(多用在测试类和工具类)
非静态方法只有通过实列化之后才能被调用(也就是new之后)
因为在同一个类中,可以不用套娃.
1.静态方法中没有this指针:
正常的非静态方法中,都会在()里面有一个被隐藏的this指针。这个this指针我们是不能在里面添加元素的,因为这个this是虚拟机虚拟的。this是指谁调用这个函数,那么this就是谁。因为静态方法是归类的全部所有的,所以this指针是没用的。
2.静态方法只能访问静态:
3.非静态方法可以调用所有
(四)、继承:
1.什么时候用到继承:
当类与类之间存在多个共同关系的时候,我们可以设置继承关系。把相同的关系放到基类中去,不同的再分别放到派生类中去。
2.JAVA继承的特点
1.单继承:一个子类只能继承一个父类。
2.不支持多继承: 不能同时继承多个父类。(不同于C++)
3.支持多层继承:
4.java时直接继承或间接继承Object类的。
3.继承权限:
构造方法 :不管什么权限都是不能够继承的。
成员变量:不管什么权限都是能继承的, 只不过public权限的能够直接使用。private的只能借助公有权限的成员方法才能使用。继承和使用是两回事。
成员方法:当权限是非私有、非static、非final的时候就能够被结成和使用.
基类会生成虚方法表,然后当作家谱往后传
(五)、派生类对成员的访问
1.成员变量的访问规则
遵循:就近原则.
基类:
public class Person {String name; //没有访问权限 默认为publicpublic Person() {}public Person(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}
派生类:
public class Student extends Person{private String name="xiaohei";public void show(){String name="小王";System.out.println(name);System.out.println(this.name);System.out.println(super.name);}
}
测试类:
import java.sql.SQLOutput;
import java.util.*;
import java.awt.*;
import java.lang.Math;
public class hello {public static void main(String[] avgs) {Student s=new Student();s.setName("李明");s.show();}
}
2.成员方法的访问规则:
遵循就近原则:
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.sql.SQLOutput;
import java.util.*;
import java.awt.*;
import java.lang.Math;
public class hello {public static void main(String[] avgs) {Student s=new Student();s.A();}
}
class Teacher{public void eat(){System.out.println("吃教师的饭");}public void drink(){System.out.println("喝教师的水");}
}
class Student extends Teacher{@Overridepublic void eat() {System.out.println("吃学生的......");}@Overridepublic void drink() {System.out.println("喝学生的......");}public void A(){eat();drink();this.eat();this.drink();super.eat();super.drink();}
}
如果在派生类中,没有对基类的方法进行覆盖。那么输出的结构将都是吃老师的反 喝老师的水。
3.方法的重写
当父类的方法不能满足子类的要求的时候,那么我们需要重写方法。对子类的方法进行重写新的方法。(B继承C,A继承B。如果B发生覆盖。那么A继承的B也是更改的)
重写的注意事项:
1.子类方法名和形参列表要和父类完全相同。
2.子类重新方法的时候访问权限一定要大于等于父类的访问权限。
3.子类重新父类的方法时,返回值类型必须小于等于父类。
4.只有被添加到虚方法表中的方法才能被填写。
60.【Java 进阶】相关推荐
- 抖音Java后端开挂,全靠这份啃了48天【Java进阶核心知识集+刷:25专题面试】
人人都想进大厂,当然我也不例外.早在春招的时候我就有向某某某大厂投岗了不少简历,可惜了,疫情期间都是远程面试,加上那时自身也有问题,导致屡投屡败.突然也意识到自己肚子里没啥货,问个啥都是卡卡卡卡,后期 ...
- Java进阶3 - 易错知识点整理(待更新)
Java进阶3 - 易错知识点整理(待更新) 该章节是Java进阶2- 易错知识点整理的续篇: 在前一章节中介绍了 ORM框架,中间件相关的面试题,而在该章节中主要记录关于项目部署中间件,监控与性能优 ...
- Java进阶(五)Java I/O模型从BIO到NIO和Reactor模式
本文介绍了Java中的四种I/O模型,同步阻塞,同步非阻塞,多路复用,异步阻塞.同时将NIO和BIO进行了对比,并详细分析了基于NIO的Reactor模式,包括经典单线程模型以及多线程模式和多Reac ...
- Java 进阶 ——2019 计划要读的书
Java 进阶 --2019 计划要读的书 代码整洁之道 重构 这两本学习完再写下面的书
- 《Java 进阶之路》 下--推荐书籍
真正想提升自己,我感觉最主要的是先把 JVM.并发.网络这三块知识点学会.学通,这三块是基础,后面所有的框架.中间件等相关的都是基于这三块知识点之上的.学完这三块知识点,可以快速的掌握其它的知识,新框 ...
- 《java 进阶之路》 上--推荐书籍
整整一月没有更新博客了,因为十月份和双十一新入手的6本技术相关的书,这个月看完了3本,后面的3本还得慢慢肯. 下面我就介绍下进阶高级工程师必须也是我自己都看的一些书和知识点. 1.深入理解Java虚拟 ...
- Java进阶书籍推荐,赶快收藏起来!
最近有很多学习或者已经在工作的java技术的同学都想要更进一步的提升自己,那么阅读书籍可以给大家带来帮助.今天,小千将分享过去几年中一些最好的Java进阶书籍,您可以在2021年阅读这些书籍,以更好地 ...
- 60.Java 代码编译和执行的整个过程
60.Java 代码编译和执行的整个过程 60.Java 代码编译和执行的整个过程 Java 代码编译是由 Java 源码编译器来完成,流程图如下所示: Java字节码的执行是由 JVM 执行引擎来完 ...
- java进阶案例下载_java进阶案例
java进阶案例: 数据类型,字符,数值,范围,布尔 :byte -128~127. 面向对象:protect :重载与构造 (一). this封装:static:继承:多态: 1.方法覆盖:supe ...
- Java进阶之对象克隆(复制)
转载自 Java进阶之对象克隆(复制) 假如说你想复制一个简单变量.很简单: int apples = 5; int pears = apples; 不仅仅是int类型,其它七种原始数据类型(bo ...
最新文章
- Java JDK 11:现在可以使用所有新功能
- RegConnectRegistry函数
- Boost.Python Tutorial
- intellij设置java中的代码中的import不折叠
- python第五次作业——陈灵院
- python中可变参数怎么传递的呢_在python中,你可以在命名参数后传递可变参数吗?...
- jvm详解、GC、堆内存参数调优
- numpy创建三维空数组_numpy数组的创建和属性转换
- android 方形按钮代码,Android中实现图文并茂的按钮实例代码
- 华为正式发布自有操作系统——鸿蒙 OS!
- 高职对计算机课程要求,高职计算机课程对学生编程能力培养.doc
- NLog.config
- pip mysql_config not found_pip安装mysql-python出现mysql_config not found错误
- 手机号码归属地全库生成
- 啊哈算法——第一章第一节:桶排序
- 小学计算机表格课件,小学信息技术级轻松做表格Word表格制作PPT课件.ppt
- mysql 查询视图_MySQL查看视图
- “深度学习”和“多层神经网络”的区别
- c语言求100以内偶数和while,c语言 求1到100以内的偶数之和
- 简述存储器的分级策略