System.out.println(); 输出
int 整数类型 不能以数字开头 区分大小写
int a=0
int的范围2的31次方到-2的31次方 21亿左右
2个int型运算后仍为int
除法没有余数14/5=2
%模运算 14%5=4 求余数.
double 双精度浮点型 比较大非无限
double c=123.456 double e=-123.456
浮点型除法保留小数.
double类型则不能使用双等号来比较大小,如果使用的话得到的结果将永远是不相等
String s="abcd" 字符串类型
变量的赋值=
布尔类型变量 boolean
boolean只能为 true 或者 false
ctrl+/ 群体注释
类型的提升 int和double做运算 强制提升int为double;
表达式和操作符
表达式 Expression
操作符 Operator
关系表达式的值为boolean类型的值;
==双等号 判断两个变量是否相等
类变量:独立于方法之外的变量,用 static 修饰。
实例变量:独立于方法之外的变量,不过没有 static 修饰。
局部变量:类的方法中的变量。
逻辑非! 逻辑与&& 逻辑或||
=赋值 a=b
int a=1;//初始化
a=123;//赋值
final a =0;
当你在类中定义变量时,在其前面加上final关键字,那便是说,这个变量一旦被初始化便不可改变,
这里不可改变的意思对基本类型来说是其值不可变,而对于对象变量来说其引用不可再变,
但引用变量所指向的对象中的内容还是可以改变的。
a +=b //a=a+b
a -=b //a=a-b
a *=b//a=a*b
a/=b //a=a/b
a %=b//a=a%b
a++自增操作符;
a++为后置自增 int b=10; a=b++; //a输出为10,b为11
++a为前置自增 int b=10; a=++b; //a输出为11,b为11
优先级与类型转换
double a=12.77;
int b=(int)a;//b值为12直接截断小数部分.
单行调试技术
1.加断点 右键 debug as
条件语句 if语句
if else
if{} else if{}
for循环
for(e1;e2;e3) e2>>s1>>e3 e2为false跳出循环
{s1
}
for循环的嵌套 for循环嵌套if语句
break语句和continue语句
break中止当前循环, continue跳出当前轮循环.
数组对象
int[] arr=new int[30]// 创建一个数组对象,容纳30个int
arr[0]第一个元素 arr[29]第30个元素;
arr[i],i叫索引或者下标. 下标从0开始;
int[] arr={1,2,3,4,5};
for(int i=0;i<arr.length;i++)
数组的遍历
通过for循环实现遍历.
int[] a=new int[4]; 变量a指向了一个对象
int[] b=a; //b和a指向了同一个对象 a和b都是该对象的引用,a可以操作目标对象,用b也可以操作目标对象
空对象 null
null:表示一个引用不指向任何对象
int[] a={11,11,11,11};
int[] b=a;
a=null;
空指针错误,
int[] a={11,11,11,11};
a=null;
a[0]=12;//报错
失去引用的对象
int[] a={8,8,8}; //失去引用的对象
a=new int[4];
a[0]=a[1]=a[2]=a[3]=17;
失去引用的对象会被Java环境自动删除.
类的概念
类,class.一个class可以若干基本类型的组合.
类Student
public String id; //学号
public String name; //姓名
public boolean sex;//性别
public String cellphone;//手机号
Student s1=new Student()
s1.name="XX"
1.类型名Student, 2.属性 学号,姓名,性别,手机号.
类型是描述一类事物的共性,对象是一个具体的实例;
类的嵌套,类的属性可以是另一个类.
boolean类型的默认值是false
double类型的默认是null
类的方法Method
public void 方法名()
{
}
//修饰符 返回值类型 名称(参数列表) {方法体}
调用方法.
方法的参数
参数列表 0-N个参数,以逗号分隔,类型,变量名
public void sohw(int a,double b,String c)
方法的返回值
return语句来返回一个值,
return语句执行后方法不再往下执行.
public int show()
打印输出只是方便调试结果,
可以在void的返回值时下用return结束函数.
return 的返回值可以是各种类型.
方法名的重载overload
方法名可以相同只要参数不同就行.
第八章当前对象(this)
this调用当前对象中的
在访问自己的方法时this.可以省略.
当名字发生重名时不能省略.
public class Triangle
{
public int a;
public int b;
public String value()
{
return a+"/"+b;
}
public Triangle mul(Triangle other)
{
Triangle c=new Triangle();
c.a=this.a*other.a;
c.b=this.b*other.b;
return c;
}
}
时
Triangle a=new Triangle();
a.a=1;
a.b=2;
Triangle b=new Triangle();
b.a=2;
b.b=3;
Triangle c=a.mul(b);
System.out.println(c.value());
第九章 访问修饰符
public(公开的)该成员可以被外部访问 visible可见
private(私有的)不可访问,not visible不可见 内部访问不受private限制
不写访问修饰符一般为private
getter 和setter 读/写 get读 set写
getNumber setNumber
private int number
public int getNumber()
{
return this.number;
}
public void setNumber(int number)
{
this.number=number;
}
封装
第十章构造方法
用于构造对象的方法(当创建对象时调用的方法)
规则1.方法名与类包相同 2.无返回值
public String id;
public String name;
public boolean sex;
public Student()
{
}
public Student(String id,String name,boolean sex)
{
this.id=id;
this.name=name;
this.sex=sex;}
构造方法可以有多个,一般要加一个默认构造方法即无参数构造方法.
构造方法一般是public修饰 ,特殊情况用private修饰.
当一个对象被创建时候,构造方法用来初始化该对象。构造方法和它所在类的名字相同,但构造方法没有返回值。
通常会使用构造方法给一个类的实例变量赋初值,或者执行其它必要的步骤来创建一个完整的对象。
不管你与否自定义构造方法,所有的类都有构造方法,因为Java自动提供了一个默认构造方法,它把所有成员初始化为0。
一旦你定义了自己的构造方法,默认构造方法就会失效。
对象的销毁
只管创建对象,不用销毁对象,对象由系统自动销毁.
Student s=new Student();
GC垃圾回收机制,回收不被使用的对象.
第11章继承
public class B extends A
{
}
继承写在子类的前面.
表示B继承于A A:父类(supercalss) B:子类(subclass)
类B继承于A时,自动继承A中的public属性/方法.
子类拥有父类非private的属性,方法。
重写
如果父类的方法不满足要求,则可以在子类重写.
在子类右键Source 选Override
完全重写和父类基础上补充.
super.xxx();
构造方法的继承
public class Triangle //父类
{
public double a;
public double b;
public double c;
public Triangle()
{
}
public Triangle(double a,double b,double c) //构造函数
{
this.a=a;
this.b=b;
this.c=c;
}
public class RightTriangle extends Triangle//子类
{
public RightTriangle(double a,double b,double c) //调用父类的构造函数
{
super(a,b,c);
}
先调用父类的构造方法,再调用子类的.
多个构造函数 用super(加参数),用的什么参数就调用那个构造方法.
单根继承
Java的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,
多重继承就是,例如A类继承B类,B类继承C类,所以按照关系就是C类是B类的父类,
B类是A类的父类,这是java继承区别于C++继承的一个特性。
右键 Quick Type Hierarchy
Object类
Java中Object是所有类的父类 如果一个类没有指定父类,则它默认父类是Object
Object类的toString对象
public String toString()
{
String s="学号"+id+"姓名"+name;
if(sex)
{
s=s+"男";
}
else
{
s=s+"女";
}
return s;
}
多态
重载Overload 重写Override 泛型.
1.子类和父类的类型转换(隐式转换)
ApplePie p1=new ApplePile();
Pie p2=p1; //类型转换ApplePie->Pie
2.父类转换成子类需要谨慎
ApplePie p3=(ApplePie)p2;//显式转换
p2实际指向ApplePie 所以可以转换.
看实际指向对象的具体类型,再调用实际指向对象的具体类型.
所有类型都是Object的直接或间接子类,所以
Object x=new MyFileVideo(); 没有问题
第12章 包
建包 new package
包的命名方式xx.xx.xxx 也是包的保存路径xx/xx/xxx
package xx.xx.xxx 表示本类所在的包的路径
import xx.xx.xxx.*; 一次性导入该包下所有的类
包的显式:Flat 扁平化显示, Hierarchical 层级显示 推荐
eclipse 的快捷操作\
文件可以拷贝.
Refresh同步
包名重复
改名修改包名,类,方法,属性
选中,右键Refactor rename. 使用到它的地方自动改名.
保存ctrl+s,注释 Ctrl+/, Ctrl+鼠标左键 查看定义,
打开提示 alt+/,
第13章静态方法.
该方法没有访问this对象,即没访问this属性,也没访问this方法.
称为静态方法(全局方法)
没有上下文单纯的方法.
静态方法用static修饰
public static boolean isPrime(int n)
{
}
静态方法可以不创建对象
Xxx a=new Xxx()可以不写.
2
Math类:有很多计算静态方法
abs(a):求绝对值;
pow(a,b):求a的b次幂
sqrt(a):求a的平方根
round(a):四舍五入
sin/cos/tan:正弦/余弦/正切
程序的入口
只有main方法可以做为程序得到入口
public static void main(String[] args)
由于是static全局方法,可以放在任意一个类下面.
main方法的形式是约定好的.
单元测试
写好一个类后 添加一个main方法,对一个类进行测试.
第14章 常见工具类
String 字符串
String s="人好nihao"; //中文字符和英文字符都占一个字符
int n=s.length(); //n=7;
空字符串
String s=""; //空字符串和null是两回事! 空字符串是一个正常的字符串对象,null不指向任何对象.
子串
String s="人好nihao";
String sub=s.substring(0,4); //0,1,2,3,不包含4
substring(beginIndex,endIndex)不含endIndex;
判断内容是否相同
字符串必须使用 equals
String s1="nihao";
String s2="nihao";
if(s1.equals(s2))
{
System.out.println("相同");
}
比较大小:按字典序比较 s1.compareTo(s2)<0 忽略大小写的比较用compareToIgnoreCase
String s1="abcd";
String s2="acef";
if(s1.compareTo(s2)<0)
System.out.println(s1+"位于前面");
else
System.out.println(s2+"位于前面");
格式化
String s=String.format("姓名:%s,年龄:%d,身高:%.2f","名字",35,1.75);
String.format()是一个静态方法
格式化时 %s对应字符串 %d整数 %.2f表示显示2位小数
查找 indexOf
如果有这个子串,则返回位置索引;否则返回-1;
String c="China is a great country";
int pos=s.indexOf("great");
if(pos<0)
{
System.out.println("没找到");
}
//查询s1中我出现的次数
String s1="对角线我,我阿达,我,阿萨德";
int count=0;
int start=0;
while(start<s1.length())
{
int pos=s1.indexOf("我",start); //indexOf 查找的字符类型,加开始查询的地址参数.
if(pos<0)
break;
count+=1;
start=pos+1;
}
System.out.println(count);
前缀后缀
startsWith() 判断前缀
endsWith() 判断后缀
String d="country.mp4";
if(d.endsWith(mp4))
{
System.out.println("是mp4格式");
}
基本类型与包装类型
long<=>Long
int<=>Integer
short<=>Short
byte<=>Byte
double<=>Double
float<=>Float
boolean<=>Boolean
int a=10;
Integer b = new Interger(10);
Integer a=new Integer(10);
int b=a.intValue();
System.out.println(b);
Integer k=123;
int m=k;
System.out.println(m);
数值<=>String
int->String
String a="123"
int b=Integer.valueOf(a); //a
String->int
String s=String.valueOf(339);
包装类的作用
提供转换方法,把所有类型统一到类的范畴,都是Object的子类.
控制台Console
控制台在正式开发中不会用到.
用于语法练习,模拟用户交互. //语法,逻辑
随机数的使用
Random类JDK自带的基本类
java.util.Random
import java.util.Random;
Random rand=new Random();
for(int i=0;i<3;i++)
{
int s=rand.nextInt(1000);
System.out.println("生成随机数"+s);
}
不允许重复的情况
char类型 字符类型
char c1 ='A';
字符的编码
char c1 ='A';
int n =c;
System.out.println("生成编码"+n);
A为65,B 66 ,a 97,b 98, 0为48. 空格 为32.
0-128之间称为ASCII码(仅有英文数字,符号)
字符串和字符
String=>char
String str="afanihao"
char ch=str.charAt(8); //下标从0开始计算
char[] chs=str.toCharArray();
char=>String
char[] chs={"啊","你","好"};
String str=new String(chs,0,2);
str+='的';
第15章链表
容器:存储对象的东西
容器是设计术语,非语法概念.
比如数组就是一个容器.
数组容器的确定,容量固定,无法扩展
插入和删除困难,插入对象的代价太多,需挪动现有对象.
15.2 链表(Linked List) 链表是一种组织数据的方式,可以把若干对象串联起来.
public class Monkey
public Monkey next;
Monkey m1=new Monkey(101,"XX")
Monkey m2=new Monkey(102,"XX")
Monkey m3=new Monkey(103,"XX")
Monkey m4=new Monkey(104,"XX")
m1.next=m2;
m2.next=m3;
m3.next=m4;
m4.next=null;
以链状形式串起来的.最前面的为链表头.
节点Node;
链表的遍历
Monkey node=m1; //知道头节点的位置.
while(node!=null) //当节点不指向空时
{
System.out.println("链表"+node); //输出
node=node.next; //指向下一个节点
}
15.3
链表插入与删除节点.
1.附加到末尾
Monkey m1=new Monkey(101,"XX")
Monkey m2=new Monkey(102,"XX")
Monkey m3=new Monkey(103,"XX")
Monkey m4=new Monkey(104,"XX")
m1.next=m2;
m2.next=m3;
m3.next=m4;
m4.next=null;
//找到链表的最后一个节点
Monkey tail=m1;
while(tail!=null)
{
if(tail.next==null)
{
break;
}
else
{
tail=tail.next;
}
}
tail.next=m5;
2.插入第一位置之后
Monkey hard=m1;
m5.next=m1.next; //m5的尾部指向m1的尾部;
m1.next=m5; //m1的尾部指向m5;
3.插入指定位置
插到102之后
Monkey head = m1;
while (head != null)
{
if (head.id == 102)
{
m5.next = head.next;
head.next = m5;
break;
}
else
{
head = head.next;
}
}
删除节点.
m1.next=m3; //删除m2;
15.4
有头链表;
用一个固定的假节点充当头节点.此节点不算做链表长度,简化算法.
Monkey m1=new Monkey(101,"XX")
Monkey m2=new Monkey(102,"XX")
Monkey m3=new Monkey(103,"XX")
Monkey m4=new Monkey(104,"XX")
m1.next=m2;
m2.next=m3;
m3.next=m4;
m4.next=null;
Monkey head=new Monkey(0,"XX");
head.next=m1;
遍历
Monkey m=head.next;
while(m!=null)
{
System.out.println("链表"+m);
m=m.next
}
插入节点
插入在头部
Monkey m5=new Monkey(105,"XX");
m5.next=head.next; //插入节点时 先定义需要插入节点的尾部,
head.next=m5; //插入节点时 再定义需要插入节点的头部.
//插入在尾部
Monkey node1 = head;
while(node1!=null) //找到最后位置.
{
if(node1.next==null)
{
break;
}
else
{
node1=node1.next;
}
}
m5.next=null;
node1.next=m5;
删除节点
Student a=new Student("101","A");
Student b=new Student("102","B");
Student c=new Student("103","C");
Student d=new Student("104","D");
Student head=new Student("0","head");
head.next=a;
a.next=b;
b.next=c;
c.next=d;
d.next=null;
//删除节点
1. Student n=head.next; 101
Student p=head;
while(n!=null)
{
if(n.id=="102")
{
p.next=n.next;
break;
}
p=p.next;
n=n.next;
}
//删除节点
2. Student node=head;
while(node.next!=null)
{
if(node.next.id=="102") //判断是否是要删除的节点
{
node.next=node.next.next; //实现删除节点
break;
}
node=node.next; //往下个节点走.
}
//遍历
Student i=head.next;
while(i!=null)
{
System.out.println("链表为"+i);
i=i.next;
}
链表和容器
XXXList
黑盒,容器是不透明的,不需要关心它是如何内部存储对象的.
public class Monkey //定义monkey类
{
public int id;
public String name;
public Monkey next;
public Monkey()
{
}
public Monkey(int id,String name)
{
this.id=id;
this.name=name;
}
@Override
public String toString()
{
return String.format("id:%d, 名字:%s",id,name);
}
}
public class MonkeyList //链表存储实现容器
{
Monkey head=new Monkey(0,"石猴");
//添加对象
public void add(Monkey m)
{
m.next=head.next;
head.next=m;
}
//编号查找
public Monkey get(int id)
{
Monkey node = head.next;
while (node != null)
{
if(node.id==id)
{
return node;
}
node = node.next;
}
return null;
}
}
MonkeyList lst=new MonkeyList(); //主函数
Monkey m1 = new Monkey(100, "圆圆");
Monkey m2 = new Monkey(101, "芳芳");
Monkey m3 = new Monkey(102, "谢谢");
Monkey m4 = new Monkey(103, "哦哦");
Monkey m5 = new Monkey(104, "最后添加的");
lst.add(m1); //实现添加
lst.add(m2);
lst.add(m3);
lst.add(m4);
Monkey a=lst.get(102); //查找的实现
if(a!=null)
{
System.out.println("找到了"+a);
}
数组链表ArrayList
import java.util.ArrayList;
Student a=new Student("101","A");
Student b=new Student("102","B");
Student c=new Student("103","C");
Student d=new Student("104","D");
ArrayList x=new ArrayList();
x.add(a);
x.add(b);
x.add(c);
x.add(d);
for(int i=0;i<x.size();i++)
{
Student s=(Student)x.get(i);
System.out.println("遍历得到"+s);
}
删除 x.remove(1) //索引
java入门笔记
点赞
收藏