Java基础4-面向对象概述;super();this()
昨日内容回顾
java基本数据类型:
byte : 一个字节,-128 ~ 127 = 256
short : 两个字节, -32768 ~ 32767
int : 四个字节,
long : 八个字节,
float : 4字节
double : 8字节
boolean : 1个字节
char : 2个字节
运算符
- 算数: (+号) (-号) + - * / % (+号) (-号) a++ ++a b-- --b
- 赋值: = += -= *= /= %=
布尔表达式的逻辑运算符
- | : 单或,没有短路情况。
- & : 单与,同上。
- ^ : 异或,a == b->false a !=b -> true
- ! : 取反
- && : a && b ,a == false ,b 不运算,短路了。
- || : a || b ,a == true , b 不运算,短路了。
java中数字的表现形式
- 十进制 int x = 100 ;
- 八进制 int y = 077 ;
- 十六进制 int z = 0xef;
将一个byte数变换成00-FF之间的一个字符串
[思路]:
1)将b和十六进制数0x0F做&运算取得低四位的值。
2)再将b右移4位,再次和0x0F做&运算取得高四位的值。
3)构造字符数组,按下标取得对应的字符即可。
作业解答
定义一个函数,函数功能是动态提取int[]中元素的最大值
public int maxArr(int[] arr){
if(arr==null || arr.length=0){
System.out.println("非法数组");
return -1;
}
max = arr[0];
for(int i=1;i<arr.length;i++){
if(arr[i]>max){
max = arr[i];
}
}
return max;
}
定义一个函数,从数组中查询指定的元素首次出现的位置
public int findIndex(int[] arr, int x){
for(int i=0;i<arr.length;i++){
if(arr[i]==x){
return i;
}
}
if(i==arr.length)
return -1;
}
定义函数,完成冒泡排序,大数下沉
// 5 4 3 2 1
// 4 3 2 1 5
// 3 2 1 4 5
// 2 1 3 4 5
// 1 2 3 4 5
public void bubbleSort(int[] arr){
for(int i=arr.length-1;i>0;i--){
for(int j=0;j<i;j++){
if(arr[j]>=arr[j+1]){
int tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
}
折半查找
public int halfFind(int[] arr, int x){
// 2 4 6 8 9 10 23 32 34 45 ---> 8
int min = 0;
int max = arr.length-1; while(min<=max){
int index = (min+max)/2;
if(arr[index]==x){
return index;
}
else if(arr[index]>x){
max = index-1;
}
else{
min = index+1;
}
}
return -1;
}
定义一个函数,实现矩阵的转置.arr[i][j] == arr[j][i];//前提条件是正方的。
public void transArr(int[][] arr){
for(int i=0;i<arr.length;i++){
for(int j=0;j<=i;j++){
int tmp = arr[i][j];
arr[i][j] = arr[j][i];
arr[j][i] = tmp;
}
}
}
遍历三维组数,横向输出三维数组的每一个层。
public void out3DArr(int[][][] arr,boolean flag) {
if(flag==true) {
for(int i = 0;i<arr.length;i++) {
for(int j=0;j<arr[i].length;j++) {
for(int k=0;k<arr[i][j].length;k++ ) {
System.out.print(arr[i][j][k]+"\t");
}
System.out.println();
}
System.out.println("--------------------------------------");
}
}
else {
for(int i =0;i<arr.length;i++) {
for(int j=0;j<arr.length;j++) {
for(int k=0;k<arr.length;k++) {
System.out.print(arr[j][i][k]+"\t");
}
System.out.print("\t");
}
System.out.println();
}
}
}
定义一个类:Dog 有名称 color age cry();
public class Dog {
private String color;
private int age; public void cry() {
System.out.println("汪汪汪...");
}
}
阐述出来堆区,栈区,何时出现溢出,如何解决。
1)堆内存:存放对象,当构造大量对象时,会出现堆溢出,可以通过java -Xmx设置最大堆内存大小, java -Xms设置初始堆内存大小
2)栈内存:方法栈,当方法无限递归调用时出现,通过java -Xss 设置栈内存大小将一个字节转换成0~255之间的整数:将符号位作为数字位
public int byte2Int(byte b){
return b&0xff;
}
对数组进行冒泡排序(实现倒序),封装成方法,返回排序后的数组
// 1 2 3 4 5
// 2 3 4 5 1
// 3 4 5 2 1
// 4 5 3 2 1
// 5 4 3 2 1
public void bubbleSort(int[] arr){
for(int i=arr.length-1;i>0;i--){
for(int j=0;j<i;j++){
if(arr[j]<=arr[j+1]){
int tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
}
实现数组的拷贝,将一个数组中的元素复制到另一个数组中,如果元素个数不等,或者截取,或者回绕。
public void copyArr(int[] srcArr, int[] destArr) {
if(srcArr.length>=destArr.length) {
for(int i = 0;i<destArr.length;i++) {
destArr[i] = srcArr[i];
}
}
else {
for(int i = 0;i<destArr.length;i++) {
destArr[i] = srcArr[i%srcArr.length];
}
}
}
输出整数的二进制表示方式
public void int2bit(int x){
System.out.print("0x");
for(int i=31;i>=0;i--) {
System.out.print(((a>>i)& 0x1));
}
}
选择排序
public void selectSort(int[] arr) {
// 5 4 3 2 1
// 1 5 4 3 2
// 1 2 5 4 3
// 1 2 3 5 4
// 1 2 3 4 5
for(int i = 0;i<arr.length-1;i++) {
for(int j=i+1;j<arr.length;j++) {
if(arr[i]>=arr[j]) {
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
}
OOP
Oriented object program,面向对象编程
entity:实体,new:新建
面向对象的特征:
- 封装
- 继承
- 多态
对象:
切实存在的个体类:
- 物以类聚,人以群分。人找人,虾找虾。
- 对现实事物的软件抽象
类的成员:
成员变量:属性,数值类型的基本数据类型默认值是0,与声明顺序无关.存放在对象所在的堆内存中
成员函数:方法
构造函数
构造代码块
定义方式:
class 类名 //首字符大写,$_开头
堆:数组和对象在堆中
栈:方法在栈中,StackOverflow
局部变量:定义在方法或语句中,没有默认初始化值,必须初始化,存放在栈中,所在范围结束后,空间自动释放
单位换算
1024 = 1k
2^10 = 1024
1kb = 1024 byte
1mb = 1024k byte
1gb = 1024m byte
1tb = 1024g byte
1pb = 1024t byte
1eb = 1024pb
1zb = 1024eb
1yb = 1024zb
1nb = 1024yb
java VM调整堆大小:
堆默认是1/4物理内存,栈空间默认是1m
java -X //查看java非标准输出帮助
java -Xmx100m //设置jvm的堆空间最大值
java -Xms100m //设置jvm的堆空间初始值
java -Xss100m //设置jvm的栈空间最大值
查看java进程id使用jps
查看指定java进程的堆内存信息使用:jmap -heap pid
java匿名对象
//匿名对象1
new Person().run();
//匿名对象2,作为参数进行传递
run0(new Person());
封装
将部分成员隐藏起来,外界只能通过其他方式进行访问。一般
使用private进行修饰,保证安全性
- public -- private
构造函数
函数名和类名相同
没有返回值:创建后肯定返回的是该类的对象
如果类没有定义构造函数,jvm分配一个空构造。如果类定义了构造函数,没有空构造
可以重载
创建对象
new Person();
构造代码块
创建对象时调用
构造函数之前
对象创建过程
构造代码块:从上到下按序执行
构造函数
成员变量
color = null ;
color = "black";
构造代码块
构造函数
静态代码块
在类加载期间执行,而且只执行一次
类的信息存放在方法区,jvm中还有堆区(heap),栈区(stack)
静态成员之间可以互相访问,按序执行。
静态成员不可以访问非静态成员。
非静态成员可以访问静态成员
静态成员通过类访问,和对象无关(类名.静态成员)
OOA
Oriented object analyze,面向对象分析
OOD
Oriented object design,面向对象设计
一切都是对象
面向过程的:c语言
javabean,标准java类
pojo:plain old java object,
class Dog{
private String color;
public String getColor(){
return color;
}
public void setColor(String c){
color = c;
}
}
this
指向对象自身的引用,类似于成员变量,使用private进行修饰
静态方法不可以使用this
this.:访问成员变量
this():访问当前类的构造函数,对this的调用必须是第一条语句。为了构造函数的重用
继承
extends
只支持单重继承,不支持多重继承
支持多层继承
super()
访问超类的构造函数
必须是第一行代码
构造函数的第一行代码要么是this(),要么是super(),默认是super()
super.xxx 访问超类的成员
函数的覆盖
重写,overwrite
只有在继承的情况下
private方法不可以被覆盖
成员变量:不可以被覆盖
练习
Car{String color,int tires}
class Car{
private String color;
private int tires = 4;
public void setColor(String color){
this.color = color;
}
public String getColor(){
return color;
}
}
百钱买百鸡
- 公鸡:5/只
- 母鸡:3/只
- 小鸡:1/3只
- 100买100只鸡
class BuyChick{
public static void main(String[] args){
for(int i=0;i<=100/5;i++){
for(int j=0;j<=100/3;j++){
for(int k =0;k<=100*3;k=k+3){
int money = i*5+j*1+(k/3);
int count = i+j+k;
if(money==100 && count==100){
System.out.println("公鸡:"+i+",母鸡:"+j+",小鸡:"+k);
}
}
}
}
}
}
作业
将按位运算操作,尤其是左移和右移(有无符号)整理到自己的博客中。
重点说明清晰负数的运算过程。byte数到十六进制字符串表现形式程序设计原理和实现方式整理到博客中。
定义函数,计算一位整型数组所有元素的和。
Java基础4-面向对象概述;super();this()的更多相关文章
- Java基础-初识面向对象编程(Object-Oriented-Programming)
Java基础-初识面向对象编程(Object-Oriented-Programming) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Java是一门面向对象的程序设计语言.那么什 ...
- 黑马程序员——【Java基础】——面向对象(一)概述、类与对象、继承、抽象类、接口、多态、内部类
---------- android培训.java培训.期待与您交流! ---------- 一.面向对象概述 1.面向对象:是一个很抽象的概念,它相对面向过程而言,是一种程序设计的思想. 2.面向对 ...
- 黑马程序员——【Java基础】——面向对象(二)异常机制、包(Package)
---------- android培训.java培训.期待与您交流! ---------- 一.异常机制 (一)异常概述 1.异常:就是程序在运行时出现不正常情况. 2.异常类:程序在运行时,出现的 ...
- Java基础教程(1)--概述
一.什么是Java语言 Java是于1996年由Sun公司发布的一种极富创造力的面向对象的程序设计语言.它不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,因此Java ...
- Java基础之面向对象以及其他概念
一.基础知识:1.JVM.JRE和JDK的区别: JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性. java语言是跨平台,jvm不是跨平台的. JR ...
- Java基础知识➣面向对象(八)
概述 Java和C#都是面向对象语言,面向对象编程是目前高级语言习惯的编程模式,与C++编写过程编程而言,面向对象使用起来高效.灵活:面向对象的三个特征:封装.继承和多态. Java面向对象 1.类封 ...
- Java基础之面向对象
面向对象 1.面向对象思想: (1)概述:面向对象是相对于面向过程而言的,面向过程强调的是功能,面向对象强调的是将功能封装进对象,强调具备功能的对象: (2)思想特点: ...
- 【Java基础】面向对象下
面向对象下 这一章主要涉及其他关键字,包括 this.super.static.final.abstract.interface.package.import 等. static 在 Java 类中, ...
- 【Java基础】面向对象上
面向对象上 这一章主要涉及 Java 类及类的成员,包括属性.方法.构造器:代码块.内部类. 面向过程与面向对象 面向过程(Procedure Oriented Programming,POP)与面向 ...
- 【java基础】面向对象的三大基本特征之-------继承
面向对象的三大特征:封装,继承,多态 java通过extends关键字来实现继承,而且是单继承,一个子类只可以有一个直接父类,但是父类还可以有父类... java.long.Object是所有类的父类 ...
随机推荐
- Go多组Raft库
Go多组Raft库 https://github.com/lni/dragonboat/blob/master/README.CHS.md 使用用例 https://github.com/lni/dr ...
- Go strings.Builder
Go strings.Builder 字符串拼接操作优化 最开始的时候,可能会使用如下的操作: package main func main() { ss := []string{ "sh& ...
- Hadoop序列化-流量汇总案例
Hadoop序列化案例-流量汇总需求 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Hadoop序列化 1>.为什么要序列化 一般来说,“活的”对象只生存在内存里,关机断 ...
- 8.装饰模式(Decorator Pattern)
子类复子类,子类何其多 假如我们需要为游戏中开发一种坦克,除了各种不同型号的坦克外,我们还希望在不同场合中为其增加以下一种或多种功能;比如红外线夜视功能,比如水陆两栖功能,比如卫星定位功能等等.按类继 ...
- parseFloat()为什么没有效果
parseFloat() 函数可解析一个字符串,并返回一个浮点数.看清楚说明是操作字符串,如果是数值类型parseFloat([],x)会失去效果. 正确的用法:parseFloat().toFixe ...
- 【leetcode70】【动态规划】 爬楼梯
(1 pass 一维动态规划) 爬楼梯(easy) 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数 ...
- HDU 1028(数字拆分 分治)
题意是求所给的数能够被拆分成的不同组合数目. 方法有三种: 一.完全背包. 限制条件:所用数字不大于 n. 目标:求分解种数(组合出 n 的方法数). 令 dp[ i ][ j ] = x 表示 用前 ...
- SSH框架的搭建和测试(Spring + Struts2 + Hibernate)
SSH框架实现了视图.控制器.和模型的彻底分离,同时还实现了业务逻辑层与持久层的分离. Spring实现了MVC中的 Controller的功能,Struts实现Web视图的功能,Hibernate则 ...
- Sqlserver远程过程调用失败
这种情况一般是由于有高版本的SqlServer导致的,网上有删除Loaldb之类的建议,这样其实不太好,回头用高版本数据库的话还得装回来.其实可以通过计算机管理->服务和应用程序进行设置,用下面 ...
- adb.exe已停止工作
提示adb.exe错误,我电脑上没有安装豌豆荚,也没运行其它应用,最后发现是360杀毒软件导致的,进程中关掉360Mobile即可.