一,补充
Byte类型所能表达的数的最大值和最小值
10000000 最小值 -2^(8-1)=-128
01111111 最大值 2^(8-1)-1=127
二,如何抽象一个java类
一个java类包含类属性和类方法
例:新建一个学生类
属性:姓名,性别,年龄,学号,成绩,地址…
方法学习,吃饭,睡觉,玩篮球,打游戏…
方法的要素:
修饰符,返回值,方法名称,参数列表,方法体
写一个方法
例:学习的方法
如何学习?
学习需要另一半,学习最后会收获爱情
public String study(Student girl){
//做活动的过程
//使用输出语句来模拟一下
name+"和"+girl.name+"一起学习。。。"
return "爱情";
}
//使用引用类型一定要new
//String str = "hello";
//String str1 = new String("hello");
方法的调用:
目前为止:使用对象,方法名字();来进行调用,括号内要使用参数列表(如果有的话)
变量的类型
局部变量:
位置:在方法的内部
使用方式:使用前没有初始的默认值,需要手动初始化
作用域(作用范围):当前方法的代码块内{}
成员变量(实例变量):
位置:在方法的外部,在类的内部
使用方式:使用前有默认值
整型的默认值0
浮点型的默认值0.0
布尔型的默认值false
字符型的默认值‘ ‘
引用类型的默认值null
作用域:在当前的整个类当中
学习的方法的代码如下:
vi ./src/Student.java
cat ./src/Student.java
package com.briup.day03;
public class Student{ //新建一个Student类
//属性
String name ;
int age;
String gender;
//行为
//和另一半一起学习,并收获爱情
public String study(Student girl){
System.out.println(this.name+"和"+girl.name+"一起学习.");
return "收获爱情 ";
}
//展示自己的个人信息
public void show(){
System.out.println("姓名"+name);
System.out.println("年龄"+age);
System.out.println("性别"+gender);
}
//修改名字的方法
public void setName(String newName){
name = newName;
}
vi ./src/NewTest.java
cat ./src/NewTest.java
package com.briup.day03;
import java.util.Date;
public class NewTest{
public static void main(String[] args){
Student lr = new Student(); //男学生
lr.setName("小明");
lr.age = 20;
lr.gender = "男";
Student mary = new Student(); //虚拟的女学生
mary.setName("小红");
mary.age = 18;
mary.gender = "女";
lr.show(); //展示个人信息方法的调用
mary.show();
String result = lr.study(mary);
System.out.println(lr.name+result);//展示学习结果
}
}
javac -d ./bin ./src/*.java //将两个.java文件一起编译
java -cp ./bin com.briup.day03.NewTest //运行Student类的另一个.class文件
姓名小明
年龄20
性别男
姓名小红
年龄18
性别女
小明和小红一起学习.
小明收获爱情
三,内存的划分
方法区:放类的相关信息
堆:存放的是new操作之后产生的数据,各个线程之间共享
栈:存放的是变量的相关信息,每条线程拥有自己独立的栈(栈是先进后出)
常量池:常量,在堆中
存储方式
基本类型的存储方式:栈中开辟空间,直接保存值
引用类型的存储方式:栈中开辟空间保存变量。使用new的方式在堆去开辟空间保存数据,同时把堆区的内存地址赋值给栈区的变量
四,操作符
数学运算操作符
+
:如果两侧都为数字,则代表加法运算
如果两侧都为字符串,则代表字符串拼接
需求:想让一个int类型的10,变成一个String类型的10,该如何做
-
:减
*
:乘
/
:整除和不整除
浮点数转为整数,三种方法:
去尾:不管小数部分是多少,都不要
进一:只要存在小数部分,则整数部分+1,小数部分舍去
四舍五入:
如果浮点数强转为整数,则会丢失掉小数部分的精度
%
:取余
赋值操作符
=
:赋值
+=
: a+=2→a=a+2
前者会比后者多一步隐式的数据类型转换
-=、 *=、/=、%=
:同+=
相等操作符:
==
:相等
左右为数字:则对比具体的数值
左右为引用类型:则对比其引用的地址值
一侧为数字,一侧为引用类型:编译报错
如果想对比字符串的内容是否一致,可使用Object的方法equals();
用法:字符串对象1.equals()字符串对象2
!=
:不等,和相等的用法完全一致,但是逻辑完全相反
比较操作符:
<
: 1<2 →true
>
: 1>2 -->false
<=
: 1<=1 -->true
>=
: 1>=1-->true
位运算操作符
二进制的运算
&与:
0&0=0
1&0=0
1&1=1
双1为1,有0则0
|或:
0|0=0
1|0=1
1|1=1
双0则0,有1则1
^异或:
0^0=0
0^1=1
1^1=0
相同为0,不同为1
~非:取反
代码内容
vi ./src/Operator.java
cat ./src/Operator.java
package com.briup.day03;
public class Operator{
public static void main(String[] args){
int a = 10+20;
int b = 30;
byte c = 127;
int d = b + c ;
/*c+=1;
c = c + 1 会报错
*/
System.out.println("---"+c);
System.out.println(a);
System.out.println(10+""); //数字转字符串
System.out.println(c+"100");
System.out.println(d);
System.out.println(12/4);
float f1 = 13.0f;
int i1 = 5;
System.out.println(f1/i1);
System.out.println(2.00-1.10);
System.out.println(0/1);
System.out.println(0/10);
System.out.println(10/0.0);
System.out.println(-10/0.0);
System.out.println(0.0/0.0);
System.out.println(1==2);
//System.out.println("10"==10); 编译出错,相同类型才能比较
String str1 = "hello";
String str2 = "hello";
String str3 = new String("hello");
String str4 = new String("hello");
System.out.println(str1 == str2);
System.out.println(str1 == str3);
System.out.println(str3 == str4);
System.out.println(str2 == str3);
/*想让str1和str3相等,有没有办法?
对比字符串内容的方法,String.equals();
*/
System.out.println(str1.equals(str3));
int m = 10;
int n = 11;
System.out.println(m & n);
System.out.println(m ^ n);
}
}
javac -d ./bin ./src/Operator.java
java -cp ./bin com.briup.day03.Operator
---127
30
10
127100
157
3
2.6
0.8999999999999999
0
0
Infinity
-Infinity
NaN
false
true
false
false
false
true
10
1
五,心得
今天的内容还是有一定程度的接受难度的,在关于局部变量和实例变量的相关内容和代码时并没有第一时间理解透彻,下课之后也对着终端研究了很长时间,在将NewTest.java 和 Student.java一起进行编译时一直出错,也修改了很长时间,最后才把代码完全弄明白。关于创建一个类并引用的地方理解也不是很透彻,明天还需要多练习这一部分。目前对于基本的java程序的格式已经越来越熟了,基本可以自己背着把代码写出来。今天关于操作符的内容倒是没有什么不懂的地方。明天早上的任务就是先把局部变量和实例变量,以及类的属性方法和引用仔细搞明白。加油!